You Only Look Once[译]

*参考文章:
原论文地址:https://pjreddie.com/media/files/papers/yolo_1.pdf
深度学习检测方法梳理:http://www.cnblogs.com/venus024/p/5590044.html
YOLO:实时快速目标检测:https://zhuanlan.zhihu.com/p/25045711
Faster-RCNN详解:http://blog.csdn.net/u013832707/article/details/53641055

写在前面(当然paper中是没有的)
在YOLO出现之前还有一些常用的 Object Detection网络:RCNN -> Fast R-CNN -> Faster R-CNN,具体不同请参考博客

RCNN解决的是,“为什么不用CNNclassification呢?”
Fast R-CNN解决的是,“为什么不一起输出bounding box和label呢?”
Faster R-CNN解决的是,“为什么还要用selective search呢?”

Abstract

我们提出了一种新的object detection方法,先前的object detection工作使用了执行检测的分类器。相反,我们将object detection作为回归问题,以在空间上分离的bounding boxes和相关的 class probabilities进行框架化。单个神经网络在一次评估中直接从完整图像预测边界框和类概率。由于整个检测流水线是单个网络,因此可以直接在检测性能上进行端对端优化。

1. Introduction

人类只需要瞄一眼图片就能够知道图片中的信息,因为人类的视觉系统非常的快和准确,让我们实现复杂的任务,例如不怎么费力的开车。用于object detection的快速和准确的算法将允许计算机无需专门的传感器来驱动汽车,使辅助设备能够将实时场景信息传达给人类用户。

现在的检测系统重新使用了分类器来实现检测。为了检测一个对象,这些系统对该对象进行分类,并在测试图像中的各种位置和比例下进行评估。诸如可变形部件模型(DPM)的系统使用滑动窗口方法,其中分类器在整个图像上以均匀间隔的位置运行.

更先进的一点的方法(例如R-CNN)使用region proposal的方法在一张图片上产生bounding boxes,然后在这些boxes上执行分类。分类后,后处理用于微调bounding boxes,和消除重复检测,并根据场景中的其他对象重新确定框。这些复杂的途径难以优化,因为每个单独的组件必须分开训练。

我们把object detection视作一个单独的回归问题,直接从图像像素到bounding boxes坐标和类概率。使用我们的系统,您只需要看一眼就知道图片上有什么并且在哪里。(作者豪情万丈_

*YOLO示意图*

YOLO是非常简单的:如上图。一个单个卷积神经网络能够同时预测多个bounding boxes以及他们的概率。YOLO在完整的图像上训练,能够直接优化检测性能。这种统一的模型比传统的object detection方法有几个好处。

  1. 快,非常快。我们的基础版在Titan X GPU上可以达到45帧/s; 快速版可以达到150帧/s。因此,YOLO可以实现实时检测。
  2. YOLO采用全图信息来进行预测。与滑动窗口方法和region proposal-based方法不同,YOLO在训练和预测过程中可以利用全图信息。Fast R-CNN检测方法会错误的将背景中的斑块检测为目标,原因在于Fast R-CNN在检测中无法看到全局图像。相对于Fast R-CNN,YOLO背景预测错误率低一半。
    训练YOLO,然后采用艺术图像来预测。YOLO比其它目标检测方法(DPMR-CNN)准确率高很多。
     但是,YOLO的准确率没有最好的检测系统准确率高。YOLO可以快速识别图像中的目标,但是准确定位目标(特别是小目标)有点困难,我们将在实验中进行权衡。

2. Unified Detection(统一检测)

我们将object detection的单独组件统一为单个神经网络.我们的网络使用整个图像的特征来预测每个bounding boxes。他同时还可以预测所有的类的bounding boxes。YOLO的设计可实现端到端训练和实时检测,同时保持较高的平均精度。


重点来了


系统将输入的图片划分为S X S个小格子,如果物体的中心( 这里说的物体的中点应该是指ground truth box中的物体的中心 )落入到某一个小格中,则对应的小格负责检测这个物体。

每个小格子预测B个bounding boxes以及对应的置信度(confidence scores),这些置信度反映了box包含物体的信心以及准确度(自己体会)。我们定义置信度为Pr(Object) ∗ IOUtruthpred.如果box中不存在物体,那么confidence scores0即意味着Pr(Object) =0),否则,我们希望预测的置信值和ground truth的intersection over union (IOU)相同(即意味着Pr(Object) =1)。
 每个bounding box由五个预测值组成:x,y,w,hconfidence(x,y)坐标表示相对于网格单元边界的框的中心。(w,h)为与全图信息相关的box的宽和高。confidence代表了predicted box和任何 ground truth box的IOU。
  每个网格单元还预测 C 条件类概率Pr(Classi|Object),这些概率适用于包含对象的网格单元格,概率值C代表了格子包含一个目标的概率,每个小格子只预测一组类概率,而不考虑框B的数量。在测试时,每个box通过类别概率和box置信度相乘来得到特定类别置信度:

*特定类别的置信度*

这个分数代表该类别出现在box中的概率和box和目标的合适度

For evaluating YOLO on PASCAL VOC, we use S = 7, B = 2. PASCAL VOC has 20 labelled classes so C = 20.

2.1 Network Design(网络结构)

模型采用卷积神经网络结构。开始的卷积层提取图像特征,全连接层预测输出概率。模型结构类似于GoogleNet,如下图所示。我们还训练了YOLO的快速版本(fast YOLO)。Fast YOLO模型卷积层和filter更少。最终输出为7×7×30的tensor。

*YOLO架构图*

每个grid有30维,这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。 其中坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。

图片来自[知乎专栏](https://zhuanlan.zhihu.com/p/24916786)

2.2 Training

  • 采用ImageNet 1000-class 数据集来预训练卷积层。预训练阶段,采用图2-2网络中的前20卷积层,外加average pooling层和全连接层。模型训练了一周,获得了top-5 accuracy为0.88(ImageNet2012 validation set),与GoogleNet模型准确率相当。

  • 将模型转换为检测模型。作者向预训练模型中加入了4个卷积层和两层全连接层,提高了模型输入分辨率(224×224-->448×448)

  • 最终层预测类概率和bounding boxes坐标。 通过图像宽度和高度将边界框宽度和高度归一化,使得它们落在0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移,使得它们也在0和1之间 。

  • 顶层采用linear activation,其它层使用 leaky rectified linear。

*Leaky rectified linear activation*
  • 使用sum-squared error,因为很容易优化,但它不完全符合我们的最大化平均精度的目标。预测概率的维数比预测bounding box的维数要高,把他们同等对待是不理想的。此外,在每个图像中,许多网格单元不包含任何对象。 这将这些网格单元的“置信度”为零,通常压倒包含对象的网格的梯度。 这可能导致模型不稳定,导致训练早期发散。为了弥补这一点,采用一个办法就是加权,赋予不同的权值,对于Pr(object)=0的格子令 λ_noobj = 0.5,对于Pr(object)=1的格子令 λ_coord = 5.
  • 对不同大小的bounding box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。因此预测边界框宽度和高度的平方根,而不是宽度和高度(因为平方根函数的图像随着x的增大会变得平缓).
图片来自[知乎专栏](https://zhuanlan.zhihu.com/p/24916786)
  • loss function
*The Loss Function*

loss function由五部分组成:(其中1iobji表示如果对象出现在单元格 i 中,表示如果对象出现在单元格i中,1iobjij表示网络单元格 i 中的第 j 个 bounding box预测器对于该预测的
objectresponsible
)

*Part 1 `(x,y)`的 `loss`*
*Part 2 `(w,h)`的 `loss`*
*Part 3 含预测的 `object`每个 `bounding box`的 `confindence`的 `loss`*
*Part 4 不含预测的 `object`每个 `bounding box`的 `confindence`的 `loss`*
*Part 5 `class probability`的 `loss`,是对每个 `grid`而言,而不是 `bounding box`*

![图片来自知乎专栏

Note

  • 只有当某个网格中有object的时候才对classification error进行惩罚。
  • 只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。

2.3 Inference

对于PASCAL VOC数据集,模型需要对每张图片预测98个bounding box和对应的类别。对于大部分目标只包含一个box;其它有些面积大的目标包含了多个boxes,采用了Non-maximal suppression(非最大值抑制)来提高准确率。

2.4 Limitations

  1. YOLO的每一个网格只预测两个boxes,一种类别。这导致模型对相邻目标预测准确率下降。因此,YOLO对成队列的目标(如 一群鸟)识别准确率较低。
  2. YOLO是从数据中学习预测bounding boxes,因此,对新的或者不常见角度的目标无法识别。
  3. YOLO的loss函数对small bounding boxeslarge bounding boxeserror平等对待,影响了模型识别准确率。因为对于小的bounding boxessmall error影响更大。

3. Comparison to Other Detection Systems && Experiments

挖个坑以后补上 _


使用训练好的模型进行object detection(基于linux)

  • 安装Darknet
git clone https://github.com/pjreddie/darknet.git  
cd darknet
make
  • 下载所需的权重文件
cd darknet/
wget http://pjreddie.com/media/files/yolo.weights
  • 测试,可以是data文件夹下的图,也可以是自己的图
./darknet detect cfg/yolo.cfg yolo.weights data/test.jpg
测试图
效果图,棒棒哒

才发现有一个ppt:强烈推荐
未明白的问题:欢迎各位解答或者批评指正

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

推荐阅读更多精彩内容