网络细节资料很多,不做赘述,主要总结演化思路和解决问题。
一、YOLO
1、网络简介
YOLO网络结构由24个卷积层与2个全连接层构成,网络入口为448x448(v2为416x416),图片进入网络先经过resize,输出格式为:
其中,S为划分网格数,B为每个网格负责目标个数,C为类别个数。B表示每个小格对应B组可能的框,5表示每个框的四个坐标和一个置信度,C表示类别,同时也说明B个框只能隶属于同一个类别。
2、损失函数
损失函数有四部分组成,
上文中的红圈符号表示是否开关,比如第一个符号表示i号格子j号坐标框中如果含有obj则为1,否则为0
损失函数第一部分的宽高计算加根号,这是因为:一个同样将一个100x100的目标与一个10x10的目标都预测大了10个像素,预测框为110 x 110与20 x 20。显然第一种情况我们还可以失道接受,但第二种情况相当于把边界框预测大了一倍,但如果不使用根号函数,那么损失相同,都为200,如果使用根号则可以表示出两者的差异。
Ci表示第i个框含有物体的置信度,类似于RCNN中的二分类部分思想,由于大部分框中没有物体,为平衡损失函数,本部分的权重取小为0.5
中c为正确类别则值为1,否则为0
3、网络不足
1) 对小物体及邻近特征检测效果差:当一个小格中出现多于两个小物体或者一个小格中出现多个不同物体时效果欠佳。原因:B表示每个小格预测边界框数,而YOLO默认同格子里所有边界框为同种类物体。
(2) 图片进入网络前会先进行resize为448 x 448,降低检测速度(it takes about 10ms in 25ms),如果直接训练对应尺寸会有加速空间。
(3) 基础网络计算量较大
二、YOLO_v2
v2没有一个明确的主线创新,就是把各种奇技淫巧融入v1中,等到更好的网络。
创新点简述
- 关于BN作用,YOLOv2在加入BN层之后mAP上升2%
- yolov1也在Image-Net预训练模型上进行fine-tune,但是预训练时网络入口为224 x 224,而fine-tune时为448 x 448,这会带来预训练网络与实际训练网络识别图像尺寸的不兼容。yolov2直接使用448 x 448的网络入口进行预训练,然后在检测任务上进行训练,效果得到3.7%的提升。
- yolov2为了提升小物体检测效果,减少网络中pooling层数目,使最终特征图尺寸更大,如输入为416 x 416,则输出为13 x 13 x 125,其中13 x 13为最终特征图,即原图分格的个数,125为每个格子中的边界框构成(5 x (classes + 5))。需要注意的是,特征图尺寸取决于原图尺寸,但特征图尺寸必须为奇数,以此保存中间有一个位置能看到原图中心处的目标。
- 通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易,及anchor的设置是有其优越性的,至于每个格子中设置多少个anchor(即k等于几),作者使用了k-means算法离线对voc及coco数据集中目标的形状及尺度进行了计算。发现当k = 5时并且选取固定5比例值的时,anchors形状及尺度最接近voc与coco中目标的形状。(引入anchors和采用k_means确定anchors的个数、形状是两个创新)
- 新的主干网络:模型的mAP值没有显著提升,但计算量减少了:
- 对细粒度特征做了加强,个人理解就是resnet的跳层
- YOLOv2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。YOLOv2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择32的倍数{320,352,…,608}。采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。
- 本文对anchors的回归提出了更好的算法,这部分比较麻烦,贴出一篇讲解很透彻的文章,其思想就是Fast RCNN的anchor回归值没有限制,可能出现anchor检测出很远的目标box的情况,效率比较低,作者觉得应该是每一个anchor只负责检测周围正负一个单位以内的目标box。
除此之外,YOLO_v2的实例YOLO9000在超多类分类(9000类)也做出了实践性质的创新,感兴趣的可以看一看。
二、YOLO_v3
延续了v2的思路,继续修修补补
S∗S∗(B∗5+