【论文阅读笔记】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系列要快,是因为其不通过选择区域,而是将图片分割成大小的网格,在每个网格里直接预测个边框(也就是5*个数,一个置信度,四个边框参数),而不是选择区域后回归(Faster RCNN通过SPN“选择”区域)。
概要
相比较传统方法将目标检测定位为分类问题,YoLo算法将目标检测算法当做空间独立的bounding-boxes的回归问题伴随着边框分类概率。【YoLo算法和Faster RCNN算法的区别在于,前者直接输出k个边框的回归预测以及该区域的类别预测(没有分支);后者先从RPN网络中提取候选区域,然后分别求类别(分类问题)和边框回归(回归问题)。另外,对于边框回归也不一样。Fast RCNN是对每一个对象分别进行回归,而YoLo则对每一个格子的bounding box都分别进行精确回归(每一个格子单元都有几个bounding box,后面YoLo v2中的anchor就是对这个的预设框)。】
该算法的架构是统一模型,即分类和回归是由同一个卷机网络推测的,其特点就是检测速度相当快。其实时检测图片速度为每秒帧,其更快的版本可以达到帧每秒。相对于当时最先进的算法,YoLo算法的定位错误率更高,但其对于背景的假阳性预测更低(一般把背景当做负类)。其次,对于不同分布背景的数据的预测,其表现的比其他检测算法好,如利用自然图片训练,但检测的是艺术图,这是因为其学习了更好的一般表示【Fast RCNN发布时间为,最后修改时间为,Faster RCNN<.em>发布时间为,最后修改时间为,相比较而言都是用卷积网络学习的特征,但比较的时候只比较了RCNN,所以这几种架构之间的比较无从得知】
引言
就概要展示的速度而言(,更快版本能达到),这意味着该算法能用少于的延迟处理视频流。
因为其处理特征的方式不像滑动窗口和候选区域,所以其能比传统的方法感受更多的区域(能看到整张图片)。所以YoLo算法不像Fast RCNN一样,会因为看不到更大的上下文信息而错误地将背景分类为某个对象。
YoLo算法的精确度比当时最先进的检测算法要低。因为当其快速定位的同时,很难兼顾精确,特别是当检测对象很小的时候。
统一检测(Unified Detection)
YoLo算法从整张图片提取特征来预测每一个bounding box,它也可以从一张图片同时预测所有的bounding box。这意味着该网络了解整张图像及其所有的对象。YoLo被设计为端对端以及实时检测的模型,并且其拥有高准确率。
YoLo检测系统将输入图片分为S*S个格子。如果一个对象的中心在某个格子中,则这个格子就为检测这个对象负责。每个格子拥有个bounding boxes及置信分数,这些置信分数反映系统对于这个边框预测的“信心”。本文将置信度定义为。即如果格子中没有对象存在,置信度应该为,如果有的话,则应该为predicted box和ground truth的交并比(因此,文中的意思就是该置信度有两重意思:⑴ box中含有目标的置信度,如果有目标,否则;⑵ box预测的有多准,即IoU)。因此,每一个bounding box有个预测值:x, y, w, h, 置信度。【所以该系统的输出为】
每个格子单元预测个条件概率,但不管一个格子单元的box的个数是多少,一个格子单元只预测一个类别【每个格子最多代表一个类别】。
在测试时,其预测边框的置信度为,即边框预测的类别概率乘上IOU。
在PASCAL VOC数据集上评价时,,因为该数据集有20类,则。
网络设计
YoLo网络的输入被resize为的大小,其网络结构如下图所示。【24个卷积层+2个全连接层】
Fast YoLo算法使用更少的卷积层(个卷积层),其他的(超)参数和YoLo算法一样。
训练方法
使用ImageNet的类的分类数据集预训练YoLo网络的前20层,使用的池化层改为平均池化,以及一个全连接层用于分类。(作者使用了一个星期的时间使得在ImageNet2012验证集的Top-5准确率达到,这准确率与的模型准确率相当)
据研究表明,如果在预训练网络上同时增加卷积层和全连接层可以改善表现(所以他们的预训练模型只有20个卷积层,也就是在微调时增加了个卷积层和两个全连接层,这些权重都是随机初始化的)。【检测经常需要细粒度的视觉信息,所以作者将预训练模型的输入()变成了()】
YoLo网络的最后一层同时输出类别概率和边框坐标信息。输出的时候会将边框信息正则化:w,h除以图片的宽度和长度,那么w,h就在到之间;而x,y当作每个格子单元的偏移,则他们的值也在到之间。
**函数使用leaky rectified linear activation,公式如下:
损失函数为平方和误差函数(使用这个函数是因为这个函数易于优化,但这个函数和我们的目标,maximizing average precision,不是很对齐,因为该损失函数将定位误差和分类误差看做是等重的,但事实不是如此。所以在本文的实际应用公式下会有不一样的权重。同时,对于一个格子而言,其不含对象的概率比含有对象的概率要大得多,所以如果不加以权重的话,网络会偏向于预测一个格子不含对象,使得模型不兼容,造成训练偏移。)
为了解决上面损失函数本身带来的“偏离”,作者将边框坐标的损失函数的权重提高,权重为,将不含对象的box的置信度损失函数降低,权重为。
平方和误差函数也把大边框和小边框的误差看做是等重的(对于大边框,小偏移可以看做是无关紧要的;对于小边框,小偏移就显得更为严重)。为了部分地解决这个,将代替w,h放入公式中。
损失函数如下:
YoLo算法对于每一个格子单元都预测多个bounding boxes。在训练的时候,对于每一个对象只希望一个bounding boxes负责,所以作者将拥有最高的边框预测器作为负责的那个。(前面讲了,对象中心的那个格子对该对象负责,而最大IoU的那个边框准确的对该对象负责,这也造成不同边框是不一样的)
优化函数为动量梯度下降,批量为,动量为,衰减率为。其训练周期为,其前个周期的学习率为,后个周期的学习率为,最后个周期的学习率为。
在训练的同时,使用的dropout,使用随机尺度变换等数据增强手段。
预测
对于每张图片,预测个边框。使用非极大值抑制来处理重叠的边框。
YoLo的局限
YoLo算法有强烈的空间限制:每一个格子单元只能代表一个类别,且只预测两个边框。强烈的空间限制导致算法很难检测靠近的对象,所以这个模型对于一群的小对象很难检测(比如一簇小鸟)。
由于推测的边框是空间独立的,且是从数据中学习的,所以该模型很难预测新的或不寻常(长宽比,大小)的对象或配置。
YoLo对于大边框和小边框的错误(偏移)都平等对待,这影响了模型识别的准确率。(使用只是部分解决了该问题,但没根本解决)