YOLO目标检测模型原理介绍

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。
类别损失:spa

clipboard.png

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

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只是直接相加不会致使张量维度的改变。blog

后端网络使用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年圣诞节快乐!

相关文章
相关标签/搜索