【论文阅读笔记】You Only Look Once: Unified,Real-Time Object Dection

论文链接:https://arxiv.org/abs/1506.02640
作者:Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
发布时间:2015年1月发布,2016年5月月最后修改



前言
   YOLO之所以比 RNN系列要快,是因为其不通过选择区域,而是将图片分割成 SS S ∗ S 大小的网格,在每个网格里直接预测 B B 个边框( 也就是5* B B 个数,一个置信度,四个边框参数),而不是选择区域后回归( Faster RCNN通过SPN“选择”区域)。


概要

  相比较传统方法将目标检测定位为分类问题,YoLo算法将目标检测算法当做空间独立的bounding-boxes回归问题伴随着边框分类概率。【YoLo算法和Faster RCNN算法的区别在于,前者直接输出k个边框的回归预测以及该区域的类别预测(没有分支);后者先从RPN网络中提取候选区域,然后分别求类别(分类问题)和边框回归(回归问题)。另外,对于边框回归也不一样。Fast RCNN是对每一个对象分别进行回归,而YoLo则对每一个格子的bounding box都分别进行精确回归(每一个格子单元都有几个bounding box,后面YoLo v2中的anchor就是对这个的预设框)。

  该算法的架构是统一模型,即分类和回归是由同一个卷机网络推测的,其特点就是检测速度相当快。其实时检测图片速度为每秒 45 45 帧,其更快的版本可以达到 155 155 帧每秒。相对于当时最先进的算法,YoLo算法的定位错误率更高,但其对于背景的假阳性预测更低一般把背景当做负类)。其次,对于不同分布背景的数据的预测,其表现的比其他检测算法好,如利用自然图片训练,但检测的是艺术图,这是因为其学习了更好的一般表示【Fast RCNN发布时间为 2015.4 2015.4 ,最后修改时间为 2015.9 2015.9 Faster RCNN<.em>发布时间为 2015.6 2015.6 ,最后修改时间为 2016.1 2016.1 ,相比较而言都是用卷积网络学习的特征,但比较的时候只比较了RCNN,所以这几种架构之间的比较无从得知



引言

  就概要展示的速度而言( 45/s 45 帧 / s ,更快版本能达到 155/s 155 帧 / s ),这意味着该算法能用少于 25ms 25 m s 的延迟处理视频流。

  因为其处理特征的方式不像滑动窗口和候选区域,所以其能比传统的方法感受更多的区域(能看到整张图片)。所以YoLo算法不像Fast RCNN一样,会因为看不到更大的上下文信息而错误地将背景分类为某个对象。

  YoLo算法的精确度比当时最先进的检测算法要低。因为当其快速定位的同时,很难兼顾精确,特别是当检测对象很小的时候。


统一检测(Unified Detection)
  YoLo算法从整张图片提取特征来预测每一个bounding box,它也可以从一张图片同时预测所有的bounding box这意味着该网络了解整张图像及其所有的对象。YoLo被设计为端对端以及实时检测的模型,并且其拥有高准确率。

这里写图片描述

  YoLo检测系统将输入图片分为S*S个格子。如果一个对象的中心在某个格子中,则这个格子就为检测这个对象负责。每个格子拥有 B B bounding boxes及置信分数,这些置信分数反映系统对于这个边框预测的“信心”。本文将置信度定义为 Pr(object)IOUtruthpred P r ( o b j e c t ) ∗ I O U p r e d t r u t h 。即如果格子中没有对象存在,置信度应该为 0 0 ,如果有的话,则应该为predicted boxground truth的交并比(因此,文中的意思就是该置信度有两重意思:⑴ box中含有目标的置信度,如果有目标Pr(object)=1,否则 Pr(object)=0 P r ( o b j e c t ) = 0 ;⑵ box预测的有多准,即IoU)。因此,每一个bounding box有 5 5 个预测值:x, y, w, h, 置信度。【所以该系统的输出为SS(B5+C)

  每个格子单元预测 C C 个条件概率 Pr(Classi|Object) P r ( C l a s s i | O b j e c t ) ,但不管一个格子单元的box的个数 B B 是多少,一个格子单元只预测一个类别【每个格子最多代表一个类别】。

  在测试时,其预测边框的置信度为 Pr(Classi|Object)Pr(object)IOUtruthpred=Pr(classi)IOUtruthpred P r ( C l a s s i | O b j e c t ) ∗ P r ( o b j e c t ) ∗ I O U p r e d t r u t h = P r ( c l a s s i ) ∗ I O U p r e d t r u t h ,即边框预测的类别概率乘上IOU

  在PASCAL VOC数据集上评价时, S=7B=2 S = 7 , B = 2 ,因为该数据集有20类,则 C=20 C = 20

网络设计

  YoLo网络的输入被resize 448448 448 ∗ 448 的大小,其网络结构如下图所示。【24个卷积层+2个全连接层

这里写图片描述

  Fast YoLo算法使用更少的卷积层( 9 9 个卷积层),其他的(超)参数和YoLo算法一样。

训练方法

  使用ImageNet1000类的分类数据集预训练YoLo网络的前20层,使用的池化层改为平均池化,以及一个全连接层用于分类。(作者使用了一个星期的时间使得在ImageNet2012验证集的Top-5准确率达到 88% 88 % ,这准确率与 GoogleNet G o o g l e N e t 的模型准确率相当)

  据研究表明,如果在预训练网络上同时增加卷积层和全连接层可以改善表现(所以他们的预训练模型只有20个卷积层,也就是在微调时增加了 4 4 个卷积层和两个全连接层,这些权重都是随机初始化的)。【检测经常需要细粒度的视觉信息,所以作者将预训练模型的输入(224224)变成了( 448448 448 ∗ 448 )】

  YoLo网络的最后一层同时输出类别概率和边框坐标信息。输出的时候会将边框信息正则化w,h除以图片的宽度和长度,那么w,h就在 0 0 1之间;而x,y当作每个格子单元的偏移,则他们的值也在 0 0 1之间。

  激活函数使用leaky rectified linear activation,公式如下:

ϕ(x)={x,0.1x,if x>0otherwise ϕ ( x ) = { x , i f   x > 0 0.1 x , o t h e r w i s e

  损失函数平方和误差函数(使用这个函数是因为这个函数易于优化,但这个函数和我们的目标,maximizing average precision,不是很对齐,因为该损失函数将定位误差和分类误差看做是等重的,但事实不是如此。所以在本文的实际应用公式下会有不一样的权重。同时,对于一个格子而言,其不含对象的概率比含有对象的概率要大得多,所以如果不加以权重的话,网络会偏向于预测一个格子不含对象,使得模型不兼容,造成训练偏移。

  为了解决上面损失函数本身带来的“偏离”,作者将边框坐标的损失函数的权重提高,权重为 λcoord=5 λ c o o r d = 5 ,将不含对象的box的置信度损失函数降低,权重为 λnoobj=0.5 λ n o o b j = 0.5

  平方和误差函数也把大边框和小边框的误差看做是等重的(对于大边框,小偏移可以看做是无关紧要的;对于小边框,小偏移就显得更为严重)。为了部分地解决这个,将 wh w , h 代替w,h放入公式中。

损失函数如下:

++++λcoordi=0S2j=0BIobjij[(xix^i)2+(yiy^i)2]λcoordi=0S2j=0BIobjij[(wiwi^)2+(hihi^)2]i=0S2j=0BIobjij(CiCi^)2λnoobji=0S2j=0BInoobjij(CiCi^)2i=0S2Iobjicclasses(pi(c)pi^(c))2(106)(107)(108)(109)(110) (106) λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B I i j o b j [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] (107) + λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B I i j o b j [ ( w i − w i ^ ) 2 + ( h i − h i ^ ) 2 ] (108) + ∑ i = 0 S 2 ∑ j = 0 B I i j o b j ( C i − C i ^ ) 2 (109) + λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B I i j n o o b j ( C i − C i ^ ) 2 (110) + ∑ i = 0 S 2 I i o b j ∑ c ∈ c l a s s e s ( p i ( c ) − p i ^ ( c ) ) 2
  其中, Iobji I i o b j 表示如果第i个格子单元有对象,即如果有对象, Iobji=1 I i o b j = 1 ,否则 Iobji=0 I i o b j = 0 Iobjij I i j o b j 表示第 i i 个格子单元的第j个预测边框是否有对象,如果有,Iijobj=1,否则 Iobjij=0 I i j o b j = 0 前面两个表示边框回归的损失函数,后面两个是对边框的confidence进行预测,避免绝大部分格子都显示的是无对象的,造成网络偏向无对象预测;最后一个是对类别进行预测。总结一下:边框回归预测,置信度预测,类别预测

  YoLo算法对于每一个格子单元都预测多个bounding boxes。在训练的时候,对于每一个对象只希望一个bounding boxes负责,所以作者将拥有最高 IoU I o U 的边框预测器作为负责的那个。(前面讲了,对象中心的那个格子对该对象负责,而最大IoU的那个边框准确的对该对象负责,这也造成不同边框是不一样的

  优化函数为动量梯度下降,批量为 64 64 ,动量为 0.9 0.9 ,衰减率为 0.005 0.005 。其训练周期为 135 135 ,其前 75 75 个周期的学习率为 0.01 0.01 ,后 30 30 个周期的学习率为 0.001 0.001 ,最后 30 30 个周期的学习率为 0.0001 0.0001

  在训练的同时,使用 0.5 0.5 dropout,使用随机尺度变换等数据增强手段。


预测

  对于每张图片,预测 98(77B) 98 ( 7 ∗ 7 ∗ B ) 个边框。使用非极大值抑制来处理重叠的边框。

YoLo的局限
  YoLo算法有强烈的空间限制:每一个格子单元只能代表一个类别,且只预测两个边框。强烈的空间限制导致算法很难检测靠近的对象,所以这个模型对于一群的小对象很难检测(比如一簇小鸟)。

  由于推测的边框是空间独立的,且是从数据中学习的,所以该模型很难预测新的或不寻常(长宽比,大小)的对象或配置。

  YoLo对于大边框和小边框的错误(偏移)都平等对待,这影响了模型识别的准确率。(使用 w,hw,h w , h 代 替 w , h 只是部分解决了该问题,但没根本解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值