目录
1、序言
yolo系列的出现受到了业界的极大追捧, you only look once(YOLO)。特别嚣张的向两阶段模型宣战。我当时也是因为对它名字的抵触和其他一些原因,一直没有仔细看yolo系列,现在我决定还是要了解它,在你不了解的领域或者人,不能轻易下定义了。下面对yolov1进行研读。
2、论文理解
论文链接:yolov1论文
如上图,相对两阶段模型去掉了RPN网络,直接用下采样得到的feature得到类别和回归框位置。网络最后的输出是S × S × (B ∗ 5 + C) 的feature map,然后decoder得到对应的类别和检测框。S默认等于7,SxS表示划分为7X7的网格区域。最后的7x7 feature的每一个tensor点对应一个网格区域。网络输入是448x448,则对应的网格区域大小是64x64。B默认等于2,意思是每个网格应该预测两个框,最后选择置信度大的框作为最优框进行匹配。C是类别数。
yolo将输入图像划分为SxS的网格,如果物体的中心点落在某个网格里,那么这个网格负责回归这个目标,每一个网格需要预测的有检测框的位置,检测框的得分,检测框的得分包括检测框里面是否包含前景目标的得分和检测框里目标在各类别之间的得分,最终得分是是否是前景的置信度x类别置信度。论文希望是否是前景的置信度应该以iou作为目标值进行预测。
loss也特别单纯,都是MSE(均方误差),坐标loss的x和y表示中心点的相对网格框内的偏移距离。然后在加上网格框的左上角坐标相对坐标,就得到了目标中心点相对坐标。w和h是相对于输入图尺寸的相对坐标值。莱姆大coord是坐标的loss权重的调节因子,C表示有目标的loss和没有目标产生的loss,莱姆大noobj可用来调整负样本所占的loss比重。p是分类loss。
3、代码
代码我已经更新到github,链接:yolov1,主要参考的代码是:pytorch-YOLO-v1,对数据读入方式改变,代码整体风格更加规整,加了注释,对torch版本更新后的一些代码bug进行修复。后续训练结果会在readme中展示。
4、总结
yolov1是yolo系列的开山之作,能有突破性思维的网络思想都应该值得推崇,就目前来看yolov1也有一些缺点,如下:
(1)多个目标的中心点落到了一个网格框内,只能回归一个目标。
(2)检测框回归困难
(3)只利用到了64下采样的feature,对小目标的回归比较困难。
就到这里,感谢CSDN,感谢四大彩笔微信群。