6

YOLO-v1介绍

YOLO是一个端到端的目标检测算法,不需要预先提取region proposal(RCNN目标检测系列),通过一个网络就可以输出:类别,置信度,坐标位置,检测速度很快,不过,定位精度相对低些,特别是密集型小目标。

图片描述

YOLO将图像resize到448x448作为输入,输出7x7x30,即:将图片划分为7x7,每个单元格独立检测。这里需要注意,不是那种滑动窗口将每个单元格都输入到网络中进行预测,这里的划分只是物体中心点位置的划分之用(划分越多越准确),物体的中心落在哪个单元格,就由那个单元格负责预测。说完7x7我们再说下另一个维度30,30=(2*5=20),其中“2:每个单元格预测数量(box数量)”,“5:(x,y,w,h,score)”,“20:模型可以预测20个种类”。

clipboard.png

YOLO-v1训练

模型首先会将ImageNet作为训练集预训练模型,最终达到88%精度,然后使用迁移学习将预训练的模型应用到当前标注的训练集进行训练。模型输出5维信息(x,y,w,h,score),使用Leaky Relu作为激活函数,全连接层后添加Dropout层防止过拟合。在得到输出值之后,我们需要计算每个box与ground true的Iou值,然后通过非极大值抑制筛选box。

YOLO-v1损失函数

损失函数包含三部分分别是:坐标损失,置信度损失(7x7x2),类别损失(7x7x20)。
坐标损失:

clipboard.png

我们使用SSE损失函数(就是MSE损失函数的累加版本),如图所示我们在“w,h”中加了根号,加根号的原因是,“w,h”的损失在大框和小框之间“权重”应该不同。因为,对应图像中较大的物体而言,box有些偏移一般并不会影响预测结果。但是对应小物体而言,同样的偏移可能会脱离预测目标。
置信度损失:

clipboard.png

如图所示,损失函数分为两部分:有物体,没有物体,其中没有物体损失部分还增加了权重系数。添加权重系数的原因是,对于一幅图像,一般而言大部分内容是不包含待检测物体的,这样会导致没有物体的计算部分贡献会大于有物体的计算部分,这会导致网络倾向于预测单元格不含有物体。因此,我们要减少没有物体计算部分的贡献权重,比如取值为:0.5。
类别损失:

clipboard.png

当有物体的中心点落在单元格中,此单元格就负责预测该物体。

YOLO-v2改进

clipboard.png

  • 使用批标准化:随着神经网络的训练,网络层的输入分布会发生变动,逐渐向激活函数取值两端靠拢,如:sigmoid激活函数,此时会进入饱和状态,梯度更新缓慢,对输入变动不敏感,甚至梯度消失导致模型难以训练。BN,在网络层输入激活函数输入值之前加入,可以将分布拉到均值为0,标准差为1的正态分布,从而使激活函数处于对输入值敏感的区域,从而加快模型训练。此外,BN还能起到类似dropout的正则化作用,由于我们会有‘强拉’操作,所以对初始化要求没有那么高,可以使用较大的学习率。
  • High Resolution Classifier:在介绍YOLO-v1的时候我们说到,模型需要先在ImageNet上预训练模型,因此,此时图像输入为224x224,使用迁移学习训练后我们的图像输入是448x448,因此模型需要适应图像分辨率的改变。在YOLO-v2中,我们在预训练模型中先224x224训练160个epoch,然后将输入调整到448x448,再跑10个epoch,也就是在ImageNet数据集中两种分辨率跑两次。YOLO大神作者实现表明,这样操作可以提高4%的map。
  • Convolutional With Anchor Boxes:
    1,加入anchor boxes,提高box数量。
    2,删除全连接层和最后一个池化层,保留更高分辨率特征。
    3,用416x416代替448x448输入大小,使特征图有奇数大小的高和宽。
  • Dimension Clusters:使用k-means的方式对训练集的bounding boxes做聚类,但是该方法存在不同尺寸的box误差权重不同,我们希望误差与尺寸没有关系,因此通过IOU定义如下函数:

clipboard.png

  • Multi-Scale Training:训练阶段,采用32的倍数作为图像尺寸动态输入,如【320,352。。。608】。这种网络训练方式使得相同网络可以对不同分辨率的图像做detection。

图片描述

  • 使用Darknet-19作为后端网络:

clipboard.png

YOLO-v3

YOLO-v3结构图以来自木盏,表示感谢,也欢迎关注他的博客。

图片描述

DBL:指Darknetconv2d_BN_Leaky。
resn:指:n代表数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个res_unit,使用残差结构可以让网络更深。
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度,而add只是直接相加不会导致张量维度的改变。

后端网络使用darknet-53:

图片描述

我们发现,在YOLO-v3网络中没有池化层和全连接层,那么张量尺寸的变化是通过改变卷积核步长来实现。同YOLO-v2一样,输出尺寸为输入尺寸的1/32,即:一般要求输入图像尺寸是32的倍数。

类别预测由softmax改为logistic(使用sigmoid):用于处理预测物体之间存在包含关系问题,解决多标签对象支持。比如woman和person,softmax输出:person,logistic输出两者。

clipboard.png

使用多尺度特征预测物体:

clipboard.png

上图是YOLO-v3COCO数据集上使用聚类得到的9种先验框,一个代表宽度一个代表高度。在不同的感受野中使用不同的先验框。如果先验框不是最佳的,即使超过预设定的阈值,也不会进行预测。logistic回归用来从9个先验框中找到最佳的那个。

补充:Iou计算

图片描述

总结

YOLO好不好,我们就以一张图作为总结吧:

图片描述

祝大家2018年圣诞节快乐!


醇岩
286 声望1.1k 粉丝

在你说干不成某事之前,先试试