Open miemie2013 opened 4 years ago
恕我直言qqwweee那版yolo3就是个废仓库,训练不出效果,loss经常出现nan,那段时间让我踩了很多坑。恕我直言这么废的仓库也有那么多star真的让人很无语。算法复现的要求是达到指定精度,而不是让观众成为你的debugger、改进者。广告虽可耻,大家可以看看我复现的这版yolov4,精心设计了损失函数,训练了70000步就没出现过nan,mAP至少可达36%,欢迎点star:
能不能详细说说问题出在哪里?我之前也是mAP上不去。
恕我直言qqwweee那版yolo3就是个废仓库,训练不出效果,loss经常出现nan,那段时间让我踩了很多坑。恕我直言这么废的仓库也有那么多star真的让人很无语。算法复现的要求是达到指定精度,而不是让观众成为你的debugger、改进者。广告虽可耻,大家可以看看我复现的这版yolov4,精心设计了损失函数,训练了70000步就没出现过nan,mAP至少可达36%,欢迎点star: https://github.com/miemie2013/Keras-YOLOv4
能不能详细说说问题出在哪里?我之前也是mAP上不去。
别debug了,会让你对这个算法产生误解的。你不是别人的debugger。
恕我直言qqwweee那版yolo3就是个废仓库,训练不出效果,loss经常出现nan,那段时间让我踩了很多坑。恕我直言这么废的仓库也有那么多star真的让人很无语。算法复现的要求是达到指定精度,而不是让观众成为你的debugger、改进者。广告虽可耻,大家可以看看我复现的这版yolov4,精心设计了损失函数,训练了70000步就没出现过nan,mAP至少可达36%,欢迎点star: https://github.com/miemie2013/Keras-YOLOv4
能不能详细说说问题出在哪里?我之前也是mAP上不去。
别debug了,会让你对这个算法产生误解的。你不是别人的debugger。
恕我直言qqwweee那版yolo3就是个废仓库,训练不出效果,loss经常出现nan,那段时间让我踩了很多坑。恕我直言这么废的仓库也有那么多star真的让人很无语。算法复现的要求是达到指定精度,而不是让观众成为你的debugger、改进者。广告虽可耻,大家可以看看我复现的这版yolov4,精心设计了损失函数,训练了70000步就没出现过nan,mAP至少可达36%,欢迎点star: https://github.com/miemie2013/Keras-YOLOv4
能不能详细说说问题出在哪里?我之前也是mAP上不去。
别debug了,会让你对这个算法产生误解的。你不是别人的debugger。
我不知道问题出在哪里,迁移学习我也试了。只能提升6个点
你是指他的问题就出在Loss函数那里吗?
你是指他的问题就出在Loss函数那里吗?
不知道,知道他的仓库有问题之后我不再看他仓库的代码了。我实现的这一版参考了YunYang1994和百度PaddleDetection的代码,很权威了。
给你个star
谢谢作者!我不好意思放广告了,呜呜呜。不好意思了。I feel sorry.
谢谢作者!我不好意思放广告了,呜呜呜。不好意思了。I feel sorry.
#s8 = layers.Concatenate()([x, s8]) #s8是不是应该为下一层,堆叠之后做一次卷积再route
#x = conv2d_unit(s8, i256, 1, strides=1)
## ============================= s16 =============================
#x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(x)
x = layers.Concatenate()([x, s8])
s8 = conv2d_unit(s8, i256, 1, strides=1)
# ============================= s16 =============================
x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(s8)
#x = conv2d_unit(s16, i512, 1, strides=1)
## ============================= s32 =============================
#x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(x)
x = layers.Concatenate()([x, s16])
s16 = conv2d_unit(s16, i512, 1, strides=1)
# ============================= s32 =============================
x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(s16)
yolo4.py的模型主体部分,你检查一下,有两个地方的route,是不是提前了一层,还是我找到的网络图有问题?
谢谢作者!我不好意思放广告了,呜呜呜。不好意思了。I feel sorry.
#s8 = layers.Concatenate()([x, s8]) #s8是不是应该为下一层,堆叠之后做一次卷积再route #x = conv2d_unit(s8, i256, 1, strides=1) ## ============================= s16 ============================= #x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(x) x = layers.Concatenate()([x, s8]) s8 = conv2d_unit(s8, i256, 1, strides=1) # ============================= s16 ============================= x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(s8)
s16 = layers.Concatenate()([x, s16]) #s16是不是应该为下一层,堆叠之后做一次卷积再route
x = conv2d_unit(s16, i512, 1, strides=1)
## ============================= s32 ============================= #x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(x) x = layers.Concatenate()([x, s16]) s16 = conv2d_unit(s16, i512, 1, strides=1) # ============================= s32 ============================= x = layers.ZeroPadding2D(padding=((1, 0), (1, 0)))(s16)
yolo4.py的模型主体部分,你检查一下,有两个地方的route,是不是提前了一层,还是我找到的网络图有问题?
是我根据原版那个网络配置文件写的,应该没问题。
我这里有一张图,我看和Ma-Dan写得是一样的,跟你哪个就是不一样的? 图太长了
因为太多的反馈训练问题,为了避免我的代码对大家的误导,抄作业了训练和loss,一直抄到 label smooth 之前。后面这个repo不会再抄和更新,抄到这里是为了发现和定位问题。 为了模型有更专业的持续维护,请大家用原作者的完善版本。
qqwwee版的训练确实很多坑,抄作业过程发现的问题和修改: (1) 模型主干没有太大问题,修改了kernel_initializer和 L2正则化(会加速收敛,酌情加上可能更好); (2) train里面的letterbox预处理,不如scale方式准确; (3) 没有多尺度输入; (4) 之前的ciou loss也不太对,miemie2013的全尺度 ciou loss 好很多; (5) 从主干输出解码的流程也有精度问题;
从新开始训练voc2012,100 epoch后,loss在9.094,loss由3部分组成,objectness loss是数值最大的组成部分。测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.152
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.336
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.117
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.284
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.209
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.303
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.308
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.308
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
用miemie2013的模型代码,从头开始训练voc2012,235000步,测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.159
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.348
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.120
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.280
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.212
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.300
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.304
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.304
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
两者比较接近,可见问题大部分都在训练和loss等处。
再次感谢 @miemie2013 的批评指正!请大家尊重原创!
因为太多的反馈训练问题,为了避免我的代码对大家的误导,抄作业了训练和loss,一直抄到 label smooth 之前。后面这个repo不会再抄和更新,抄到这里是为了发现和定位问题。 为了模型有更专业的持续维护,请大家用原作者的完善版本。
qqwwee版的训练确实很多坑,抄作业过程发现的问题和修改: (1) 模型主干没有太大问题,修改了kernel_initializer和 L2正则化(会加速收敛,酌情加上可能更好); (2) train里面的letterbox预处理,不如scale方式准确; (3) 没有多尺度输入; (4) 之前的ciou loss也不太对,miemie2013的全尺度 ciou loss 好很多; (5) 从主干输出解码的流程也有精度问题;
从新开始训练voc2012,100 epoch后,loss在9.094,loss由3部分组成,objectness loss是数值最大的组成部分。测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.152 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.336 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.117 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.284 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.209 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.303 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.308 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.308 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
用miemie2013的模型代码,从头开始训练voc2012,235000步,测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.159 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.348 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.120 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.280 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.212 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.300 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.304 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.304 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
两者比较接近,可见问题大部分都在训练和loss等处。
再次感谢 @miemie2013 的批评指正!请大家尊重原创!
谢谢在readme上帮我打广告的,我只是一个打广告的,谢谢!
因为太多的反馈训练问题,为了避免我的代码对大家的误导,抄作业了训练和loss,一直抄到 label smooth 之前。后面这个repo不会再抄和更新,抄到这里是为了发现和定位问题。 为了模型有更专业的持续维护,请大家用原作者的完善版本。
qqwwee版的训练确实很多坑,抄作业过程发现的问题和修改: (1) 模型主干没有太大问题,修改了kernel_initializer和 L2正则化(会加速收敛,酌情加上可能更好); (2) train里面的letterbox预处理,不如scale方式准确; (3) 没有多尺度输入; (4) 之前的ciou loss也不太对,miemie2013的全尺度 ciou loss 好很多; (5) 从主干输出解码的流程也有精度问题;
从新开始训练voc2012,100 epoch后,loss在9.094,loss由3部分组成,objectness loss是数值最大的组成部分。测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.152 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.336 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.117 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.284 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.209 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.303 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.308 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.308 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
用miemie2013的模型代码,从头开始训练voc2012,235000步,测试结果如下:
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.159 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.348 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.120 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.280 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.212 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.300 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.304 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.304 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
两者比较接近,可见问题大部分都在训练和loss等处。
再次感谢 @miemie2013 的批评指正!请大家尊重原创!
话说,同一份权重,我分别用qqwwee和yangyun的代码测了一下,貌似qqwwee版本预测得更好一些。预测得时候也会用到输出解码部分。请问qqwwee版本在哪个部分大致有什么问题吖?谢谢楼主解答
恕我直言qqwweee那版yolo3就是个废仓库,训练不出效果,loss经常出现nan,那段时间让我踩了很多坑。恕我直言这么废的仓库也有那么多star真的让人很无语。算法复现的要求是达到指定精度,而不是让观众成为你的debugger、改进者。广告虽可耻,大家可以看看我复现的这版yolov4,精心设计了损失函数,训练了70000步就没出现过nan,mAP至少可达36%,欢迎点star:
https://github.com/miemie2013/Keras-YOLOv4