『You Only Look Once: Unified, Real-Time Object Detection』论文笔记

一 为什么读这篇

旧文重读,大名鼎鼎的YOLO,目标检测一阶段法的代表。在做水印项目时第一个用到的网络,当时也没见过其他网络,再对Faster R-CNN系列有了认识后,通过这次重读重新梳理一下YOLO系列。

二 截止阅读时这篇论文的引用次数

2018.2.13 3298次。差不多是Faster R-CNN的一半。

三 相关背景介绍

15年6月首次挂在arXiv上,和Faster R-CNN几乎同一时间出现。好像也投了15年的NIPS,不过没中,但是中了16年的CVPR。一作Joseph Redmon是个相当逗比的大神,记得当时看他GitHub上的commit,写得相当独特(xx我要在你晚上熟睡时murder你。。)个人网站上料也很多。为了搞YOLO,用纯C手撸一个DarkNet框架出来。6,7年前也玩kaggle,不过名次不是很高,拿了3个银牌。一直在华盛顿大学。二作Santosh Divvala和四作Ali Farhadi也是华盛顿大学的,同时隶属于微软人工智能实验室,另外YOLO的v1-v3都是Joseph和四作一起合作的(因为四作是他老板。。)。三作是Ross Girshick,rbg大神不用多说了,没想到YOLO v1居然也有他的身影。

四 关键词

YOLO

one-stage

五 论文的主要贡献

1 提出当时速度最快的,准确率也OK的目标检测网络

2 一阶段法目标检测的代表

六 详细解读

1 介绍

之前目标检测的工作都是通过重新使用分类器来执行检测,而本文将目标检测定义为回归问题,通过空间上分离的bbox及相关的类概率来定义。使用一个网络来直接预测bbox和类概率。检测速度相当快,可达45FPS,而小网络Fast YOLO甚至高达155FPS。

像R-CNN这样复杂的pipeline既慢又难优化,因为每个独立的部分必须分开来训练。

yolo_v1-fig1.png

YOLO相比传统方法有如下几个优势:

a. YOLO相当快

因为将检测定义为回归问题,因此不需要复杂的pipeline。

b. YOLO在做预测时是基于对图像的全局理解

不像滑窗或基于候选区域的方法,YOLO在训练和测试时看到的都是整个图像,所以它隐式地编码了上下文信息。

c. YOLO学习到了目标的泛化表示

当用自然图像训练,艺术品预测时,效果也比其他方法好。

缺点在于很难精准地定位某些目标,特别是小目标。

2 统一检测

YOLO将输入图像分为S \times S的格网,如果一个目标的中心点落在了一个格子上,则这个格子负责响应检测的目标。每个格子预测B个bbox及其置信度。将置信度定义为\operatorname { Pr } (Object) * \mathrm { IOU } _ { \mathrm { pred } } ^ { \mathrm { truth } }。如果格子上没有目标,则置信度为0,否则置信度为IOU。每个bbox由5个预测值组成:x , y , w , h和置信度。( x , y )坐标表示相对于格子的中心,预测的宽高相对于整个图像。同时每个格子也预测C个类概率的置信度:Pr \left( Class _ { i } | Object \right),这些概率以包含目标的格子为条件。只预测每个格子的一组类概率,而不用管bboxB的数量(两者是分开的)。

在测试时,将条件类概率与预测的单个bbox的置信度相乘:

Pr \left( Class _ { i } | Object \right) * Pr \left( Object \right) * \mathrm { IOU } _ { \mathrm { pred } } ^ { \mathrm { truth }} = Pr \left( Class _ { i } \right) * \mathrm { IOU } _ { \mathrm { pred } } ^ { \mathrm { truth }}

这样就得到每个box与类相关的置信度。它们反应了类出现在box中的概率以及预测box与目标的拟合程度。

在VOC上的测试,参数做如下设置:S = 7, B = 2, C = 20,最终的预测为7 \times 7 \times 30的张量。

yolo_v1-fig2.png

2.1 网络设计

卷积层提取特征,全连接层预测输出概率和坐标。受GoogLeNet启发,有24个卷积层,2个全连接层。不同的是将Inception块简化为3 x 3卷积层后跟着1 x 1降维层,整体如图3所示。

yolo_v1-fig3.png

另外也训练了一个更快的YOLO,网络更轻量点(9个卷积层,更少的filters)

2.2 训练

在ImageNet上训练了将近一周得到分类top-5准确率为88%的预训练模型,网络是图3的前20个卷积层加平均池化层加全连接层。执行检测时又加了随机初始化的4个卷积层和2个全连接层。因为检测通常需要细粒度的视觉信息,因此将网络的输入分辨率从224 x 224增大到 448 x 448

最后一层同时预测类概率和bbox坐标。用原图的宽高规范化了bbox的宽高,以使它们位于0到1之间。将bbox x和y的坐标参数化为指定网格单元位置的偏移,因此它们也在0和1之间。

除了最后一层用线性激活外其余层都用leaky ReLU:
\phi ( x ) = \left\{ \begin{array} { l l } { x , } & { \text { if } x > 0 } \\ { 0.1 x , } & { \text { otherwise } } \end{array} \right.
模型用平方和损失进行优化,因为其容易优化,不过对于最大化平均准确率的目标来说并不很完美。它将定位误差与分类误差相等地加权,这可能并不是十分理想。此外在每张图像上,许多网格单元不包含任何目标,这将使这些网格单元的置信度推向零,从而压制了包含目标的网格单元的梯度,这会导致模型不稳定,在很早的时候就出现训练发散。

为了解决这个问题,增加了bbox坐标预测的损失,减少了不包含目标box的置信度预测的损失,用\lambda _ { \text {coord } }\lambda _ { \mathrm { noobj } }这两个参数来完成。设置第一个为5,第二个为0.5。

平方和损失对于大box和小box也是用相等的权重。而损失度量应该反映出大box的小偏差比小box的小,为了部分解决这个问题,去预测bbox的宽和高的平方根,而不是直接预测宽和高。

YOLO在每个网格单元预测多个bbox。在训练时仅仅想要一个bbox负责响应每个目标。根据哪个预测具有当前最高IOU,将其分配为响应预测目标,这将导致bbox预测之间的特化。每个预测都能更好地预测某些大小,纵横比或目标类别,从而提高整体的召回率。整个损失函数如下所示:

yolo_v1-loss.png

其中\mathbb { 1 } _ { i } ^ { \mathrm { obj } }表示如果目标出现在网格单元i\mathbb { 1 } _ { i j } ^ { \mathrm { obj } }表示在网格单元i的第j个bbox响应那个预测。

需要注意的是,仅当目标存在于该网格单元时,损失函数才惩罚分类错误。也仅当预测响应真实box时惩罚bbox的坐标误差(如网格单元中具有最高IOU的预测)。

训练135个epoch,batch size为64,动量为0.9,decay为0.0005。第一个epoch学习率从10 ^ { - 3 }缓慢上升到10 ^ { - 2 }(如果刚开始学习率过大会导致不收敛),之后用10 ^ { - 2 }训练75个epoch,10 ^ { - 3 }训练30个epoch,10 ^ { - 4 }训练最后40个epoch(学习率调度有意思了,完全就是CLR的思路)。

为了避免过拟合,使用dropout和数据增强。在第一个全连接层后接上0.5丢失率的dropout层。对于数据增强,引入了高达原始图像大小20%的随机缩放和平移。 并在HSV颜色空间中用1.5的因子随机调整图像的曝光和饱和度。

2.3 预测

对于VOC,每张图预测98个bbox(7 x 7 x 2)。网格的设计使bbox预测强制实现了空间多样性。通常很清楚一个目标落入哪个网格单元,并且网络仅为每个目标预测一个box。 然鹅,一些大目标或多个网格单元边界附近的目标可以通过多个单元很好地定位。非极大值抑制(NMS)用来解决这种多个预测的问题,NMS提升了2-3%的mAP。

2.4 YOLO的限制

YOLO对bbox的预测有很强的空间约束,因为每个网格单元只预测两个box,并且只能有一个类,这个约束限制了模型可以预测的附近目标的数量模型也很难处理一组小目标,例如成群的鸟类。

因为模型是从数据中学习预测bbox,因此很难泛化到具有新的或不一致纵横比的目标。

使用相对粗糙的特征来预测bbox,因为架构有多个下采样层。

最后,损失函数对待小bbox和大bbox的错误是一致的。大box中的小错误通常是可以接受的,而小box中的小错误对IOU的影响要大得多。YOLO主要的错误源就是定位不准

3 与其他检测系统的比较

Deformable parts models(DPM)

10年提出,二作是rbg,基于滑动窗口方法,各组件分离。

R-CNN

YOLO和R-CNN也有一些相似点。在每个网格单元提出潜在的bbox,并使用卷积特征对这些box进行评分。然而,YOLO对网格单元的候选设置了空间限制,这有助于减轻同一目标的多次预测。YOLO提出更少的bbox,98个,而用Selective Search的R-CNN有2000个

Other Fast Detectors

还是比Fast R-CNN和Faster R-CNN快。

Deep MultiBox

OverFeat

MultiGrasp

4 实验

4.1 与其他实时系统的比较

反正YOLO最快就对了。

作者也用VGG16训练了YOLO,准确率更高不过速度明显慢于YOLO。

VGG16的Faster R-CNN比YOLO高10个mAP,不过慢6倍。

4.2 VOC2007错误分析

yolo_v1-fig4.png

定位错误在YOLO中占大头。Fast R-CNN有更少的定位错误,不过有更多的背景错误。

4.3 结合Fast R-CNN和YOLO

YOLO比Fast R-CNN有更少的背景错误,用YOLO消除Fast R-CNN中的背景错误会有一个明显的性能提升。说白了就是做ensemble。见表2的结果。

yolo_v1-table2.png

4.4 VOC2012结果

yolo_v1-table3.png

4.5 泛化能力:艺术品上的人像检测

yolo_v1-fig5.png
yolo_v1-fig6.png

艺术品和自然图像在像素级别上非常不同,不过它们在目标的大小和形状方面相似,因此YOLO仍可以很好的预测出来。

5 真实场景的实时检测

用摄像机的结果进行检测。

6 总结

YOLO是一个构建简单的,可以直接在全图上训练的模型。和基于分类的方法有所不同,YOLO直接响应检测性能的损失函数,同时整个模型被联合训练。

七 读后感

本文写的还是非常口语化,如沐春风。相关工作这一节明面上省了,不过用和其他检测系统的比较来代替。感觉YOLO重点还是玩损失函数这一块,针对各种特点,针对性的设置损失函数,网络结构没什么好讲的。

大神还是非常有个性的,YOLO v2写的真随性,根本没按论文的标准段落来。

素质四连

要解决什么问题

实时目标检测

用了什么方法解决

将检测视为回归问题,不需要复杂的pipeline,用统一的网络来预测,魔改损失函数

效果如何

当时背景下可用目标检测系统中最快的一个。

还存在什么问题

对小目标捉急,对成群出现的目标捉急,定位错误占大头,每个网格单元只预测两个box,并且只能有一个类,详见2.4节作者自己总结的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容