当一切看起来无可挽回之时,我跑去看石匠重复捶击他面前的岩石一百次,而那块石头连一个裂缝都没有露出来。接下来的第一百零一次捶击之时,此石一分为二。不是因为这一次捶击,而是因为你的始终如一。                

                                                                                                                                                                                                                ☜

                                                                                                                                                                                                                                                                                                                                                                                                                                           

毋庸置疑~

目标检测火了,一塌糊涂~

当前计算机视觉和机器学习领域的香饽饽~

从传统的DPM等检测方法到当今的RCNN、YOLO等深度学习的智能检测~

一切都来的快,去的也快~

本文带你进入目标检测的世界,领略它的过去和现在,感受属于它的威力和魅力~

It's time to begin!

那到底什么是目标检测?它跟目标分类与目标分割有什么区别?都有什么用?

接下来一一解释,理解图像处理的三个层次

一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。其中,ImageNet是最权威的评测集,每年的ILSVRC催生了大量的优秀深度网络结构,为其他任务提供了基础。在应用领域,人脸、场景的识别等都可以归为分类任务。

二是检测(Detection)。分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而,检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置(常用矩形检测框的坐标表示)。

三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对前背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别(实例)意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。

回到最后一个问题,都有什么用?目标分类、检测、识别、定位、分割在环境感知领域尤为重要,比如说近两年大火的智能驾驶、自动驾驶,都离不开这些算法,而且需要很高的准确率和效率。

本文重点叙述目标检测的方方面面,先来了解一下都有哪些算法~

传统算法的主要有:

Haar特征+Adaboost算法

Hog特征+Svm算法

DPM算法

深度学习的目标检测典型代表有:

RCNN系列,RCNN,spp-net,fast-rcnn,faster-rcnn

YOLO系列,YOLOv1/v2/YOLO9000/v3

SSD系列

针对传统算法,基本上都是基于手工特征所构建的:(1).创建滑动窗口 (2).提取特征(SIFT,HOG,LBP) (3).训练分类器(SVM),另外,可变形部件模型(Deformable Part based Model,DPM)算是基于经典手工特征的检测算法发展的顶峰,连续获得VOC07、08、09三年的检测冠军。其主要思想可理解为将传统目标检测算法中对目标整体的检测问题拆分并转化为对模型各个部件的检测问题,然后将各个部件的检测结果进行聚合得到最终的检测结果,即“从整体到部分,再从部分到整体”的一个过程。例如,对汽车目标的检测问题可以在DPM的思想下分解为分别对车窗、车轮、车身等部件的检测问题,对行人的检测问题也可以类似地被分解为对人头、四肢、躯干等部件的检测问题。虽然近几年基于深度学习的检测模型从精度上已远远超越了DPM,但DPM中的很多思想直到今天依然重要,例如混合模型、难样本挖掘、包围框回归、上下文信息的利用等。时至今日,这些方法还都深深影响着目标检测领域的发展。

无奈但又幸运~

深度学习的发展加速了目标检测的进程,给目标检测带来了新的生机~

接下来感受下深度学习加速下的几种方法——

1、Selective search


如何寻找有效的候选框,最开始的就是这个方法。 
寻找方法就是一开始把一幅图像,分割成无数个候选框构造而成的(convert regions to boxes) 
然后根据一些色彩特征、把候选框进行融合,框数量变小了,框变大;效果就是逐渐、慢慢找到最好的框 ,显然,这种方法效果不是很理想。
.

2、R-CNN(CVPR 2014)

R-CNN使用了一种非常简单的检测策略,首先在图像中提取Object Proposals,接下来把每个Proposal缩放到相同的大小后使用在ImageNet上训练好的Alexnet网络提取特征,最后再使用SVM分类器进行虚警排除和类别判断。R-CNN在PASCAL-VOC07数据集上取得了惊艳的效果,mAP由33.7%(DPM-v5)提升至58.5%。

但是,每个都要计算太浪费时间了,最开始,需要把数据固化到硬盘很占容量,同时分类用SVM也非常耗时,效率不高。

在RCNN中CNN阶段的流程大致如下: 

红色框是selective search 输出的可能包含物体的候选框(ROI);然而一张图图片会有2k个候选框,每一个都要单独输入CNN做卷积等操作很费时。 
总的来说,虽然R-CNN取得了很大的进步,但其缺陷也很明显:首先,其训练是多阶段的,较为繁琐和耗时;其次,由于在高密度的候选区域上反复进行特征提取,其检测速度很慢(GPU下每张图40秒,640×480像素)。后来Kaiming He等人提出了SPPNet,很好地解决这个问题。

3、SPPNet(ICCV 2014)

Kaiming He等人在2014年提出了SPPNet,用来解决CNN网络提取特征时要求输入图像尺寸固定的问题。与传统的CNN网络模型相比,其创新点是,在卷积层和全连接层之间添加了一个空间金字塔池化(Spatial Pyramid Pooling, SPP)层。SPPNet可做到不经过候选区域的缩放操作就能实现任意大小、任意长宽比区域的特征提取。在不损失精度的前提下,SPPNet是R-CNN的检测速度的38倍。SPPNet有效解决了候选区域计算冗余的问题,但是依然存在一些缺陷:首先,其训练是仍然是多阶段的;其次,SPPNet在微调网络时,只对其全连接层进行了微调,影响了特征的准确性。后续提出的Fast R-CNN检测器进一步地解决了这些问题。

如上图所示:

    使用三层的金字塔池化层pooling,分别设置图片切分成多少块,论文中设置的分别是(1,4,16),然后按照层次对这个特征图feature A进行分别处理(用代码实现就是for(1,2,3层)),也就是在第一层对这个特征图feature A整个特征图进行池化(池化又分为:最大池化,平均池化,随机池化),论文中使用的是最大池化,得到1个特征。第二层先将这个特征图feature A切分为4个(20,30)的小的特征图,然后使用对应的大小的池化核对其进行池化得到4个特征,第三层先将这个特征图feature A切分为16个(10,15)的小的特征图,然后使用对应大小的池化核对其进行池化得到16个特征.然后将这1+4+16=21个特征输入到全连接层,进行权重计算. 当然了,这个层数是可以随意设定的,以及这个图片划分也是可以随意的,只要效果好同时最后能组合成我们需要的特征个数即可,这就是SPPNet的核心思想。

4、Fast R-CNN(ICCV 2015)

2015年,Girshick等人在R-CNN和SPPNet的基础上又提出了FastR-CNN检测器。Fast-RCNN最大的特点在于实现了一种多任务学习方式,实现了在网络微调的同时,对目标分类和包围框回归的同步训练,且训练速度是R-CNN的9倍,检测速度是R-CNN的200倍。在VOC2007数据集上,Fast-RCNN将mAP由RCNN的58.5%提升至70.0%。Fast-RCNN成功地结合了R-CNN和SPPNet两者的优点,但还是需要事先使用外部算法来提取目标后选框,不能够实现端到端的处理。那能不能将候选区域检测这一操作同样也交给网络去做呢?后来的Faster R-CNN解决了这个问题。

其实,在我上帝视角(看完整个线)看来,Fast RCNN提出新的东西并不是太多,往往都是别人忽略的东西,实际上也算是对SPP上的捡漏。首先fast rcnn说无论是训练还是测试都比RCNN 和SPP快很多倍。其次,提出了一个特殊的层RoI,这个实际上是SPP的变种,SPP是pooling成多个固定尺度,而RoI只pooling到一个固定的尺度(6×6)。网络结构与之前的深度分类网络(alex)结构类似,不过把pooling5层换成了RoI层,并把最后一层的Softmax换成两个,一个是对区域的分类Softmax(包括背景),另一个是对bounding box的微调。这个网络有两个输入,一个是整张图片,另一个是候选proposals算法产生的可能proposals的坐标。训练的时候,它指出了SPP训练的不足之处,并提出新的训练方式,就是把同张图片的prososals作为一批进行学习,而proposals的坐标直接映射到conv5层上,这样相当于一个batch一张图片的所以训练样本只卷积了一次。文章提出他们通过这样的训练方式或许存在不收敛的情况,不过实验发现,这种情况并没有发生。这样加快了训练速度。另外,它同时利用了分类的监督信息和回归的监督信息,使得网络训练的更加鲁棒,而且效果更好。值得注意的是,他在回归问题上并没有用很常见的2范数作为回归,而是使用所谓的鲁棒L1范数作为损失函数。实际训练时,一个batch训练两张图片,每张图片训练64个RoIs(Region of Interest),前向反向计算就不说了,如果把pooling的反向计算理解了,这个roi应该不会太难。这篇论文提到了一个让人引发遐想的地方就是它将比较大的全链接层用SVD分解了一下使得检测的时候更加迅速。虽然是别人的工作,但是引过来恰到好处。最后作者写了个类似讨论的板块,并从实验角度说明了多任务对训练是否有帮助?尺度不变性如何实现?是单尺度学习还是多尺度学习?(注意,这里的尺度是对整张图片的resize尺度)得到的结论是多尺度学习能提高一点点map,不过计算量成倍的增加了,故单尺度训练的效果更好。最后在SVM和Softmax的对比实验中说明,SVM的优势并不明显,故直接用Softmax将整个网络整合训练更好。

5、Faster R-CNN(ICCV 2015)

同样是在2015年,在Fast-RCNN被提出后不久,Shaoqing Ren、Kaiming He以及Girshick等人又很快提出了Faster-RCNN算法。Faster-RCNN是第一个真正意义上的端到端的深度学习检测算法,也是第一个准实时(17帧/秒,640×480像素)的深度学习目标检测算法。Faster-RCNN在VOC07上在此将mAP由70.0%提升至78.8%。Faster-RCNN最大的创新点在于设计了候选区域生成网络(RegionProposal Network,RPN),并在其中设计了“多参考窗口”的机制,将Selective Search或Edge Boxes等外部Objectproposal检测算法融合到同一个深度网络中实现。从R-CNN到Fast RCNN再到Faster-RCNN,候选区域生成,特征提取,候选目标确认和包围框坐标回归逐渐被统一到同一个网络框架之中。检测精度由R-CNN的58.8%提升至Faster-RCNN的78.8%,检测速度也由每帧几十秒提升至准实时检测速度。

官方是caffe版本:towards real-time object detection with region proposal networks 
它借用了RPN(region proposal network)选择候选框,而且RPN可以很有效地共享卷积成果。RCNN是基于像素点来做的,先提取框,后卷积,有几个框就要多少次卷积;RPN是卷积之上的特征图来的,先卷积,共享卷积成果(效率更高的切入点),只需要一次卷积。 

  • (1)RPN候选框生成阶段。

在VGG中的最后一层卷积层的特征图中,找到某一个点,通过感受野,还原到原始图像,变成了9张大小不同的框anchor boxes,像素(128,256,521)*比率(1:1,1:2,1:3)1个点,模拟出9个候选框。其中弱候选框有超出边界的话,则去掉。

  • (2)分类阶段。

选出候选框之后,接上分类对候选框进行判断。

  • (3)微调阶段。

选定一些框之后,需要对框框进行最后的微调box regression、box回归。计算差异(长宽比),然后作了微调,box regression 

  • (4)ROI pooling层阶段

spatial pyramid pooling(SPP layer)为最后输出做准备。做了微调之后,候选框大小不一样,通过调整pooling的滑块,调整到相同的结果。

上图就是RPN的网络流程图,即也是利用了SPP的映射机制,从conv5上进行滑窗来替代从原图滑窗。不过,要如何训练出一个网络来替代selective search相类似的功能呢?实际上思路很简单,就是先通过SPP依据一一对应的点从conv5映射回原图,根据设计不同的固定初始尺度训练一个网络,就是给它大小不同(但设计固定)的region图,然后根据与ground truth的覆盖率给它正负标签,让它学习里面是否有object即可。其实这又变成RCNN之前提出的方法,训练出一个能检测物体的网络,然后对整张图片进行滑窗判断,不过这样子的话由于无法判断region的尺度和scale ratio,故需要多次放缩,这样测试的话,估计判断一张图片是否有物体就需要很久。那么如何降低这一部分的复杂度呢?要知道我们只需要找出大致的地方,无论是精确定位位置还是尺寸,后面的工作都可以完成,这样子的话,与其说用小网络,简单的学习(这样子估计和蒙差不多了,反正有无物体也就50%的概率),还不如用深的网络,固定尺度变化,固定scale ratio变化,固定采样方式(反正后面的工作能进行调整,更何况它本身就可以对box的位置进行调整)这样子来降低任务复杂度呢。这里有个很不错的地方就是在前面可以共享卷积计算结果,这也算是用深度网络的另一个原因吧。而这三个固定,我估计也就是为什么文章叫这些proposal为anchor的原因了。这个网络的结果就是卷积层的每个点都有有关于k个achor boxes的输出,包括是不是物体,调整box相应的位置。这相当于给了比较死的初始位置(三个固定),然后来大致判断是否是物体以及所对应的位置,这样子的话RPN所要做的也就完成了,这个网络也就完成了它应该完成的使命,剩下的交给其他部分完成就好了。

  • 问题一:真的要画这9个候选框吗?

答:不是。卷积层每个点演化成9个框,而9个框则是虚构出来的,而没有真正画在图像上。

  • 问题二:感受野

计算感受野的时候,在计算未来的候选框大小,VGG网络只需要根据pooling层来计算即可,因为卷积层不会矿大、缩小感受野。

  • 问题三:分类任务实质上并不是二分类

之后再接分类softmax层判断候选框是否有物体。但是根据源码来看,并不是二分类(是否有物体),而是18分类。通过定义loss function来实现成9个框,9个框计算正负的概率,那就是18个结果。

  • 问题四:如何判断候选框是有物体的?

根据给定的训练集的输入数据的四个坐标(x,y,m,h)的groud truth,看重合部分,大于0.7,认为是一个物体(正例,前景),小于0.3认为不是一个物体(负例,背景) 
.

6. Feature Pyramid Networks(2017)

在2017年,Tsung-Yi Lin、Piotr Dollar、Ross Girshick和Kaiming He等人又在Faster RCNN的基础上提出了Feature Pyramid Networks(FPN)检测算法。原有的目标检测算法通常都是只采用顶层特征做检测,原因是网络顶层特征的语义信息比较丰富。然而,虽顶层特征的语义信息丰富,但其中的目标位置信息却比较粗略,不利于目标包围框的准确定位;相反,虽然底层特征的语义信息比较少,但其中目标的位置信息却非常准确。因此,FPN的主要思想就是在网络前馈结束后,又将网络中最顶层的特征图像逐层地反馈并与前层的特征图进行融合,在此基础上,再从网络中不同深度的位置引出多个检测端口对其中的不同尺度的目标进行检测。由于网络在前馈过程中天然形成了金字塔形状的特征图,所以FPN对小目标以及尺度分布较大的目标具有天然的检测优势。FPN选择在比VOC规模和难度更大的MSCOCO数据集上进行了测试,取得了当时最佳的检测效果。

7、(You Only Look Once,YOLO)2015

YOLO是单阶段方法的开山之作。它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类而得名,而且其最快达到每秒钟155帧,达到了完全实时。它让一整张图像进入到神经网络,让神经网络自己判断这物体可能在哪里,可能是什么。但它缩减了可能图像块的个数,从原来Faster R-CNN的2000多个缩减缩减到了98个。 

同时取消了Faster R-CNN里面的RPN结构,代替Selective Search结构。YOLO里面没有RPN这一步,而是直接预测物体的种类和位置。

YOLO的代价就是精度下降,在155帧的速度下精度只有52.7,45帧每秒时的精度是63.4。 
github:https://github.com/xingwangsfu/caffe-yolo

流程:

1.准备数据:将图片缩放,Resize成448*448,划分为等分的网格,即分割得到7*7网格(cell),每个网格按跟Ground Truth的IoU分配到所要预测的样本。

2.CNN提取特征和预测:由GoogLeNet更改而来,每个网格对每个类别预测一个条件概率值,并在网格基础上生成B个box,每个box预测五个回归值,四个表征位置,第五个表征这个box含有物体(注意不是某一类物体)的概率和位置的准确程度(由IoU表示)。测试时,分数如下计算:

等式左边第一项由网格预测,后两项由每个box预测,以条件概率的方式得到每个box含有不同类别物体的分数。 因而,卷积网络共输出的预测值个数为S×S×(B×5+C),其中S为网格数,B为每个网格生成box个数,C为类别数。

卷积层只负责提特特征,全链接部分负责预测:a) 7*7*2=98个bounding box(bbox) 的坐标x_{center},y_{center},w,h 和是否有物体的confidence 。 b) 7*7=49个cell所属20个物体的概率。

3.后处理:使用NMS(Non-Maximum Suppression,非极大抑制)过滤得到最后的预测框

优势:

  • 快。

  • 全局处理使得背景错误相对少,相比基于局部(区域)的方法, 如Fast RCNN。

  • 泛化性能好,在艺术作品上做检测时,YOLO表现比Fast R-CNN好。

缺陷:

  • YOLO对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的群体 
    检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
  • 测试图像中,当同一类物体出现的不常见的长宽比和其他情况时泛化能力偏弱。
  • 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。

YOLO提出了单阶段的新思路,相比两阶段方法,其速度优势明显,实时的特性令人印象深刻。但YOLO本身也存在一些问题,如划分网格较为粗糙,每个网格生成的box个数等限制了对小尺度物体和相近物体的检测。

8、YOLO2

YOLO2主要有两个大方面的改进:

  • 使用一系列的方法对YOLO进行了改进,在保持原有速度的同时提升精度得到YOLOv2。
  • 提出了一种目标分类与检测的联合训练方法,同时在COCO和ImageNet数据集中进行训练得到YOLO9000,实现9000多种物体的实时检测。

YOLOv2首先修改预训练分类网络的分辨率为448*448,在ImageNet数据集上训练10轮(10 epochs)。这个过程让网络有足够的时间调整filter去适应高分辨率的输入。然后fine tune为检测网络。mAP获得了4%的提升。 
YOLO(v1)使用全连接层数据进行bounding box预测(要把1470*1的全链接层reshape为7*7*30的最终特征),这会丢失较多的空间信息定位不准。

特征:

  • Dimension 
    Clusters(维度聚类):设想能否一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。解决办法就是统计学习中的K-means聚类方法,通过对数据集中的ground 
    true box做聚类,找到ground true box的统计规律。以聚类个数k为anchor 
    boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。
  • Direct location prediction:使用anchor 
    boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x,y)坐标时。
  • Fine-Grained Features(细粒度特征):修改后的网络最终在13 * 
    13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,如果用上细粒度特征的话可能对小尺度的物体检测有帮助。Faser 
    R-CNN和SSD都在不同层次的特征图上产生区域建议以获得多尺度的适应性。YOLOv2使用了一种不同的方法,简单添加一个 
    passthrough layer,把浅层特征图(分辨率为26 * 26)连接到深层特征图。
  • Multi-ScaleTraining:原始YOLO网络使用固定的448 * 448的图片作为输入,加入anchor 
    boxes后输入变成416 * 
    416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。
  • 作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding box 
    坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。 
    .

9、SSD(2015)

Single Shot MultiBox Detector,即SSD。 

它是YOLO的超级改进版,吸取了YOLO的精度下降的教训,同时保留速度快的特点。它能达到58帧每秒,精度有72.1。速度超过Faster R-CNN 有8倍,但达到类似的精度。


github:https://github.com/zhreshold/mxnet-ssd

SSD相比YOLO有以下突出的特点:

  • 多尺度的feature map:基于VGG的不同卷积段,输出feature map到回归器中。这一点试图提升小物体的检测精度。

  • 更多的anchor box,每个网格点生成不同大小和长宽比例的box,并将类别预测概率基于box预测(YOLO是在网格上),得到的输出值个数为(C+4)×k×m×n,其中C为类别数,k为box个数,m×n为feature map的大小。

SSD是单阶段模型早期的集大成者,达到跟接近两阶段模型精度的同时,拥有比两阶段模型快一个数量级的速度。后续的单阶段模型工作大多基于SSD改进展开。

最后,我们对检测模型的基本特征做一个简单的归纳。

~~

检测模型整体上由基础网络(Backbone Network)和检测头部(Detection Head)构成。前者作为特征提取器,给出图像不同大小、不同抽象层次的表示;后者则依据这些表示和监督信息学习类别和位置关联。检测头部负责的类别预测和位置回归两个任务常常是并行进行的,构成多任务的损失进行联合训练。

相比单阶段,两阶段检测模型通常含有一个串行的头部结构,即完成前背景分类和回归后,把中间结果作为RCNN头部的输入再进行一次多分类和位置回归。

这种设计带来了一些优点:(1)对检测任务的解构,先进行前背景的分类,再进行物体的分类,这种解构使得监督信息在不同阶段对网络参数的学习进行指导;(2)RPN网络为RCNN网络提供良好的先验,并有机会整理样本的比例,减轻RCNN网络的学习负担

这种设计的缺点也很明显:中间结果常常带来空间开销,而串行的方式也使得推断速度无法跟单阶段相比;级联的位置回归则会导致RCNN部分的重复计算(如两个RoI有重叠)。

另一方面,单阶段模型只有一次类别预测和位置回归,卷积运算的共享程度更高,拥有更快的速度和更小的内存占用。读者将会在接下来的文章中看到,两种类型的模型也在互相吸收彼此的优点,这也使得两者的界限更为模糊。

上图为目标检测的多尺度检测方式发展流程,从将近20年的目标检测流程来看,目标检测中的“多尺度”问题包含了“不同大小”和“不同长宽比”两方面的内容,而处理采用的方法也经历了从最早的“多尺度积分图特征”,到之后的“特征/滤波器金字塔遍历”,再到后来的“Object Proposals”,最后到如今的依靠“深度网络暴力回归”四个阶段的发展历程。

早期检测算法如VJ检测器在处理多尺度问题时,并没有采用“建塔”这一最直观的思路。这是因为这种做法在计算能力有限的时代无法承受如此大的计算量。所以,VJ检测器不得不采取积分图这一种巧妙的方法来解决该问题。在VJ检测器出现之后的几年里,随着硬件计算能力不断提升,更多的人尝试使用更加复杂且表达能力更强的特征进行目标检测。但遗憾的是,高度非线性的特征表示如HOG、LBP等并不具有积分图特征类似的性质,所以人们开始把思路转向了“构建金字塔+滑窗遍历”这一最直观的处理方式。从HOG检测器到DPM,甚至后来的深度学习检测算法Overfeat都是通过这种方式构建的。

需要强调的是,通过建塔的方式只能处理特定长宽比目标的检测问题,例如人脸检测、行人检测等。对于如VOC、MSCOCO等一般性目标检测问题,如果构建不同长宽比、不同尺度的特征金字塔,其计算量直到今天也是难以接受的。不过,DPM虽然没有构建不同长宽比的金字塔,但却可以处理一般性目标检测问题。这是因为DPM采用了Mixture Model这种特殊的处理策略。

随着人们需要检测的目标类别越来越多,目标形态越来越多样化,人们开始思考,是否能够利用一种统一的“粗检测”模型来处理不同长宽比和不同类别的目标?Object Proposals提供了一种很好的解决思路。Object Proposal的检测指的是利用较低的计算量实现对图像中所包含的一般性目标的包围框进行准确定位(不局限与具体的目标类别,也不局限于固定的长宽比)。Object Proposals在近两年基于深度学习的目标检测算法中起到了非常重要的作用。从R-CNN到Fast-RCNN再到Faster-RCNN,Object Proposals从最开始独立的算法模块逐渐演变到最后与网络融为一体。

随着GPU计算性能的提升,人们处理多尺度问题的方法变得越来越直接越来越暴力,而这种暴力在基于一体化卷积网络的检测方法(如YOLO)中达到了顶峰。采用深度网络暴力回归解决多尺度问题的思想非常简单,即直接利用深度网络在目标对应位置提取的特征对其包围框的长宽进行回归。这种做法的优点是设计简单,计算量小,先提条件是图像感受野足够大且深度特征表达能力足够强,缺点是对小目标的包围框定位不够准确。

同时,特征的平移、尺度不变性以及定位的准确性一直以来都存在着矛盾。早期的检测算法大多采用低层手工特征,更多关注于图像的边缘、轮廓等信息。这类特征的平移、尺度不变性较差,但对目标进行精确定位时有着天然的敏感性,可对目标边界进行准确的定位。而基于深度学习的检测算法中采用的深度特征由于其具有更强的平移不变性和尺度不变性,随之带来的问题是对目标包围框定位的先天能力不足。下图显示了目标检测中包围框回归技术的发展过程。

对于早期基于手工特征的检测算法以及后来基于Object Proposals的检测算法(如DPM、R-CNN、Fast-RCNN)而言,包围框坐标回归仅仅是作为一种刷榜时提分的手段,这种操作对于检测问题仅仅起到了锦上添花的作用,可有亦可无。然而从Faster-CNN开始,情况发生了转变,这是由于包围框回归不再是一个单独的后处理模块,而是集成在了网络中,并采用多任务损失函数同分类任务一同进行训练。现如今包围框回归已经是算法流程中不可替代的一个标准环节。最近的一些算法在包围框回归精度的提升方面取得了一些成果,比如多次包围框坐标修正、以及概率推断在包围框坐标预测中的应用等。

目标检测算法的加速一直以来都是该领域一个非常重要的问题。一般来讲,人们对算法的加速通常体现在两个层面,第一个层面是从算法原理角度出发,设计低计算复杂度的算法,并尽可能减少重复计算的开销;第二个层面是从硬件实现层面出发,采用更高并行粒度的算法,并通过多核并行计算提升计算速度,如利用GPU加速。早期的检测算法在目标检测的计算原理方面做了很多加速工作,而后期的深度学习的检测算法的计算量虽然比早期算法要大,但依靠硬件计算能力的提升已经可以轻松实现实时检测的速度。下图显示了自然图像目标检测算法的常见加速策略。

通常在目标检测算法当中,特征提取部分的计算开销较其他环节的比重最大,所以近年来人们在特征提取层面的加速工作最多,加速效果也最为显著。传统的基于滑动窗口的检测器会在每个尺度的图像上以一定步长移动,并在每个窗口上做特征提取操作。由于相邻滑窗之间通常有很大面积的交叠,因此交叠部分的特征就会存在大量的计算重复。为了解决这个问题,通常在滑窗之前,都会在图像上只整体计算一次特征图(Feature Map),以避免后面滑窗时对特征进行重复提取。事实上,传统目标检测算法中的“图像金字塔”也可以理解为“特征金字塔”,HOG检测器和DPM都是在特征金字塔上进行检测的。值得一提的是,最近几年基于深度学习的目标检测算法,除了R-CNN之外,其余的也都利用了该加速思想。

ending~

最后介绍几个常用名词吧:

1.MAP(mean average precision)

均值平均精度,每一个类别都可以根据recall和precision绘制一条曲线,那么AP就是该曲线下的面积,而mAP是多个类别AP的平均值,这个值介于0到1之间,且越大越好。这个指标是目标检测算法最为重要的一个。

2.IOU(Intersection over Union)

IOU定义了两个bounding box的重叠度,可以说,当算法给出的框和人工标注的框差异很小时,或者说重叠度很大时,可以说算法产生的boundingbox就很准确。
矩形框A、B的一个重合度IOU计算公式为:
IOU=(A∩B)/(A∪B)

3.NMS(非极大值抑制)

目标检测算法一般会给出目标很多的粗略结果,对一个目标成百上千的粗略结果都进行调整肯定是不可行的。那么我们就需要对这些粗略结果先进行一个大体的挑选。挑选出其中最具代表性的结果。再对这些挑选后的结果进行调整,这样可以加快算法效率。


消除多余的框,找到最佳的bbox
根据这些框的分类器类别分类概率做排序: A<B<C<D<E<F
(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;

(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。

(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。

4.边界框回归(Bounding-box regression )

从前面介绍的IOU指标可知,下图算法给出的红色框可以认为是检测失败的,因为它和绿色的groundtruth的 IOU值小于了0.5,也就是说重叠度不够。那么我们就需要对这个红色框进行微调。使得经过微调后的窗口跟Ground Truth 更接近 。

红色的框 P 代表原始的Proposal
**绿色的框 G **代表目标的 Ground Truth
目标是:寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口 G~
G~≈G

好嘞~

2018年7月28日14:16:35~

see you!

综述|领略目标检测的前世今生相关推荐

  1. 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法

    ↑ 点击蓝字 关注极市平台作者丨SFXiang来源丨AI算法修炼营编辑丨极市平台 极市导读 本文从降低下采样率与空洞卷积.多尺度训练.优化Anchor尺寸设计.深层和浅层特征融合等多个方面入手,对目标 ...

  2. 最全综述 | 图像目标检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类.而 ...

  3. 3综述 yolo_Onestage目标检测算法综述

    转自 | AI开发者    YOLO-v1 YOLO 就是使用回归这种做法的典型算法. 首先将图片 Resize 到固定尺寸,然后通过一套卷积神经网络,最后接上 FC 直接输出结果,这就他们整个网络的 ...

  4. 综述:目标检测2001-2021

    目标检测综述 转自:https://zhuanlan.zhihu.com/p/383616728 论文参考:[Object Detection in 20 Years: A Survey][https ...

  5. 综述:目标检测二十年

    ↑ 点击蓝字 关注视学算法 作者丨深兰科学院李亦超 来源丨 DeepBlue深兰科技 编辑丨极市平台 极市导读 以2014年为分水岭,作者将过去二十年的目标检测发展进程分为两个阶段:2014年之前的传 ...

  6. 收藏 | 综述:目标检测二十年

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | 深兰科学院李亦超 来源 | DeepBlue深兰科 ...

  7. 人工智能开讲:综述:目标检测二十年

    以2014年为分水岭,作者将过去二十年的目标检测发展进程分为两个阶段:2014年之前的传统目标检测,以及之后基于深度学习的目标检测.接下来,文章列举了二十年来目标检测领域的关键技术,思路非常清晰. 过 ...

  8. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  9. 综述 | 目标检测中的多尺度检测方法

    本文从降低下采样率与空洞卷积.多尺度训练.优化Anchor尺寸设计.深层和浅层特征融合等多个方面入手,对目标检测中的多尺度检测方法进行了全面概述,并介绍了多尺度检测相关方法. 前面的话 传统卷积网络通 ...

最新文章

  1. Centos7上安装最新的nodejs
  2. LeetCode 402. 移掉K位数字 中等难度
  3. 各种 分页存储过程整理
  4. intellij idea run configurations配置共享
  5. LeetCode 32 最长有效括号
  6. php excel header,【IT专家】PHP生成excel,方法一-header生成
  7. JDK与Java SE/EE/ME的区别
  8. iphone分辨率_揭示真实的手机屏幕大小和分辨率
  9. 一台服务器多个oracle启动
  10. Spring2.5整合Ibatis入门级开发实例
  11. uniapp与微信小程序常用api
  12. 电子设计大赛-信号源类题目分析
  13. span标签设置大小
  14. 重磅!「自然语言处理(NLP)」全球学术界”巨佬“信息大盘点(一)!
  15. 搜狗站长平台 不用审核强制提交sitemap的方法
  16. 计算机添加本地安全组用户名和密码错误,win7系统访问远程共享文件夹提示未知的用户名或密码错误的解决方法...
  17. 计算机图形学八大行星程序,计算机图形学模拟太阳系源代码
  18. Vue实现购物车功能
  19. android 头像球_【Android 界面效果44】Android之圆头像实例
  20. uni-app实战之社区交友APP(20)兼容处理和打包上线

热门文章

  1. Netfilx Eureka
  2. 内容付费时代,你愿意为文章付费吗?
  3. LibcSearcher报错:no matched libc,please add more libc or try others
  4. 国内外云主机,美国主机,香港主机,日本主机,韩国主机,选择使用与对比
  5. 御龙在天怎么找回服务器,御龙在天手游人物找回 误删的角色如何找回
  6. iPhone越狱的利与弊
  7. 我的世界mod整合包java_我的世界1.7.10食物、匠魂与超能力向整合包(附JAVA)
  8. 如何在Axure软件中实现图片移入缩小
  9. MFC ON_NOTIFY_EX消息是干什么用的?
  10. 1951. 宇宙人浇花(最大异或对变形)