You Only Look Once
介绍
Joseph Redmon作者 V1 V2 V3,已退出
CV领域常见任务
1)classification
2)Classification + Localization
3)Object Detection
4)Segmentation 分为Semantic Segmentation语义分割和Instance Segmentation实例分割
5)Keypoint Detection关键点检测,比如人关节点识别
推荐论文《Object Detection in 20 years: A survey》包含著名数据集与算法
从AlexNet后,目标检测分为One-stage detector(YOLO,Retina-Net)和two-stage detector(RCNN, Fast RCNN,Faster RCNN)。Two-stage detector先识别候选框,再分类 。两阶段识别比较准确,但是现在单阶段准确率也提升上来了。
1、YOLO V1
1.1 预测阶段 (前向推断)
448x448x3作为输入,7x7x30=1470作为输出,30维分别为2个bbox,再加该grid cell对应20个类别的条件概率(Pascal Voc数据集20个类别)
7×7个grid cell -> 每个grid cell预测2个bounding box(x,y,h,w,confidence),框的粗细代表置信度
每个grid cell只能从20个类别中确定1个概率最高的类别,所以模型只能预测7×7=49个物体
20个条件概率 x bbox中的置信度(条件发生的概率即该bbox包含物体的概率) = 20个类别全概率。这里每个grid cell得到2个20维的全概率。整个模型得到7x7x2x20 = 98×20(每个bbox对应20个全概率)
后处理:98个bbox去除置信度低的,去除重复的(nms非极大抑制),获得最终预测结果。98×20的向量,对于第一行dog的概率,将小于阈值0.2的归零,再将20个列向量按dog概率由高到低排序。对于dog概率最高的第一个框bbox_max,其他所有框与之计算IoU(bbox_max,bbox_cur),如果IoU>0.5,则将当前框的dog概率置为0。接着,将第二个非零框作为参照,其后所有框与之计算IoU去重。最后得到98×20的稀疏矩阵。98个框中不全为零的画在预测结果上。
1.2训练阶段(反向传播)
标注框(ground truth)中心点落在grid cell中,则由该grid cell拟合,对应的两个框,与标注框IOU比较大的负责检测拟合。而如果grid cell没有ground truth中心点落入,则对应两个bbox无需检测拟合,置信度接近于0即可。
损失函数:1、负责检测的bbox与ground truth的中心点定位误差(差值平方和) ;2、负责检测的bbox与ground truth的宽高误差(差值平方和);3、负责检测的bbox置信度误差;4、不负责检测的bbox置信度误差;5、负责检测的bbox的分类误差。
1.3优缺点
优点:全图识别能力强,适合迁移泛化,识别背景的能力强于Fast RCNN
缺点:定位能力弱于Fast RCNN;每一个grid cell只能预测一种物体,对于小或密集的物体识别比较差。
2、YOLO V2
CVPR 2017
2.1 改进
2.1.1Batch Normalization
神经元输出不集中在0附近,过多处于sigmoid函数的饱和区(平缓区域),会造成梯度消失问题(平缓区梯度几乎为0)。经过BN处理,分散数据会集中在0附近。BN层一般在线性层FC后,激活函数前。
BN一般不可与Dropout一起用。
2.1.2High高分辨率分类器
2.1.3Anchor
相比于YOLO V1,V2每个grid cell对应的两个bbox不再随机,而是有先验的固定形状。13×13个grid cell,每个grid cell对应5个Anchor,5种长宽比。
每个Anchor对应xywhc(预测框)+20classes共25个输出,这样一共5×25=125维输出,最终模型输出为13x13x125张量输出。
对VOC 2007和COCO数据集进行K-means聚类,对不同的数量的Anchor,有对应的平均IOU,选择5个Anchor兼顾平均IOU与计算复杂程度。这里选择方法有欧式距离、聚类、手动选。
预测框b中心点被限制在grid cell中,宽和高不做限制。预测框b的xywh根据anchor和grid cell中心点算出。
预测框变多了最多13x13x5个,大大增加recall,但是map降低,precision降低。
2.1.4 Fine-Grained Features细粒度特征
增加passthrough层,将feature map分为4份,通道数扩大至4倍,例如26x26x64->13x13x256,拆成4份再拼成一条。将该13x13x256拼接在主通道上。将底层细粒度特征与高层语义特征拼接融合。
2.1.5 Multi-Scale Training
将不同分辨率的图像作为输入,提升1.5%map。
2.1.6 darknet19
2.2优缺点
优点:采用如上测试模型效果更好,采用darknet19的骨干网络更快,类别更多 。Better,Faster,Stronger。
yolo V3采用darknet53
3、YOLO V3
darknet已经停止维护,使用V5版本可以使用GitHub。
3.1.1 更换Backbone骨干网络Darknet-53
1)Backbone骨干网络:
Darknet53输出1000类别的分类层。而骨干网络将全连接分类层去掉,采取倒数三个层的输出作为特征提取,分别为32×32 16×16 8×8的特征输出。使用步长为2的卷积实现下采样,所有可以兼容任意尺寸的输入,但必须是32的倍数。
2)Neck颈部网络(也称为FPN特征金字塔Feature Pyramid Networks):
32×32特征->13x13x255对应预测大物体
16×16特征->26x26x255对应预测中等物体
8×8特征->52x52x255对应预测小物体
3)输出层(Head):
YOLO V3输出分别为如上张量NxNx[3x(4+1+80)]。255代表每个grid cell对应3个anchor,每个anchor对应85个输出(xywhc+80个类别)。80个类别来自MS COCO数据集。3×85=255。 这里的c称之为Objectness Score更为准确,代表是否有物体存在。c与80分别相乘才是最终的后验概率置信度,即为可视化预测框上的数值。
3.1.2输入图片resize
resize图片至416×416有两种方法,一种是直接resize,一种是保留原始长宽比加灰条
3.1.3Anchor
对于13×13 26×26 52×52三组grid cell。对于一个ground truth标注框的中心点,以上三组分别有一个grid cell,使标准框的中心店落在grid cell中。每个grid cell对于3个Anchor,选出与标准框IOU最大的Anchor。再在三个grid cell对应的三个Anchor中选择IOU最大的Anchor。
对于416x416x3的输入,最终预测框数量为13x13x3+26x26x3+52x52x3=10647个。
3.1.4输出预测框数量与输入端图片大小相关
例如608x608x3的输入,输出为19x19x255 38x38x255 76x76x255
tips:画图软件process on
3.1.5损失函数
正样本:与标注框IOU最大的Anchor,不参与:与标注框IOU比较大但不是最大的Anchor,负样本:与标注框IOU小于阈值的Anchor。
损失函数
3.1.6预测过程
1)计算预测框的信息,设置阈值,过滤得分低的框
2)多分类nms非极大值抑制消除重叠较大的预测框