YoLo

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

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

1. 核心思想

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

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

2. 训练过程

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

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

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

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

confidence=Pr(Object)×IOUtruthpred c o n f i d e n c e = P r ( O b j e c t ) × I O U p r e d t r u t h

若bounding box包含物体,则 Pr(Object)=1 P r ( O b j e c t ) = 1 ,否则为 0 0

因此,YOLO网络最终的全连接层的输出维度是SS(B5+C)。YOLO论文中,作者训练采用的输入图像分辨率是 448x448S=7B=2 448 x 448 , S = 7 , B = 2 ;采用VOC 20类标注物体作为训练数据, C=20 C = 20 。因此输出向量为 77(20+25)=1470 7 ∗ 7 ∗ ( 20 + 2 ∗ 5 ) = 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 l o s s 函数来优化模型参数,即网络输出的 SS(B5+C) S ∗ S ∗ ( B ∗ 5 + C ) 维向量与真实图像的对应 SS(B5+C) S ∗ S ∗ ( B ∗ 5 + C ) 维向量的均方和误差。如下式所示。其中, coordErroriouError c o o r d E r r o r 、 i o u E r r o r classError c l a s s E r r o r 分别代表预测数据与标定数据之间的坐标误差、IOU误差和分类误差。
这里写图片描述
YOLO对上式loss的计算进行了如下修正。

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

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

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

综上,YOLO在训练过程中Loss计算如下式所示:
这里写图片描述
其中, x,y,w,C,p x , y , w , C , p 为网络预测值, x^,y^,w^,C^,p^ x ^ , y ^ , w ^ , C ^ , p ^ 帽 为标注值。 Πobji Π i o b j 表示物体落入格子i中, Πobjij Π i j o b j Πnoobjij Π i j n o o b j 分别表示物体落入与未落入格子 i 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系列检测方法。

缺点:

  • 识别物体位置精准性差。
  • 召回率低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值