对论文 You Only Look Once: Unified, Real-Time Object Detection 的理解 (一)

本文转载自:

http://blog.csdn.net/surgewong/article/details/51864859


背景介绍


   在深度神经网络之前,早期的 Object detection 方法是通过提取图像的一些 robust 的特征如( Haar,SIFT,HOG )等特征,使用 DPM 模型,用 silding window 的方式来预测具有较高 score 的 bounding box。这种方式非常耗时,而且精度又不怎么高。

   Selective Search (可以参考我之前的 博文 ) 的方法,相比于 sliding window 这中穷举的方式,减少了大量的计算,同时在性能上也有很大的提高。

   利用 Selective Search 提出的 region proposals 结合卷积神经网络的R-CNN的方法提出后,Object detection 的性能有了一个质的飞越。基于 R-CNN 发展出来的 SPPnet、Fast R-CNN、Faster R-CNN 等方法,证明了 “Proposal + Classification” 的方法 在 Objection Detection 上的有效性。

   相比于 R-CNN 系列的方法,该论文提供了另外一种思路,将 Object Detection 的问题转化成一个 Regression 问题。给定输入图像,直接在图像的多个位置上回归出目标的 bounding box 以及其分类类别。

YOLO的主要特点

  • 速度快,能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。
  • 使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。
  • 泛化能力强。在自然图像上训练好的结果在艺术作品中的依然具有很好的效果。 



论文概要


   给定输入图像,将图像分割成  SS (实验中  S=7 )个网格。如果一个物体 Ground Truth 的中心落在某个网格中,那么在训练过程中,该网格就负责对该物体的 Bounding Box 进行回归。

   每个网格都预测  B  (实验中  B=2 )个 Bounding Box( x,y,w,h ) 以及相应的置信度。这个置信度的值用于反映这个 Box 是否包含物体,以及与 Ground Truth 的 IOU 值。那么这个置信度就可以定义为  Pr(Object)IOUtruthpred 。当这个 Box 不包含物体时,那么这个置信度应该为 0,如果包含物体,那么这个置信度应该等于与 Ground Truth 的 IOU 值。在实验中, B  之所以取值为 2,一方面预测多个 Box 可以提高预测的精度(多个 Box 取最大的 IOU 值),另一方面又不会增加太多计算量。在预测 Box 的位置时, (x,y)  Box 中心位置相对于对应的网格的偏移(归一化到0~1), (w,h) 是相对于全图的值(归一化到0~1)。每张图像,最后预测出来的结果维度为  SS(B5+C) ,在 Pascal VOC 上,最后预测出来的结果维度 7*7*30。

   与此同时,每个网格还预测  C  个类别物体的条件概率  Pr(Classi|Object) 注意这里是每个网格,而不是每个 Box。 在测试阶段,可以利用公式

Pr(Classi|Object)Pr(Object)IOUtruthpred=Pr(Classi)IOUtruthpred
计算每个 Box 对于每个类别的 score,这样可以判断对于某一类物体的预测情况。 
模型概念示意图




网络结构


   该论文提出的网络结构,包括 24 个卷积层,最后接 2 个全连接层。文章设计的网络借鉴 GoogleNet 的思想,在每个  11  的 归约层(Reduction layer) 之后再接一个  33  的卷积层的结构替代 Inception结构。文章中还提到了 fast 版本的 Yolo,只有 9 个卷积层,其他的结构基本一致。网络的主体结构如下: 

网络结构




训练策略


   该论文的训练策略,总体给人的感觉:比较复杂,技巧性比较强。可以看得出作者为了提升性能花了不少功夫。

  • 首先利用 ImageNet 的数据集 Pretrain 卷积层。使用上述网络中的前 20 个卷积层,外加一个全连接层,作为 Pretrain 的网络,训练大约一周的时间,使得在 ImageNet 2012 的验证数据集 Top-5 的准确度达到 88%,这个结果跟 GoogleNet 的效果相当。
  • 将 Pretrain 的结果应用到 Detection 中,将剩下的 4 个卷积层及 2 个全连接成加入到 Pretrain 的网络中。同时为了获取更精细化的结果,将输入图像的分辨率由 224*224 提升到 448*448。
  • 将所有的预测结果都归一化到 0~1, 使用 Leaky RELU 作为激活函数。
  • 对比 localization error 和 classification error,加大 localization 的权重
  • 在 Pascal VOC 2007 和 2012 上训练 135 个 epochs, Batchsize 设置为 64, Momentum 为 0.9, Decay 为 0.0005.
  • 在第一个 epoch 中 学习率是逐渐从  103  增大到  102 ,然后保持学习率为  102 ,一直训练到 75个 epochs,然后学习率为  103  训练 30 个 epochs,最后 学习率为  104  训练 30 个 epochs。
  • 为了防止过拟合,在第一个全连接层后面接了一个  ratio=0.5  的 Dropout 层。并且对原始图像做了一些随机采样和缩放,甚至对调节图像的在 HSV 空间的饱和度。

   在训练过程中,如果将 localization error 和 classification error 同等对待,这样是不合理的。因为在一个网格中,有很大的概率是没有物体的,那么在类别上的置信度是 0,这样对于其他少量的包含物体的网格而言,这样是 overpowering 的。因此论文中加大了 localization error 的权重, λcoord=0.5 ,而 classification error 的权重设置成  λnoobj=0.5 。 

λcoordi=0S2j=0B1objij[(xi+xi^)+(yi+yi^2)]

+λcoordi=0S2j=0B1objij[(wiw^i)2+(hih^i)2]

+i=0S2j=0B1objij(CiC^i)2

+λnoobji=0S2j=0B1noobjij(CiCi^)2

+i=0S21objicclasses(pi(c)p^i(c))2

   训练过程中,小的 Box 对位置回归错误比大的 Box 更加敏感,由于  w  和  h  ,都已经归一化到 0~1,之间,作者使用了一个 trick,不是直接使用  w 和  h ,而是使用它们的平方根,这样使得, w  和  h  在较小时,相应的  w  和  h  会大一点。

y=sqrt(x)




实验结果


   从实验结果上来看,Yolo在速度上有很大的优势,在 mAP 与 state of art 的结果还有不少差距。

Pascal VOC 2007&2012实验结果




最后总结


   这篇论文提出的方法有一些天然的缺陷,这个在论文中也有提及。

  • 每个 grid 只预测一个 类别的 Bounding Boxes,而且最后只取置信度最大的那个 Box。这就导致如果多个不同物体(或者同类物体的不同实体)的中心落在同一个网格中,会造成漏检。
  • 预测的 Box 对于尺度的变化比较敏感,在尺度上的泛化能力比较差。

   在测试阶段,每张图像只预测 7*7*2 = 98 个 Box,所以速度非常快。在训练过程中,每个网格预测多个 Box,但是对于每个类别只预测一个结果,相对来说对类别的预测要求更高,得到的结果较为准确,该方法的主要错误来源于定位 (localization) 的错误。这也许是该方法对背景误判的错误率低的原因。

   还有一个问题,该方法说其泛化能力很强,能够在一些艺术作品中,都有很好的效果,一时也想不通到底是什么原因。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值