编程语言
首页 > 编程语言> > 4. 基于深度学习的目标检测算法的综述(转)

4. 基于深度学习的目标检测算法的综述(转)

作者:互联网

4. 基于深度学习的目标检测算法的综述(转)

原文链接:https://www.cnblogs.com/zyly/p/9250195.html

目录

 


 

在前面几节中,我们已经介绍了什么是目标检测,以及如何进行目标检测,还提及了滑动窗口,bounding box、以及IOU,非极大值抑制等概念。

这里将会综述一下当前目标检测的研究成果,并对几个经典的目标检测算法进行概述,本文内容来自基于深度学习的目标检测,在后面几节里,会具体讲解每一种方法。

在深度度学习的目标检测算法兴起之前,传统的目标检测算法是怎样的呢?

传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:

传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)[13]是出类拔萃的,连续获得VOC(Visual Object Class)2007到2009的检测冠军,2010年其作者Felzenszwalb Pedro被VOC授予”终身成就奖”。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。正当大家热火朝天改进DPM性能的时候,基于深度学习的目标检测横空出世,迅速盖过了DPM的风头,很多之前研究传统目标检测算法的研究者也开始转向深度学习。

基于深度学习的目标检测发展起来后,其实效果也一直难以突破。比如文献[6]中的算法在VOC 2007测试集合上的mAP只能30%多一点,文献[7]中的OverFeat在ILSVRC 2013测试集上的mAP只能达到24.3%。2013年R-CNN诞生了,VOC 2007测试集的mAP被提升至48%,2014年时通过修改网络结构又飙升到了66%,同时ILSVRC 2013测试集的mAP也被提升至31.4%。

R-CNN是Region-based Convolutional Neural Networks的缩写,中文翻译是基于区域的卷积神经网络,是一种结合区域提名(Region Proposal)和卷积神经网络(CNN)的目标检测方法。Ross Girshick在2013年的开山之作《Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation》[1]奠定了这个子领域的基础,这篇论文后续版本发表在CVPR 2014[2],期刊版本发表在PAMI 2015[3]。

其实在R-CNN之前已经有很多研究者尝试用Deep Learning的方法来做目标检测了,包括OverFeat[7],但R-CNN是第一个真正可以工业级应用的解决方案,这也和深度学习本身的发展类似,神经网络、卷积网络都不是什么新概念,但在本世纪突然真正变得可行,而一旦可行之后再迅猛发展也不足为奇了。

R-CNN这个领域目前研究非常活跃,先后出现了R-CNN[1,2,3,18]、SPP-net[4,19]、Fast R-CNN[14, 20] 、Faster R-CNN[5,21]、R-FCN[16,24]、YOLO[15,22]、SSD[17,23]等研究。Ross Girshick作为这个领域的开山鼻祖总是神一样的存在,R-CNN、Fast R-CNN、Faster R-CNN、YOLO都和他有关。这些创新的工作其实很多时候是把一些传统视觉领域的方法和深度学习结合起来了,比如选择性搜索(Selective Search)和图像金字塔(Pyramid)等。

深度学习相关的目标检测方法也可以大致分为两派:

目前来说,基于区域提名的方法依然占据上风,但端到端的方法速度上优势明显,后续的发展拭目以待。

回到顶部

一 相关研究

本文作为目标检测的一篇回顾,先来看看目标检测中广泛使用的区域提名——选择性搜索,以及用深度学习做目标检测的早期工作——Overfeat 。

1、选择性搜索(Selective Search)

目标检测的第一步是要做区域提名(Region Proposal),也就是找出可能的感兴趣区域(Region Of Interest, ROI)。区域提名类似于光学字符识别(OCR)领域的切分,OCR切分常用过切分方法,简单说就是尽量切碎到小的连通域(比如小的笔画之类),然后再根据相邻块的一些形态学特征进行合并。但目标检测的对象相比OCR领域千差万别,而且图形不规则,大小不一,所以一定程度上可以说区域提名是比OCR切分更难的一个问题。

区域提名可能的方法有:

区域提名并不只有以上所说的三种方法,实际上这块是非常灵活的,因此变种也很多,有兴趣的读者不妨参考一下文献[12]。

选择性搜索的具体算法细节[8]如算法1所示。总体上选择性搜索是自底向上不断合并候选区域的迭代过程。

复制代码
输入: 一张图片

输出:候选的目标位置集合L

算法:

1: 利用过切分方法得到候选的区域集合R = {r1,r2,…,rn}

2: 初始化相似集合S = ϕ

3: foreach 邻居区域对(ri,rj) do

4:     计算相似度s(ri,rj)

5:     S = S  ∪ s(ri,rj)

6: while S not=ϕ do

7:     得到最大的相似度s(ri,rj)=max(S)

8:     合并对应的区域rt = ri ∪ rj

9:     移除ri对应的所有相似度:S = S\s(ri,r*)

10:    移除rj对应的所有相似度:S = S\s(r*,rj)

11:    计算rt对应的相似度集合St

12:    S = S ∪ St

13:    R = R ∪ rt

14: L = R中所有区域对应的边框
复制代码

从算法不难看出,R中的区域都是合并后的,因此减少了不少冗余,相当于准确率提升了,但是别忘了我们还需要继续保证召回率,因此算法1中的相似度计算策略就显得非常关键了。如果简单采用一种策略很容易错误合并不相似的区域,比如只考虑轮廓时,不同颜色的区域很容易被误合并。选择性搜索采用多样性策略来增加候选区域以保证召回,比如颜色空间考虑RGB、灰度、HSV及其变种等,相似度计算时既考虑颜色相似度,又考虑纹理、大小、重叠情况等。

总体上,选择性搜索是一种比较朴素的区域提名方法,被早期的基于深度学习的目标检测方法(包括Overfeat和R-CNN等)广泛利用,但被当前的新方法弃用了。

2、OverFeat

OverFeat[7][9]是用CNN统一来做分类、定位和检测的经典之作,作者是深度学习大神之一————Yann Lecun在纽约大学的团队。OverFeat也是ILSVRC 2013任务3(分类+定位)的冠军得主[10]。

OverFeat的核心思想有三点:

OverFeat的关键步骤有四步:

 

Overfeat是CNN用来做目标检测的早期工作,主要思想是采用了多尺度滑动窗口来做分类、定位和检测,虽然是多个任务但重用了模型前面几层,这种模型重用的思路也是后来R-CNN系列不断沿用和改进的经典做法。

当然Overfeat也是有不少缺点的,至少速度和效果都有很大改进空间,后面的R-CNN系列在这两方面做了很多提升。

回到顶部

二、基于区域提名的方法

本小节主要介绍基于区域提名的方法,包括R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN。

1、R-CNN

如前面所述,早期的目标检测,大都使用滑动窗口的方式进行窗口提名,这种方式本质是穷举法,R-CNN[1,2,3]采用的是Selective Search。

以下是R-CNN的主要步骤:

其中目标检测系统的结构如下图所示,注意,图中的第2步对应步骤中的1、2步,即包括区域提名和区域大小归一化。

Overfeat可以看做是R-CNN的一个特殊情况,只需要把Selective Search换成多尺度的滑动窗口,每个类别的边框回归器换成统一的边框回归器,SVM换为多层网络即可。但是Overfeat实际比R-CNN快9倍,这主要得益于卷积相关的共享计算。

事实上,R-CNN有很多缺点:

当然,R-CNN这次是冲着效果来的,其中ILSVRC 2013数据集上的mAP由Overfeat的24.3%提升到了31.4%,第一次有了质的改变。

 2、SPP-Net

SPP-net[4,19]是MSRA何恺明等人提出的,其主要思想是去掉了原始图像上的crop/warp(裁切/扭曲)等操作,换成了在卷积特征上的空间金字塔池化层(Spatial Pyramid Pooling,SPP),如下图所示。为何要引入SPP层 ,主要原因是CNN的全连接层要求输入图片是大小一致的,而实际中的输入图片往往大小不一,如果直接缩放到同一尺寸,很可能有的物体会充满整个图片,而有的物体可能只能占到图片的一角。传统的解决方案是进行不同位置的裁剪,但是这些裁剪技术都可能会导致一些问题出现,比如下图中的crop会导致物体不全,warp导致物体被拉伸后形变严重,SPP就是为了解决这种问题的。SPP对整图提取固定维度的特征,再把图片均分成4份,每份提取相同维度的特征,再把图片均分为16份,以此类推,注意这里提取固定维度的特征,是通过对每个网格中的每个通道,都取出其最大值,换句话说,就是最每个网格内的特征做最大值池化。可以看出,无论图片大小如何,提取出来的维度数据都是一致的,这样就可以统一送至全连接层了。SPP思想在后来的R-CNN模型中也被广泛用到。

SPP-net的网络结构如下图所示,实质是最后一层卷积层后加了一个SPP层,将维度不一的卷积特征转换为维度一致的全连接输入。

SPP-net做目标检测的主要步骤为:

SPP-net解决了R-CNN区域提名时crop/warp带来的偏差问题,提出了SPP层,使得输入的候选框可大可小,但其他方面依然和R-CNN一样,因而依然存在不少问题,这就有了后面的Fast R-CNN。

3、Fast R-CNN

Fast R-CNN是要解决R-CNN和SPP-net两千个左右候选框带来的重复计算问题,其主要思想为:

如下图所示,Fast R-CNN的主要步骤如下:

 

Fast R-CNN比R-CNN的训练速度(大模型L)快8.8倍,测试时间快213倍,比SPP-net训练速度快2.6倍,测试速度快10倍左右。

4、Faster R-CNN

Fast R-CNN使用Selective Search来进行区域提名,速度依然不够快。Faster R-CNN则直接利用RPN(Region Proposal Networks)网络来计算候选框。RPN以一张任意大小的图片为输入,输出一批矩形区域提名,每个区域对应一个目标分数和位置信息。Faster R-CNN中的RPN结构如下图所示。

Faster R-CNN的主要步骤如下:、

总之,Faster R-CNN抛弃了Selective Search,引入了RPN网络,使得区域提名、分类、回归一起共用卷积特征,从而得到了进一步的加速。但是,Faster R-CNN需要对两千个Anchor Box先判断是否是目标(目标判定),然后再进行目标识别,分成了两步。

5、R-FCN

前面的目标检测方法都可以细分为两个子网络:

R-FCN则将最后的全连接层换为了一个位置敏感的的卷积网络,从而让所有计算都可以共享。具体来说,先把每个提名区域划分为k×k个网格,比如R-FCN原文中k的取值为3,则对应的九个网格分别表示:左上top-left,上中top-center,,右下bottom-right,对应下面第一张图中的九宫格及第二张图中的不同颜色的块,每个Grid都有对应的编码,但预测时候会有C+1个输出,C表示类别数目,+1是因为有背景类别,全部的输出通道数量为k2×(C+1)。

需要注意的是,上面两张图中不同位置都存在一个九宫格,但是Pooling时候只有一个起作用,比如bottom-right层只有右下角的小块起作用。那么问题来了,这一层其他的8个框有什么作用呢?答案是它们可以作为其他ROI(偏左或偏上一些的ROI)的右下角。

R-FCN的步骤为:

回到顶部

 三 端对端的方法

本小节介绍端到端(End-to-End)的目标检测方法,这些方法无需区域提名,包括YOLO和SSD。

1、YOLO

YOLO的全拼是You Only Look Once,顾名思义就是只看一次,进一步把目标判定和目标识别合二为一,所以识别性能有了很大提升,达到每秒45帧,而在快速版YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。

网络的整体结构如图所示,针对一张图片,YOLO的处理步骤为:

网络的模型如图所示,将448×448大小的图切成S×S的网格,目标中心点所在的格子负责该目标的相关检测,每个网格预测B个边框及其置信度,以及C种类别的概率。YOLO中S=7,B=2,C取决于数据集中物体类别数量,比如VOC数据集就是C=20。对VOC数据集来说,YOLO就是把图片统一缩放到448×448,然后每张图平均划分为7×7=49个小格子,每个格子预测2个矩形框及其置信度,以及20种类别的概率。

YOLO简化了整个目标检测流程,速度的提升也很大,但是YOLO还是有不少可以改进的地方,比如S×S的网格就是一个比较启发式的策略,如果两个小目标同时落入一个格子中,模型也只能预测一个;另一个问题是Loss函数对不同大小的bbox未做区分。

2、SSD

SSD[17,23]的全拼是Single Shot MultiBox Detector,冲着YOLO的缺点来的。SSD的框架如图所示,图(a)表示带有两个Ground Truth边框的输入图片,图(b)和(c)分别表示8×8网格和4×4网格,显然前者适合检测小的目标,比如图片中的猫,后者适合检测大的目标,比如图片中的狗。在每个格子上有一系列固定大小的Box(有点类似Anchor Box),这些在SSD称为Default Box,用来框定目标物体的位置,在训练的时候Ground Truth会赋予给某个固定的Box,比如图(b)中的蓝框和图(c)中的红框。

SSD的网络分为两部分,前面的是用于图像分类的标准网络(去掉了分类相关的层),后面的网络是用于检测的多尺度特征映射层,从而达到检测不同大小的目标。SSD和YOLO的网络结构对比如图所示。

SSD在保持YOLO高速的同时效果也提升很多,主要是借鉴了Faster R-CNN中的Anchor机制,同时使用了多尺度。但是从原理依然可以看出,Default Box的形状以及网格大小是事先固定的,那么对特定的图片小目标的提取会不够好。

回到顶部

四 总结

基于深度学习的目标检测总体上分为两派:

下表大致对比了各种方法的性能(Fps,每秒帧数)和VOC 2007上的MAP对比。注意相关数据搜集自不同的paper,由于评测硬件和环境等区别,数据仅供参考,不具有绝对对比意义。

注:数据取自各自paper,由于评测硬件和环境等区别,数据并不具有绝对对比意义,仅供参考。

  Fps VOC 2007
Overfeat 0.5  
R-CNN 0.077 48-66%
SPP-net   63.1-82.4%
Fast R-CNN   66.9%-70%
Faster R-CNN 15(ZF Model) 73.2%-85.6%
R-FCN 6 83.6%
YOLO 45-150 58.8%
SSD 58-72 75.1%

 

 

   

 

 

 

 

基于深度学习的目标检测的研究目前依然非常火热,下图为VOC2012目标检测排行榜[25](2016-10-18结果),很高兴看到很多华人和国内同仁在这方面各领风骚。

当然,目标检测还有很长的路要走,比如业界公认较难的小目标检测问题。

小试身手,来一张实际的三里屯照片,YOLO的检测结果如图所示,可以看出漏检了不少目标。

再来看看下图中SSD的效果,看起来效果好不少,但被遮挡的人还是漏检了。

参考文章:

[1] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. ImageNet Large-Scale Visual Recognition Challenge workshop, ICCV, 2013.(R-CNN)

[2] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2014.(R-CNN)

[3] R. Girshick, J. Donahue, T. Darrell, J. Malik. Region-Based Convolutional Networks for Accurate Object Detection and Segmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence, May. 2015.(R-CNN)

[4] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV. 2014.(SPP-Net)

[5] S. Ren, K. He, R. Girshick, J. Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. Advances in Neural Information Processing Systems 28 (NIPS), 2015.(Faster R-CNN)

[6] C. Szegedy, A. Toshev, D. Erhan. Deep Neural Networks for Object Detection. Advances in Neural Information Processing Systems 26 (NIPS), 2013.(DNN)

[7] P. Sermanet, D. Eigen, X.Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated recognition, localization and detection using convolutional networks. In ICLR, 2014.(OverFeat)

[8] J.R. Uijlings, K.E. vandeSande, T. Gevers, and A.W. Smeulders. Selective search for object recognition. IJCV, 2013.(Selective Search)

[9] OverFeat source code

[10] ILSVRC 2013 results

[11] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural net- works. In NIPS, 2012.(DNN)

[12] J. Hosang, R. Benenson, P. Dolla ́r, and B. Schiele. What makes for effective detection proposals? TPAMI, 2015.(Selective Search)

[13] Felzenszwalb P F, Girshick R B, McAllester D, et al. Object detection with discriminatively trained part-based models[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2010, 32(9): 1627-1645.(DMP)

[14] Girshick, R. Fast R-CNN. ICCV 2015.(R-CNN)

[15] Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)(YOLO)

[16] R-FCN: Object Detection via Region-based Fully Convolutional Networks. Jifeng Dai, Yi Li, Kaiming He, and Jian Sun. Conference on Neural Information Processing Systems (NIPS), 2016.(R-FCN)

[17] Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector[J]. arXiv preprint arXiv:1512.02325, 2015.(SSD)

[18] R-CNN(代码)

[19] SPP-net(代码)

[20] Fast R-CNN(代码)

[21] Faster R-CNN代码

[22] YOLO

[23] SSD(代码)https://pjreddie.com/darknet/yolo/(使用)

[24] R-FCN(代码)

[25] Detection Results: VOC2012 Competition – “comp4” (train on own data):

[26]基于深度学习的目标检测(强烈推荐)

[27]基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN(强烈推荐)

[28]基于深度学习的图像目标检测(上)

[29]基于深度学习的图像目标检测(下)

[30]You Only Look Once: Unified, Real-Time Object Detection 中文版 中英文对照(YOLO)

[31]]SSD: Single Shot MultiBox Detector 中文版 中英文对照(SSD)

[32]YOLO9000: Better, Faster, Stronger 中文版 中英文对照(YOLO9000)

[33]Deformable Convolutional Networks 中文版 中英文对照(Deformable-ConvNets)

[34]Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 中文版 中英文对照(Faster R-CNN)

[35]R-FCN: Object Detection via Region-based Fully Convolutional Networks 中文版 中英文对照(R-FCN)

[36]Feature Pyramid Networks for Object Detection 中文版 中英文对照(FPN)

[37]目标检测论文整理

[38]文章阅读路线参考(大部分文章,以及源代码github链接)

标签:综述,SPP,检测,目标,算法,区域,深度,CNN,提名
来源: https://www.cnblogs.com/orangestar/p/11625037.html