卷积神经网络(CNNS)深度学习深度学习·神经网络·计算机视觉

You Only Look Once[译]

2017-04-22  本文已影响359人  Zliang_hhh

*参考文章:
原论文地址: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

*Leaky rectified linear activation* 图片来自[知乎专栏](https://zhuanlan.zhihu.com/p/24916786) *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


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)

git clone https://github.com/pjreddie/darknet.git  
cd darknet
make
cd darknet/
wget http://pjreddie.com/media/files/yolo.weights
./darknet detect cfg/yolo.cfg yolo.weights data/test.jpg
测试图 效果图,棒棒哒

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

  1. 通过图像宽度和高度将边界框宽度和高度归一化,使得它们落在0和1之间。
    但是是怎么将边界框x和y坐标归一化呢,在好像并没有具体的解释或者没太懂作者的解释。
上一篇 下一篇

猜你喜欢

热点阅读