![b20b6c7ceedd36f5b7d65d8708c8497c.png](https://i-blog.csdnimg.cn/blog_migrate/59c672234d21e2bce341cfd94b472ea6.jpeg)
yolo系列检测算法目前包括v1-v4版本,本文对其发展脉络及核心思想进行介绍。
一、YOLO-V1:
v1的主打点是real-time,正如其名:you only look once: unified, real-time object detection。
![f8492dc358fe45af3c96aad361d8f420.png](https://i-blog.csdnimg.cn/blog_migrate/042a34769688a974e8b81c98bfe46bc3.jpeg)
网络结构:上图是网络结构图,输入448x448的图片,经过特征抽象,网络倒数第三层输出7x7x1024大小的Tensor,倒数第二层是全连接层,输出4096个unit,这里面每一个unit都包含全局信息,最后一层输出1470个unit,最终reshape为7x7x30大小的Tensor。
![277237cfb0223fe96225c631985f816c.png](https://i-blog.csdnimg.cn/blog_migrate/6f219f8e851d3b3802b18649d98af53e.jpeg)
这里7x7x30的设置是有特殊含义的:
![4bd030fc969eb1182bef12379b3bddac.png](https://i-blog.csdnimg.cn/blog_migrate/f068e93d80096599d37de19e7a36d12c.jpeg)
上面公式是loss function,其中
- 第一行采用
回归中心点位置,这里其实回归的是预测框中点相比grid左上角的偏差,降低了回归难度,类似于SSD中anchor设置(插播一下,设置anchor有两个本质原因:筛选训练中的正负样本,再者就是降低位置回归难度);
- 第二行回归检测框宽高,需要注意到回归值取了根号,这样可减小物体尺度差异的影响;
- 第三行&第四行为预测框准度loss,若grid包含物体,回归值为预测矿和GT的IoU,否则回归值为0;
- 最后一行是预测框分类loss,同分类任务;
-
和
是loss function的权重,考虑到包含物体的grid数量远小于不包含物体的grid数量,所以作者设置
&
;
另外还有几个trick需要注意:
- 前面提到每个grid预测2个框,不过在训练中,只选取一个框用于计算loss function,选择的依据是哪个预测框和GT的IoU更大,这样做的好处在于每一个grid对应的框经过训练,可分别负责不同大小,aspect ratio的物体,类似anchor-based方法手动设置不同配置的anchor;
- 在inference过程中,预测框的置信度会综合分类置信度&IoU准度,输出结果更可信。这一点其实对mAP计算有利,因为mAP计算中涉及预测框排序,对SSD来说,根据分类置信度排序,但分类置信度和物体定位准度之间并不完全对等,可能导致mAP指标偏低(IoUNet对此有研究),而这里最终的置信度综合考虑了分类&定位置信度;
- 考虑到当一个物体较大时,多个grid可能都会输出预测结果,所以在inference阶段需要添加NMS进行后处理,这个是检测算法标配(CenterNet类似算法除外);
就检测结果来说,v1的不足在于:
- 多个类别不同物体中心点落在同一个grid内部时,分类loss出现歧义;
- 定位准度相比faster-rcnn有较大差距,小物体检出效果不佳;
优势在于误检少,当然也与其grid数量少相对应;速度快;
二、YOLO-V2
v2有两个主打点:stronger & faster,更强&更快。
v2基于v1改进而来,包含以下策略:
- BN:加快模型收敛,标配;
- High resolution classifier:保证ImageNet数据集上预训练模型输入分辨率同检测模型输入分辨率。不过目前检测模型可直接train from scratch,这一点不再是问题;
- Convolutional with anchor boxes:引入anchor机制,在基本不影响mAP的情况下极大提升了recall(~8%)。前面提到,anchor机制降低了模型的学习难度,对v1来说,虽然每一个grid可以设置多个框(v1中设置2个),这里每个框未添加任何先验,只是通过后期训练逐渐分化,分别处理不同大小&aspect ratio的框,而采用anchor机制每一个框对应不同的大小&aspect ratio的配置,相当于引入针对当前任务的先验,降低了学习难度(尤其是在采用dimension cluster策略的情况下);
- Dimension cluster:anchor的宽高通过在当前数据集聚类而来,提升了anchor和标注信息match程度;
- Direct local prediction:考虑到随机初始化&anchor-based方法对框中点offset预测未添加约束,可能导致网络训练初期不稳定,由此v2采用了v1的预测方式,输出中点相比当前grid左上点的offset,约束offset介于当前grid内。
- Fine-grained features:引入passthrough layer做下采样,本质是reshape,将空间维度的feature放置到通道维度,降低了空间分辨率,模型输出层的复杂度也降低了。
- Multi-scale training:相比v1,v2中无全连接层,可接受任意大小的输入,作者采取了多尺度训练的方式,训练的模型可接受任意大小的输入。
就精度而言,v2和同期的SSD接近,但速度更快。
三、YOLO-V3
对v2结构和训练技巧进行改进,在基本不增加inference time的情况下提升精度,包含以下核心改进:
- FPN,目前检测算法标配,在多个不同分辨率特征图输出预测信息;FPN的核心在于综合了浅层特征图的细节纹理信息&深层特征图语义信息。
- 检测框解码,如下图所示,中心点预测的是相对grid左上角的offset(添加sigmoid函数限制了范围介于[0,1]),这点和SSD不同,SSD预测的是相比anchor中点的偏差,预测值无约束,这种方式训练不稳定,但最终预框可能更精准。
![3952136813e51ac3ba9ab9a264ef7cf8.png](https://i-blog.csdnimg.cn/blog_migrate/c76a855e3be35b24f8f4596736ffeae7.jpeg)
3. v3对输出特征图每一个cell,输出255维向量, 其中
YOLO-V4中介绍目标检测中常用的trick,另写一篇文章分享。