YoLo

论文原文: You Only Look Once: Unified, Real-Time Object Detection

yolo的过程非常简单。就是每次输入一整张的图片,文中作者选择resize到了448×448。然后输出是1470维的向量。其中1470=7×7×(20+2×5)。具体含义下文介绍。yolo的网络结构图为:
这里写图片描述

1. 核心思想

Yolo将物体检测作为回归问题来进行求解。所有的过程基于1个单独的endtoend网络。完成从原始图像的输入到物体位置和类别的输出。

YoLo使用了24个卷积和2个全连接层。如下图:
这里写图片描述
其中,卷积层用来提取特征,全连接层用来预测图像位置和类别概率值。YoLo借鉴了GoogLeNet,但是未使用inception结构,而是使用1×1以及3×3的卷积层简单替代。

2. 训练过程

YoLo将输入图像分成S×S个格子,每个格子负责检测落入该格子的物体:即如果某物体的bounding box的中心点落入该格子中,则该格子就负责检测出这个物体。如下图,图中的格子就负责预测图像中的物体狗。
这里写图片描述

每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。

Bounding box信息包含5个数据值,分别是x,y,w,h,confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,wh的值使用图像的宽度和高度进行归一化到[0,1]区间内;xy是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]

confidence反映当前bounding box是否包含物体以及物体位置的准确性,计算方式如下:

confidence=Pr(Object)×IOUpredtruth

若bounding box包含物体,则Pr(Object)=1,否则为0

因此,YOLO网络最终的全连接层的输出维度是SS(B5+C)。YOLO论文中,作者训练采用的输入图像分辨率是448x448S=7B=2;采用VOC 20类标注物体作为训练数据,C=20。因此输出向量为77(20+25)=1470维。作者开源出的YOLO代码中,全连接层输出特征向量各维度对应内容如下:
这里写图片描述

由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

2.1 YOLO训练

YOLO模型训练分为两步:

  1. 预训练。使用ImageNet
    1000类数据训练YOLO网络的前20个卷积层+1个average池化层+1个全连接层。训练图像分辨率resize到224x224。

  2. 用步骤1)得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用VOC 20类标注数据进行YOLO模型训练。为提高图像精度,在训练检测模型时,将输入图像分辨率resize到448x448。

3. 损失函数

YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的SS(B5+C)维向量与真实图像的对应SS(B5+C)维向量的均方和误差。如下式所示。其中,coordErroriouErrorclassError分别代表预测数据与标定数据之间的坐标误差、IOU误差和分类误差。
这里写图片描述
YOLO对上式loss的计算进行了如下修正。

  • 位置相关误差(坐标、IOU)与分类误差对网络loss的贡献值是不同的,因此YOLO在计算loss时,使用\lambda _{coord} =5修正coordError。

  • 在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用λnoobj=0.5修正iouError。(注此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)。

  • 对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题。(注:这个方法并不能完全解决这个问题)。

综上,YOLO在训练过程中Loss计算如下式所示:
这里写图片描述
其中,x,y,w,C,p为网络预测值,x^,y^,w^,C^,p^帽 为标注值。Πiobj表示物体落入格子i中,ΠijobjΠijnoobj分别表示物体落入与未落入格子i的第j个bounding box内。

YOLO方法模型训练依赖于物体识别标注数据,因此,对于非常规的物体形状或比例,YOLO的检测效果并不理想。

YOLO采用了多个下采样层,网络学到的物体特征并不精细,因此也会影响检测效果。

YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。

4. 优缺点

优点:

  • 快。YOLO将物体检测作为回归问题进行求解,整个检测网络pipeline简单。在titan x GPU上,在保证检测准确率的前提下(63.4% mAP,VOC 2007 test set),可以达到45fps的检测速度。

  • 背景误检率低。YOLO在训练和推理过程中能‘看到’整张图像的整体信息,而基于region proposal的物体检测方法(如rcnn/fast rcnn),在检测过程中,只‘看到’候选框内的局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体。测试证明,YOLO对于背景图像的误检率低于fast rcnn误检率的一半。

  • 通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。

缺点:

  • 识别物体位置精准性差。
  • 召回率低。
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012897374/article/details/79980844
上一篇Faster RCNN
下一篇FCN
想对作者说点什么? 我来说一句

yolo.h5算法权重

2018年03月08日 194.69MB 下载

yolo论文(英文)

2018年06月20日 4.88MB 下载

Yolo v3英文原文

2018年07月13日 2.34MB 下载

YOLO v2配置文档

2017年06月05日 197KB 下载

samylee的yolo训练weights

2016年06月21日 24MB 下载

yolo目标检测

2017年04月02日 4.97MB 下载

yolo-tensorflow

2017年06月20日 176KB 下载

yolo权重包

2018年05月24日 21.94MB 下载

voc_label.py

2018年04月15日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭