【论文阅读笔记】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大小的网格,在每个网格里直接预测B个边框(也就是5*B个数,一个置信度,四个边框参数),而不是选择区域后回归(Faster RCNN通过SPN“选择”区域)。


概要

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

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



引言

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

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

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


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

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

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

  每个格子单元预测C个条件概率Pr(Classi|Object),但不管一个格子单元的box的个数B是多少,一个格子单元只预测一个类别【每个格子最多代表一个类别】。

  在测试时,其预测边框的置信度为Pr(Classi|Object)Pr(object)IOUpredtruth=Pr(classi)IOUpredtruth,即边框预测的类别概率乘上IOU

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

网络设计

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

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

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

训练方法

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

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

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

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

ϕ(x)={x,if x>00.1x,otherwise

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

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

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

损失函数如下:

(106)λcoordi=0S2j=0BIijobj[(xix^i)2+(yiy^i)2](107)+λcoordi=0S2j=0BIijobj[(wiwi^)2+(hihi^)2](108)+i=0S2j=0BIijobj(CiCi^)2(109)+λnoobji=0S2j=0BIijnoobj(CiCi^)2(110)+i=0S2Iiobjcclasses(pi(c)pi^(c))2
  其中,Iiobj表示如果第i个格子单元有对象,即如果有对象,Iiobj=1,否则Iiobj=0Iijobj表示第i个格子单元的第j个预测边框是否有对象,如果有,Iijobj=1,否则Iijobj=0前面两个表示边框回归的损失函数,后面两个是对边框的confidence进行预测,避免绝大部分格子都显示的是无对象的,造成网络偏向无对象预测;最后一个是对类别进行预测。总结一下:边框回归预测,置信度预测,类别预测

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

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

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


预测

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

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

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

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