YOLO系列,YOLOv2改进部分详解
YOLOv2
YOLOv2主要是基于YOLOv1进行改进得到的,学习YOLO系列网络就是这样,得从v1,v2,v3,(省略号)一步步学起,唉。
YOLOv1详解链接
https://editor.csdn.net/md/?articleId=127114595
网络结构
改进部分总结
YOLOv2相比于YOLOv1就是加了一些改进和训练技巧:
- Batch Normalization
- High Resolution Classifier
- Anchor 、Dimension Cluster
- Direct location prediction
- Fine-Grained Features
- Multi-Scale Training
1. Batch Normalization
https://editor.csdn.net/md/?articleId=127116462
可以参考这个链接的 Batch Normalization 部分,很清晰。
2. High Resolution Classifier
一般图像分类网络是用比较小的图片进行训练,如224*244的图片。如果需要检测448 * 448的图片,效果就会差很多。
因此,YOLOv2是在原来YOLOv1小分辨率训练的基础上,另外加了10个epoch去训练分辨率更大的图片,提升了 3.5% 的mAP。
3. Anchor 机制、Dimension Cluster
原来YOLOv1没有anchor机制,就是随机的框进行拟合,这样的框是没有长宽限制的,如下图。这样拟合的难度就会增大。
而YOLOv2用了 anchor 机制,就给了稳定长宽比的 anchor,扁的框就更容易拟合扁的物体,长的框就负责拟合长的物体,减小了拟合的难度,如下图,很明显我们用那个红色的扁框进行回归速度会更快,效果会更好。
这里的 anchor 一直到 YOLOv5 都是聚类产生的。
因为有anchor,因此对比YOLOv1的输出(7×7×30),我们需要的输出如下图。
YOLOv2中,需要的输出是 a × a × (4+1+20) × K。式子中参数和数字解析如下:
- a × a 就是 grid 的个数,YOLOv2中取 a = 13,这个可以根据实际情况自己定的;
- 4 就是(x, y, w, h);
- 1 就是前景背景的置信度;
- 20 就是类别数量,根据数据集类别数量定的;
- K 就是一个 grid 的 anchor 数量,YOLOv2每个grid对应5个anchor。
因此最终YOLOv2输出的张量为
其中anchor的大小长宽比,就是通过对数据集图片的目标框大小长宽比进行聚类获取的。
4. LOSS
背景框相关的loss
这个是背景框loss:
- 当IOU<threshold的时候,前面橙色部分就是1,否则为0;
- 粉色框中的部分就是一个权重参数,YOLOv2取0.6;
- 后面的括号内容,因为是背景框,所以我们的置信度应该等于0,所以让置信度 b 与0越接近越好,其实就是 (0-b)^2;
anchor框相关的loss
这个是anchor相关的loss:
- 橙色部分,当t<12800的时候,前面橙色部分就是1,否则为0,其实就是判断是否是刚开始训练的时候;
- 粉色框中的部分就是一个权重参数;
- 后面的括号内容,其实就是计算 预测框的位置和anchor框应该在的位置的差方;
结合上述1,3。个人理解就是在前面12800次训练迭代中,用这个损失来训练生成接近anchor框的预测框,倘若前期训练时预测框的位置很离谱,就可以让预测框与label框的损失加上这部分anchor框损失 加速训练。
预测框loss
- 橙色部分。由于一个物体,可能被多个预测框选中预测,但我们只要一个预测框预测一个物体就行了。橙色部分就是只要IOU最大的那个预测框,其他预测框的橙色部分就是0。
- 粉色部分就是个权重,手动设定;
- 括号中的部分就是计算误差,通过均方差的方式计算;
5. Fine-Grained Features
这一部分就是在网络中间某一层开个支路(下图右边那条支路),将浅层特征图层与后面的深层特征图层进行融合(论文中是通道维度直接concat)
passthrough就是将浅层的特征图层的w和h减少为原来的一半,从而与深层特征图层的w和h维度大小保持一致,才能融合。
6. Multi-Scale Training
论文说是效果提升了1.5%mAP。
其实就是网络不变,用多个尺度的图片的数据集进行训练。当时我很奇怪为什么不同尺度的图片可以输出同样大小的特征图层呢,后面发现,其实就是GAP(Global Average Pooling),后面会另外写一个介绍这个方法,简单来说就是,不同尺度大小的图片卷积获得的特征图层的w,h不同,而GAP就是将每个通道的特征图,不管 w 和 h 是多大的,都变成1*1的大小。
效果总结
侵删。
欢迎大家交流。
个人学习记录,如有不正,请大佬指正。