Object Detection in 20 Years: A Survey
论文链接: https://arxiv.org/pdf/1905.05055v2.pdf
写在前面
这是一篇2019年5月的综述类论文,用39页的篇幅,调研了400篇论文,将目标检测20年的发展有广度有深度地进行整理和阐述。无论是对于初入门的不久想在目标检测任务上摸爬滚打的,还是已经是CV高玩,甚至是大佬,都可以从中得到收获。本文是我阅读论文时自己的整理记录,如有理解错误,请不吝指出,谢谢。
引言
目标检测是一个探究What objects are where的问题,是计算机视觉的基础任务之一,可以细分为通用目标检测和特定场景的目标检测。由于深度学习近几年的迅猛发展,目标检测也收益于此,得到了巨大的进步。
目标检测的综述论文也不只是这一篇,那么这一篇相对于其他综述类论文有什么区别呢?
- 时间跨度大。
- 深入剖析关键技术。
- 综合分析模型加速方法。
目标检测的困难与挑战,困难与挑战不同任务差异大:
- 计算机视觉的共同挑战:不同视角,光照,类内差异。
- 目标检测本身:目标旋转,尺度变换(小目标),目标准确定位,密集/遮挡目标检测,加速方法等。
二、目标检测的二十年
过去的20年,以2014年为界,前为传统的目标检测阶段,后为基于深度学习的目标检测阶段。
2.1 目标检测的路径图
2.1.1 传统的目标检测器
· Viola Jones Detector
2001年,人脸检测,在700MHz奔腾3处理器上跑出实时性能。
基于滑窗:从图像所有可能的位置和尺度的图块中,寻找是否包含人脸。这个计算量是很大的,而VJ Detector提出了三种方法大大提升了检测速度:
- 图像整合(Integral image):提取HAAR特征,加速窗的过滤和卷积,使计算复杂度和窗尺寸无关。
- 特征选择(Feature selection):Adaboost算法选择特征集合中最有帮助的的小子集。
- 级联检测(Detection cascade):多阶段检测减少在背景滑窗上的检测时间。
· HOG Detector
方向梯度直方图(Histogram of Oriented Gradients, HOG)特征提取器在2005年提出,是一种尺度无关变换和形状语义方法的改进,对变换、大小、光章和其他非线性因素鲁棒,并且通过保持检测窗不变的基础上,缩放输入图像,来检测多尺度目标。
· 可变部件模型 DPM
DPM是VOC检测挑战07-09年三年的冠军,是当时的最好方法。
“divide and conquer”:训练被看成是一种目标合适分解方法的学习,测试是检测出的不同目标部件的集成。
一个经典的DPM由一个root-filter和许多part-filter组成,使用弱监督方法取代手动配置part-filters,并进而提出了Multi-Instance Learning,同时,现在非常流行的难例挖掘、边界框回归等也在当时提出。使用了一种“编译”检测器模型的方法达到了比级联更快的检测速度,且不损失精度。
2.1.2 基于CNN的两阶段检测器
2010-2012年,基于传统方法的目标检测进入瓶颈,而深度卷积神经网络给目标检测注入了新的动力。
· RCNN
RCNN的思想很简单:先用selective search抽取一系列目标的候选框,将每个候选框都缩放到固定尺寸送到ImageNet训练好的CNN模型中,抽取每个候选框对应的特征,最后使用线性SVM分类器来预测候选框中目标类别。
RCNN和传统方法相比取得了极大的进步,但是计算量太大,一张图会获得超过2000个候选框,并且每个候选框单独送入网络,导致整个模型非常慢,GPU上14s/image。
· SPPNet
2014年何恺明提出了Spatial Pyramid Pooling Networks,可以将不同候选框通过SPP layer产生固定尺寸的特征图,并且不需要缩放,这样每张图的所有候选框只要前向计算一次,避免了重复计算,使SPP比RCNN在不损失精度的前提下快了20倍。
同样,SPP仍然是多阶段的检测器,而且SPP只fine-tune全连接层而忽略之前的层。而这个问题在Fast RCNN得到了解决。
· Fast RCNN
RCNN的作者R. G在RCNN和SPP的基础上提出了Fast RCNN。Fast RCNN同时训练检测器和回归器,比RCNN快了200倍。
但是Fast RCNN的检测速度仍然受限于候选框的数量。
· Faster RCNN
2015年任少卿在微软研究院实习的时候,做出的一篇成果。Faster RCNN是第一个端到端的、近乎实时的深度学习检测器。其主要贡献是Region Proposal Network,RPN,使网络能够自己生成候选框。
尽管Faster RCNN突破了Fast RCNN的计算瓶颈,但是仍然有计算冗余。RFCN和Lighthead RCNN都对此作出了一些改进。
· FPN
2017年,Lin提出了Feature Pyramid Network, FPN,在Faster RCNN的基础上。在FPN之前,许多检测模型都只提取网络的最后一层特征图用于后续处理,尽管最后一层特征图有最丰富的语义信息,但是缺少位置信息。FPN从最高层特征图不断向上上采样融合,得到不同尺度的特征图。FPN的优点是多尺度的检测,并且直到如今也是主流的特征提取网络。
2.1.3 基于CNN的单阶段检测器
· YOLO
You Only Look Once, YOLO于2015年提出,是第一个单阶段的目标检测器。YOLO非常快,在较少精度损失的前提下甚至达到了155fps的速度。作者完全抛弃了“候选框+验证”的模式,而是采用了另一种方法:用单个神经网络处理整个图像。网络将图像分割成不同的region,并且同时预测边界框和对应的目标概率。并且在之后陆续提出了YOLO v2,v3,在保持高速度的前提下进一步提高了检测精度。
尽管YOLO速度很快,但是和两阶段的检测器相比,准确度仍然不足,尤其是对于小目标。后续的YOLO版本和SSD关注了这个问题。
· SSD
Single Shot MultiBox Detector, SSD是第二个单阶段的检测器。SSD的主要贡献是多尺度。
· RetinaNet
2017,RetinaNet提出,主要贡献是为解决训练样本不平衡而提出了focal loss,使单阶段的模型达到了双阶段模型的准确度。
2.2 目标检测的数据集和指标
数据集:
- Pascal VOC
· 分类、检测、语义分割、行为检测
· #images = 11k,#annotations = 27k, #classes = 20
· 2005-