本博客中YOLO系列均为个人理解笔记,欢迎评论指出理解有误或者要讨论的地方
YOLOV3模型相比于v2来说,实质性的改进并不大,更多的是一些技术的堆叠。其并不像yolov2对于v1一样,由巨大的改变和提升。
其相对于yolov2,改变在于: 1) Yolov3模型骨干网络发生了改变。 其并没有继续用v2的骨干网络DarkNet-19,而是改变为了Darknet-53.而网络深度增加也对提升效果做出了贡献。 注意:我们发现拥有152层的resnet效果还不如53层的darknet-53??其实对比两个模型我们可以发现,两个模型大体上类同,区别就在于resnet中实现了最大池化下采样操作,而在本backbone中没有用,不知道是不是这个原因??
2)在YOLOV2中,作者对v1中每个特征方格预测2个框的方法进行了修改,用聚类的方法确定scale和比例尺寸,由此来决定每个特征方格预测多少框。但是在v3中,仍然采用1:1,1:2,2:1三种尺寸来预测三个框。
看完改变后,下面看v3的整体结构图: V3网络一共会产生三个特征输出层,对应尺寸分别是13,26,52. 然后不同尺寸的特征层可以对应预测不同大小的目标,大的自然预测小目标,小的自然预测大目标。在上面每一个像素点上生成 3 * (4 + 1 + 80) 因为coco数据集是80类别的。
最终是根据1*1卷积层来生成预测输出的。将该卷积依次划过每一块方格,都会生成3种比例的anchor。但是,要记得,此时输出的四维回归参数不是和faster rcnn或者ssd一样,相对于anchor的偏移量,而是相对于该方格左上角的偏移量,因此在最终位置预测公式上,需要做出相对修改。这和v2是一致的。
有了模型架构,也知道最终生成多少框,那么我们现在要计算损失,就需要正负样本,V2,V3中正负样本的选择:
1)我们计算生成的框和真实框的IOU值,大于某一阈值的作为正样本待选样本 2)看物体中心点在哪个方框内,那么这个方框内的三种anchor谁的IOU大于阈值,谁就是正样本。 其实也可以看作,先看物体中心点属于哪一个方格,然后看该方格的三个anchor框与物体的IOU值,大于阈值的都是正样本。
v2v3中损失的计算: 和v1一样,由三部分组成。置信度损失,类别损失,回归参数损失,但是计算方法可大不相同。
1)置信度损失,这个其就是二至交叉熵损失函数 2)类别损失 也是二值交叉熵损失 3)回归参数损失 这个就需要根据我们公式,计算原理一致,但是公式稍稍不同,因为这里CX和cy不是anchor的原坐标,而是方格左上角坐标,所以还是减一下,得到真实偏差,然后和预测偏差做loss 均方误差 MSE
到这里,v3的重点就结束了,其实对于一个模型来说,我们最基本要知道和明白的就是:模型的结构,模型输入什么,模型输出什么,怎么选择正负样本计算loss,如何计算loss。
|