YOLOv1:https://blog.csdn.net/lipengfei0427/article/details/103589165
三、YOLOv2
为提高物体定位精准性和召回率,YOLO作者提出了 《YOLO9000: Better, Faster, Stronger》。相比v1提高了训练图像的分辨率;引入了Faster RCNN中anchor box的思想,对网络结构的设计进行了改进,输出层使用卷积层替代YOLO的全连接层,联合使用coco物体检测标注数据和imagenet物体分类标注数据训练物体检测模型。相比YOLO,YOLO9000在识别种类、精度、速度、和定位准确性等方面都有大大提升。
YOLOv1、v2、v3是连续的,虽然在网络结构等各个方面有所提升,但是整体思想是不变的,因为接下来分析YOLOv2对于YOLOv1的改进。
1.Better-Batch Normalization
使用Batch Normalization对网络进行优化,让网络提高了收敛性,同时还消除了对其他形式的正则化(regularization)的依赖。通过对YOLO的每一个卷积层增加Batch Normalization,最终使得mAP提高了2%,同时还使model正则化。使用Batch Normalization可以从model中去掉Dropout,而不会产生过拟合。
如图10所示的BN层在全连接层之后,在YOLOv2中,每个卷积层后面都有一个BN层。
图10.BN层在全连接层之后
2.Better-High resolution classifier
目前业界标准的检测方法,都要先把分类器放在ImageNet上进行预训练。从Alexnet开始,大多数的分类器都运行在小于256*256的图片上。而现在YOLO从224*224增加到了448*448,这就意味着网络需要适应新的输入分辨率。
为了适应新的分辨率,YOLOv的分类网络以448*448的分辨率先在ImageNet上进行Fine Tune,Fine Tune10个epochs,让网络有时间调整他的滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的Resulting Network。最终通过使用高分辨率,mAP提升了4%。
图11.YOLOv2训练的三个阶段
3.Better-Convolution with anchor boxes
YOLO去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率。使用Anchor Box会让精确度稍微下降,但用了它能让YOLO能预测出大于一千个框,同时recall达到88%,mAP达到69.2%。
4.Better-Dimension clusters
之前Anchor Box的尺寸是手动选择的,所以尺寸还有优化的余地。 为了优化,在训练集(training set)Bounding Boxes上跑了一下k-means聚类,来找到一个比较好的值。
由于使用标准k-means的方法,即使用欧式距离进行聚类,则大的box产生的误差必然比小box要大很多。因此采用评估公式为:
最终我们分别在VOC 2007和COCO数据集上运行,得到了不同数据集上簇的个数与平均IoU的关系,结果如图12所示。
图12.在VOC和COCO数据集利用聚类结果
综合平衡召回率和模型复杂度,我们发现当k=5时,是比较好的权衡点。我们经过实验分析,聚类得到的anchor box较手动选择的anchor box有较大的提升。
图13.聚类与手动选择anchor box结果比较
5.Better-Direction location prediction
在上面我们讨论了手动选择anchor box的尺寸可能会对结果产生的一些影响,在这里作者引入anchor box遇到第二个问题:模型稳定性。作者认为模型不稳定性主要来自box的(x, y)坐标。
YOLOv2没有预测偏移量,而是直接预测对于网格单元的相对位置。即相对单元格的左上角的位置坐标。作者通过引入Sigmoid函数预测offset,解决了anchor boxes的预测位置问题。
其中,, , ,为预测框的中心和宽高。最后一个公式是预测框的置信度。,是当前网格左上角到图像左上角的距离,需要先将网格大小归一化,即令一个网格宽和高均为1。, 是先验框的宽和高。, , , , 是要学到的函数,分别用于预测框的中心点坐标,宽高和置信度。
使用聚类搭配直接位置预测法的操作,使得模型上升了5个百分点。
6.Better-Fine-Grained Features
在13*13的特征图上预测大目标足够,但对于小目标效果不理想。YOLOv2增加 passthrough层,将前面26*26特征图与本层连接。passthrough层将26*26*512特征图转变为13*13*2048的特征图与本层13*13*1024特征图结合,得到13*13*3072的特征图,由此增加细粒度,在此特征图上做预测。
7.Better-Multi-Scale Training
为了使YOLOv2可以应用图片大小更广,YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352……608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。
图14.在不同尺寸训练集上训练结果
8.Faster-Darknet19
Darknet-19是基于Darknet框架编写的。主要使用3x3卷积并在pooling之后channel数加倍(VGG);global average pooling替代全连接做预测分类,并在3x3卷积之间使用1x1卷积压缩特征表示(Network in Network);使用 batch normalization 来提高稳定性,加速收敛,对模型正则化.
图15.Darknet-19网络结构
9.Faster-损失函数
负责预测目标的anchor:
第一项:负责预测目标的anchor的坐标损失(包括中心定位和边界定位)。仅计算负责预测目标的那个anchor的坐标损失。(此项在YOLOv1中边界定位是采用根号下的差值的平方)——衡量目标定位准确度
第三项:负责预测目标的anchor的confidence损失。负责预测物体的anchor需要计算confidence损失,confidence的目标就是让预测置信得分去逼近的预测bbox和Ground Truth的IoU。——衡量可能有目标的准确度
第五项:负责预测目标的anchor的类别损失。每个类别的输出概率0-1之间,计算的是L2损失。也就是说分类问题也把它当做了回归问题。且YOLOv2中类别预测没有预测背景,因为置信得分值低于阈值就代表不存在目标。——衡量目标分类的准确度
不负责预测目标的anchor:
第二项:不负责预测目标的anchor的坐标损失。加了限制,希望直接回归到自身anchor box。
第四项:不负责预测目标的anchor的confidence损失。(只计算那些与Ground Truth的IoU小于IoU阈值的anchor box)。如果设定的anchor box小于阈值说明本身就无意预测,就回归到与Ground Truth的IoU=0。
10.Stronger
作者提出一种联合训练分类数据和检测数据的方法。在检测数据上学习特别的检测信息比如bounding box坐标及常见对象的分类;只有类别信息的数据用来扩充模型可检测的类别数量。
检测数据和类比数据混合后,在训练时,对于检测数据可以根据YOLOv2的损失函数反向传播对应信息,对于类别数据,只反向传播类别信息。
大多数对待分类的方法是使用softmax层,但是softmax使得类别之间互相排斥,这对类别有包含关系的数据集不适用,比如ImageNet中的“Norfolk terrier”和COCO中的“dog”。对此作者使用一种多标签的模型进行联合数据。
11.Stronger-Hierarchical classification
ImageNet的标签分布为WordNet,这种结构是图结构而不是树结构。因为树结构不存在交集,而图结构可以。比如:狗这个label即属于犬科也属于家畜。作者没有使用全图结构而是构造一种多层次树——WordTree,简化这一问题。我们可以预测每个节点处条件概率值如下
进而如果想判断某张图片是否属于某一类别,可以计算下面的式子,依次在各个类别条件概率相乘。
ImageNet 1k有1000类,使用WordTree后,类别扩充到1369,在ImageNet 1k和WordTree1k上预测情况如图16所示,在ImageNet上使用一个softmax,在WordTree上使用多个softmax,每一层次类使用一个softmax。
图16.ImageNet和WordTree预测比较
作者使用与之前相同的训练参数,Darknet-19模型在WordTree1k数据集上top-1 accuracy为71.9%,top-5 accuracy为90.4%。尽管增加了额外369类,但准确率值下降了一点儿。
12.Stronger-Hierarchical classification
使用WordTree可以将ImageNet和COCO数据集整合。
图17.ImageNet和COCO整合
四、YOLOv3
沿用
·“分而治之”,从YOLOv1开始,YOLO算法就是通过划分单元格来做检测,只是划分的数量不一样。
·采用"leaky ReLU"作为激活函数。
·端到端进行训练。一个loss function搞定训练,只需关注输入端和输出端。
·从YOLOv2开始,YOLO就用batch normalization作为正则化、加速收敛和避免过拟合的方法,把BN层和leaky ReLU层接到每一层卷积层之后。
·多尺度训练。在速度和准确率之间trade off。想速度快点,可以牺牲准确率;想准确率高点儿,可以牺牲一点速度。
改进
·多级预测终于为 YOLO 增加了 top down 的多级预测,解决了 YOLO 颗粒度粗,对小目标无力的问题。
·loss不同, v3 替换了 v2 的 softmax loss 变成 logistic loss。
·加深网络,采用简化的 residual block 取代了原来 1×1 和 3×3 的 block
图18.YOLOv3性能与RetinaNet比较
1.网络结构
图19-1.Darknet-53网络结构示意
图19-2.YOLOv3网络结构示意
DBL:代码中的Darknetconv2d_BN_Leaky,是YOLOv3的基本组件。就是卷积+BN+Leaky relu。
resn:n代表数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个res_unit。
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。
2.九种尺寸先验框
随着输出的特征图的数量和尺度的变化,先验框的尺寸也需要相应的调整。YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。
在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
分配上,在最小的13*13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的26*26特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52*52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
表1.特征图与先验框
9种先验框的尺寸如下图所示,蓝色框为聚类得到的先验框,黄色框为ground truth,红色框为对象中心点所在的网格
图20.聚类得到的9种先验框
3.损失函数
YOLOv3重要改变之一:No more softmaxing the classes。
softmax来分类依赖于这样一个前提,即分类是相互独立的,换句话说,如果一个目标属于一种类别,那么它就不能属于另一种。但是,当我们的数据集中存在人或女人的标签时,上面所提到的前提就是去了意义。
在这里,我们使用logistic regression来预测每个类别得分并使用一个阈值来对目标进行多标签预测。比阈值高的类别就是这个边界框真正的类别。
4.输入与输出的映射
图21.输入与输出的映射
对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框坐标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。
以上就是个人对YOLO系列的全部理解啦,欢迎大家指正!
参考:
1.《You Only Look Once: Unified, Real-Time Object Detection》Joseph Redmon, Santosh Divvala, Ross Girshick¶, Ali Farhadi(2015)
2.《You Only Look Once: Unified, Real-Time Object Detection》Joseph Redmon, Santosh Divvala, Ross Girshick¶, Ali Farhadi(2016)
3.《YOLO9000: Better, Faster, Stronger》Joseph Redmon, Ali Farhadi
4.《YOLOv3: An Incremental Improvement》Joseph Redmon,Ali Farhadi
5.https://www.imooc.com/article/36391
6.https://blog.csdn.net/qq_33270279/article/details/99883051
7.https://blog.csdn.net/c20081052/article/details/80236015
8.https://zhuanlan.zhihu.com/p/63507794
9.https://www.jianshu.com/p/57ea656660f7
10.https://blog.csdn.net/qq_41994006/article/details/88708199
11.https://blog.csdn.net/qq_33948796/article/details/88561542
12.https://www.jianshu.com/p/032b1eecb335
13. https://blog.csdn.net/yanzi6969/article/details/80505421
14. https://www.jianshu.com/p/d13ae1055302