资讯专栏INFORMATION COLUMN

YOLO目标检测模型原理介绍

cjie / 1788人阅读

摘要:将图像到作为输入,输出,即将图片划分为,每个单元格独立检测。类别损失当有物体的中心点落在单元格中,此单元格就负责预测该物体。

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个种类”。

YOLO-v1训练

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

YOLO-v1损失函数

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

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

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

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

YOLO-v2改进

使用批标准化:随着神经网络的训练,网络层的输入分布会发生变动,逐渐向激活函数取值两端靠拢,如: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定义如下函数:

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

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

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输出两者。

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

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

补充:Iou计算

总结

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

祝大家2018年圣诞节快乐!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42868.html

相关文章

  • YOLO目标检测模型原理介绍

    摘要:将图像到作为输入,输出,即将图片划分为,每个单元格独立检测。类别损失当有物体的中心点落在单元格中,此单元格就负责预测该物体。 YOLO-v1介绍 YOLO是一个端到端的目标检测算法,不需要预先提取region proposal(RCNN目标检测系列),通过一个网络就可以输出:类别,置信度,坐标位置,检测速度很快,不过,定位精度相对低些,特别是密集型小目标。 showImg(https:...

    妤锋シ 评论0 收藏0
  • YOLO算法的原理与实现

    摘要:近几年来,目标检测算法取得了很大的突破。本文主要讲述算法的原理,特别是算法的训练与预测中详细细节,最后将给出如何使用实现算法。但是结合卷积运算的特点,我们可以使用实现更高效的滑动窗口方法。这其实是算法的思路。下面将详细介绍算法的设计理念。 1、前言当我们谈起计算机视觉时,首先想到的就是图像分类,没错,图像分类是计算机视觉最基本的任务之一,但是在图像分类的基础上,还有更复杂和有意思的任务,如目...

    zhangfaliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<