1. YOLOv1
YOLO相较于RCNN系列目标检测网络没有显式求候选区域的过程,且将RCNN中的分类和回归统一为一个回归问题。
步骤
- 将一幅图像分成S×S个网格,如果某个目标的中心落在这个网格内,则该网格就负责预测这个目标
- 每个网格需要预测B个边界框(BBox,bounding box)的位置信息和置信度(confidence),以及类别信息,共5×B+C个值(其中类别信息是针对每个网格,置信度是针对每个边界框)。对于S×S个网格,网络输出为S×S×(5×B+C)的一个张量 置 信 度 大 小 = 目 标 落 在 网 络 中 的 概 率 × 边 界 框 与 真 实 框 的 I O U 置信度大小 = 目标落在网络中的概率 × 边界框与真实框的IOU 置信度大小=目标落在网络中的概率×边界框与真实框的IOU
- 测试集中,将每个网格预测的类别信息与置信度相乘,得到的结果为该边界框的得分(类别置信度),舍弃得分小于某个阈值的边界框,并对剩下的边界框进行NMS(非极大值抑制)处理,得到最终的检测结果
损失函数
缺点
- YOLOv1网络的输出层为全连接层,因此只支持与训练图像相同的输入分辨率
- 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体
- 损失函数中,大物体和小物体的IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题),对于小物体的定位准确性较差
2. YOLOv2
- YOLOv2提出了一种新的联合训练算法:将分类数据集和检测数据集混合,用分类数据集来增加分类的类别量,提升鲁棒性
- 引入了BN层:有助于解决反向传播过程中的梯度消失和梯度爆炸问题,且有一定的正则化效果
- 引入了anchor(候选框):YOLOv1通过全连接层预测边界框的坐标值,YOLOv2去掉了全连接层,使用anchor来预测边界框。该方法使YOLOv2的召回率大幅提高,mAP轻微下降(YOLOv1中需要预测的边界框少,YOLOv2存在很多无用框)
- 通过K-means提取anchor:Faster-RCNN手动选择anchor,YOLOv2使用训练集中的边界框聚类得到anchor
- 采用多尺度图像训练(Multi-ScaleTraining):YOLOv2每10个batch会随机选择一个新的图片尺寸,网络下采样参数为32,因此所有图片尺寸均为32的倍数,网络的最后采用了全局平均池化
3. YOLOv3
- YOLOv3使用了Darknet-53,增加了残差连接
- 将平方差损失函数改为sigmod损失函数(不用softmax因为每个网格中可能出现多种类别)
- YOLOv3使用了多尺度预测:引入了FPN(特征金字塔网络),网络中有3个分支,对应3种尺度的预测。尺度一输出13×13的特征图,尺度二两倍上采样后与前两层的特征图(一次下采样前)叠加输出26×26的特征图,尺度三四倍上采样后与前三层(两次下采样前)的特征图叠加输出52×52的特征图
- 通过K-means提取anchor:YOLOv3通过聚类得到聚类中心,每个聚类中心对应9个anchor(3种尺度),每种尺度预测3个anchor
4. YOLOv4
- 相较于YOLOv3的DarkNet-53,YOLOv4使用了CSPDarknet-53
- 相较于YOLOv3的FPN,YOLOv4用了SPP+PAN
- CutMix数据增强和马赛克(Mosaic)数据增强
- DropBlock正则化