ObjectDetectionSummary论文笔记

本篇论文对目标检测的发展历史进行了总结,时间跨度涵盖了上世纪90年代到2019年的最新研究进展,内容方面覆盖了目标检测方法和目标检测应用两大部分。

目录

1、简单介绍了目标检测及写这篇文章的目的和意义
2、过去二十多年目标检测技术的演变
3、目标检测技术在速度方面的演变
4、近期一些高级的目标检测技术
5、目标检测的应用

1、简单介绍了目标检测及写这篇文章的目的和意义

我们探讨目标检测技术,主要可以分为两大类:1、通用目标检测技术2、目标检测应用
对于第一点,我们主要是探索在一个统一的框架方法去下检测不同类型的目标,类似于人类的视觉识别。
第二点讨论在特定场景下的目标检测应用,例如行人检测、人脸识别、文本检测等等
当然,作者也强调了此篇文章与其他目标检测综述的不同之处。
例如:1)通过查阅400多篇相关文献,时间跨越20世纪90年代至今,比较全面的回顾目标检测技术的演变过程;
2)比较深入的讨论了最近一些state of the arts方法的关键技术;
3)全面分析了检测速度的问题

2、过去二十多年目标检测技术的演变

从发展历史上看,目标检测的发展主要分两个大阶段:
1)传统检测方法(2014年之前);
2)基于深度学习的检测方法(2014年之后)

传统检测方法

把时钟拨回到20年前,目标检测方法还都是基于手动特征,人们必须设计复杂的特征表达方式并且常常需要考虑极其有限的计算资源。
几个代表性的方法是:
1)Viola Jones Detectors(VJ Detector):18年前P.Viola和M.Jones提出了无约束的实时人脸检测方法,与当时的检测算法相比,在达到相似准确率的情况下,速度提升了近百倍,VJ Detetor 使用了
当时主流的滑动窗口方法去尽可能的捕捉不同位置和尺度的人脸,不过由于当时的算力有限,VJ Detetor引入了三项技术来加速:积分图、新特征选择器、检测瀑布流
2)HOG(Histogram of Oriented Gradients) Detector:方向梯度直方图,作为尺度不变特征变换的重要改进,平衡了特征不变和非线性变换
3)Deformable Part-based Model(DPM):DPM方法赢得了07、08、09三年的VOC大赛,算是传统方法的顶峰,虽然有了深度学习方法之后,DPM用的越来越少,但是此方法为以后的研究提供了许多思路,例如混合模型、困难负样本挖掘、框回归等等技术。

基于深度学习的两阶段检测方法

从模型演变的角度看,两阶段检测方法有:RCNN、SPPNet、Fast RCNN 、Faster RCNN、FPN等
1、RCNN:首先通过selective search方法提取候选框,然后缩放到标准尺寸输入CNN模型做特征提取,最后通过SVM分类器对每个候选框进行类别预测,虽然RCNN模型在当时取得了很不错的效果,但是它依然存在大量的冗余计算等缺点。
2、SPPNet:2014年何凯明等提出了Spatial Pyramid Pooling Networks(SPPNet),这个网络通过引入SPP层可以使任意大小的图像或区域生成固定尺寸的特征表达,从而不需要固定大小的输入,同时由于SPP层的引入,也避免了卷积特征的重复计算,其速度比RCNN快了20倍以上。但是SPPNet仍然是多阶段的且训练的时候只优化全连接层,而对于全连接层之前的层并没有做处理。
3、Fast RCNN:2015年 Fast RCNN被提出,它能够同时训练检测器和回归框,它的效果极大的超越了RCNN和SPPNet,尽管Fast RCNN成功的整合了RCNN和SPPNet的优点,但是对于检测Proposal的方法,依然是很耗时的。
4、Faster RCNN:在Fast RCNN之后,很快又提出了Faster RCNN,它是第一个端到端且接近实时的检测方法,它的一个重要贡献在于提出了Region Proposal Network(RPN)使得检测Proposal的过程变得非常迅速,同时把前人提出的一些方法(例如:检测proposal、特征提取、框回归等)整合成一个端到端的训练过程,尽管它解决了Fast RCNN速度上的瓶颈,但是在随后的检测阶段依然存在着冗余的计算。
5、Feature Pyramid Network:在之前的检测结构中,基本都是使用网络的最后层作为特征来做检测,虽然越深的网络对于类别识别比较有帮助,但是对于目标定位却是不利的,因此FPN结构的提出了,它在CNN前向传播的过程中,在不同的尺度上构建了高阶语义特征,因此FPN结构对于尺度变化大的目标检测效果提升明显。

基于深度学习的一阶段检测方法

两阶段的检测方法由于需要Proposal detection步骤,会比较消耗时间;因此一阶段检测方法被提出,典型的方法有:YOLO、SSD、RetinaNet等
1、YOLO:You Only Lool Once,见名知意它的思想是把Proposal检测部分和识别放在一起来做:通过对整张图像应用一个简单的网络,然后划分不同的区域,对于每个区域同步预测Bounding Box和概率,YOLO之后还有V2和V3版本,尽管在检测速度上非常快,但是相比两阶段模型,它损失了目标定位的准确率,对于小目标来说尤其如此。
2、SSD:Single Shot MultiBox Detector,它是第二个一阶段检测方法,由于引入了多参照和多分辨率技术,它很大的提升了一阶段方法的准确性。
3、RetinaNet: 此方法的作者认为一阶段模型的准确性落后于两阶段模型很重要的原因在于前景背景样本的不平衡,因此通过修改loss function来加强对于难区分样本的训练,新的loss function名为 focal loss,此方法可以让一阶段检测方法达到两阶段方法的准确性,同时不损失速度上的优势。

数据集和评测指标

数据集

对于计算机视觉任务来说,构建一个大型准确的数据集是十分重要的,在目标检测领域过去十年出现了许多数据集,经典的有PASCAL VOC(VOC2007、VOC2012)、ImageNet(ILSVRC 2014)、MS-COCO等等

评测指标

1、分类:Average Precision(AP&MAP),早期的计算方式是先绘制P-R曲线,这个P-R曲线的横坐标recall值为0、0.1、0.2…0.9、1一共11个点,纵坐标为recall大于每个横坐标值时的最大精准率,绘制出P-R曲线,然后取这11点的精确率平均值作为AP值,MAP是指在每个类别下分别求AP,然后再就平均。后来绘制P-R曲线的方法有所改变:横坐标的recall值分别为0、1/m、2/m…(m-1)/m、1,纵坐标为recall大于每个横坐标时的最大精准率。
2、定位:IOU(Intersection over Union):两个矩形的交集除以两个矩形的并集
3、结合IOU的AP:适应不同IOU阈值的AP指标

目标检测重要技术的演变

检测思路演变

1、早期的目标检测思路主要通过检测目标的各部分构成、形状、边缘等等来实现的,也有通过各个构成部分的相似度来做检测的。在这之后,机器学习的方法开始慢慢发展:1998年之前的统计模型、1998年-2005年的小波特征表示、2005年-2012年的基于梯度的表示。
2、基于CNN的目标检测可以追述到20世纪90年代,由LeCun等人提出

多尺度检测技术的演变

1、特征金字塔+滑动窗口(2014之前):在2004-2014年之间主流的目标检测都是采用此类方法,包括HOG、DPM、Overfeat 等等,由于一些算法采用了固定长款比检测框,因此通过组合不同长宽比的方法构建混合模型也是当时的热门方法
2、目标proposals的检测(2010-2015):proposals的目的是选出目标候选框而暂时不管属于哪一个类别,这可以避免对整幅图像进行滑动窗口搜索。proposal检测方法需要从3个方面去构建:1)高召回、2)定位准确、3)满足1和2的基础之上提高精准率和时间效率;proposals的检测方法大致可以分为3类,1)分割类方法、2)窗口打分、3)基于神经网络的方法
3、深度回归(2013-2016),对于回归框的定位问题,可以使用深度神经网络直接预测框的坐标,此类方法的优点是简单易实现,缺点是定位不是太精准特别是对于小目标
4、多参照多分辨率的检测(2015之后),多参照检测是一个比较流行的多尺度检测方法,它通过预定义一系列不同大小和长宽比的矩形框来定位目标,通常是常用交叉熵损失函数来做二分类优化,用L1/L2的回归损失来做定位优化。近几年比较流行的方法还有在神经网络不同层里做不同尺度目标的检测,如FPN等等。

边界框回归技术的演变

1、Without BB regression(-2008),早期的检测技术主要使用滑动窗口方法
2、From BB to BB(2008-2013),这个时期的Bounding Box技术主要是用来做某个功能块的后处理模块
3、From feature to BB,在Faster RCNN之后,BB regression不再只是作为后处理模块的一部分,而是被整合进了端到端的训练检测流程中

上下文背景挖掘技术的演变

1、目标常常伴随着一些典型的背景,因此如果能够有效挖掘背景信息对于目标的检测非常的有帮助,此类技术大致可以分为3类:1)结合局部信息,例如人脸的轮廓信息等、2)结合全局信息,例如整幅图片的元素统计信息等等、3)信息交互,考虑独立目标之间的关系或者目标和场景的依赖性

非极大值抑制技术的演变

1、Greedy selection:最早但是最流行的一个方法,即对所有候选框按照分数进行排序,然后先选定分数高的作为基准,依次排除分数更低的且与基准框重合度大于阈值的候选框,但是此方法有几点不足:1)分数最高的并不一定是最合适的、2)可能会抑制邻近的其他目标、3)不会抑制假阳样本???
2、BB aggregation,这是一类通过合并和聚合多个重合的候选框到一个最终候选框的方法,例如VJ detector和Overfeat
3、Learning to NMS,此类方法重新对候选框打分并把NMS作为端到端训练的一部分,是一类比较有潜力的研究方向

困难负样本挖掘技术的演变

在目标检测的训练当中有一类问题特别的重要,那就是样本不平衡问题,例如在滑动窗口类的方法中,背景和目标的比例可能达到$ 10^4$-$ 10^5$,因此,Hard negative mining(HNM)的目标是消除样本不平衡问题。
1、Bootstrap,这类技术首先使用一小部分的背景做负样本,然后在训练过程中慢慢的把分类错误的背景样本加入,这样控制了负样本的数量同时也有效的学习到了复杂的背景
2、基于深度学习的HNM,bootstrap技术在2014-2016年间被短暂的抛弃,取而带之的是对正负样本进行加权来平衡,但也不能完全解决样本不平衡问题,因此2016年之后Boostrap方法被重新应用在深度学习方法中:对损失值大的样本进行反向传播。还有一类方法是通过修改损失函数达到重点关注错误样本的目的

2、关于检测速度的主题

关于检测速度的技术,可以分为3个级别的改进:1)检测传播的加速、2)检测引擎的加速、3)数字计算的加速
如下图所示:logo

特征图的共享计算

滑动窗口的位置(邻近重叠窗口)和尺度(邻近尺寸的特征关联???)存在大量的冗余计算
1、空间计算冗余加速
减少空间计算冗余一个常用的方法是使用共享的特征图,即在滑动窗口之前对整幅图像进行特征提取生成特征图,但是这类方法有个缺点就是特征图的分辨率取决于每个单元的大小,处于两个单元之间的小目标会被忽略,后来出现的特征金字塔可以解决这类问题
2、尺度计算冗余加速
可以通过采用测量特征图来减少因为尺度问题导致的冗余计算问题,但是这类方法会导致模糊的影响???
通过构建金字塔检测器可以避免尺度计算冗余

级联检测

级联检测的思想是先使用简单的方式过滤大部分简单的背景,然后再使用复杂的方法去检测复杂的目标,在深度学习方法中,特别是大场景检测小目标中是比较有效的,还有就是对于困难样本分类和定位的准确率方面都是有所提升

网络剪枝和网络量化

网络剪枝和网络量化是两类常见的加速方法,前者是对网络结构或者权重数量进行优化,后者是在代码层面对激活或权重的计算优化,例如使用二进制操作计算浮点数

网络进化

通过压缩大型网络至小型网络来加速,使用大型网络来构建小型网络的训练从而是小型网络加速???

轻量的网络设计

设计轻量级的网络结构也是加速检测的一类方法,”增加层数减少通道数”是一个常用的设计思路,其他还有一些方法,例如:
1)因子分解卷积,一种是把大的卷积核分解为若干个小卷积核,如把77的卷积核分解为3个33的卷积核,或者kk的卷积核分解为k1和1*k的卷积核;另一种是把一组多通道分解为多组少通道的卷积???
2)分组卷积:通过把通道数分成多组来减少参数,理论上如果分成m组,时间复杂度会降为1/m
3)分割深度卷积:可以视为特殊情况的分组卷积,即通道数等于分组数
4)瓶颈设计 Bottle Neck:近些年在轻量级网络设计中使用得较多
5)神经结构搜索(NAS):

数值计算加速

基于积分图的加速

积分图是一种重要的图像处理方法,它能够快速的得到图像的局部信息,例如色彩直方图、梯度直方图等等,2009年的时候出现了名为Integral Channel Features(ICF)的方法在行人检测任务上产生了不错的效果

频率域上的加速

卷积操作是在目标检测中很重要的数值操作,在大卷积操作中傅里叶变换是一类很好的加速方法,Fast Fourier Transform(FFT)和Inverse Fast Fourier Transfrom(IFFT)已经成为加速CNN模型的一类重要方法。

向量量化

这是一种经典的信号处理方法,目标是使用小规模的原始向量估计大规模的向量分布

优化排名近似

全卷积操作的计算量是非常巨大并且耗时的,这次过程其实是两个矩阵相乘,采用一些近似算法,把矩阵分解可以起到减少计算量的目的,例如SVD

近三年的最新热门思路

更好的检测”引擎”

主干网络作为检测模型的”引擎”,因此至关重要,下面介绍一些经典的主干网络
1、AlexNet:作为最早的CNN深度学习模型,AlexNet是一个8层的神经网络。
2、VGG:2014年提出的VGG网络一般有16-19层,使用了较小的3*3卷积核。
3、GoogLeNet:Google提出的Inception类方法,Inception主要提出了因式分解卷积和批标准化
4、ResNet:Residual Networks残差网络在2015年被提出,当网络深到一定程度,网络的性能会随着深度增加而下降,为什么会下降?参考这篇回答
ResNet可以缓解因为网络太深而造成的退化问题。
5、DenseNet:相当于ResNet的升级版,ResNet的跳接只连接下面一层,而DenseNet的跳接会连接后面的所有层
6、SENet:Squeeze and Excitation Networks 这个网络结构主要的贡献在于整合了Global Pooling和学习特征通道的重要性???
当然,近期又出现了最新的网络结构,如STDN、DSOD、ResNeXt等等

更好的特征

高质量的特征表达对于目标检测来说非常关键,提高特征表达质量有两类方法:1)特征混合、2)高分辨率特征

特征混合为什么重要?

invariance(不变性)和equivariance(同变性)是特征表示的两个重要性质,分类任务侧重于学习高阶特征因此依赖invariance,目标定位任务依赖位置和尺度,因此equivariance对它很重要。网络加深可以让特征保持不变性,但是会损失同变性,因此融合深层和浅层的特征可以提升invariance和equivariance。
1、流处理
特征混合有分自低向上和自上而下的方法,由于不同层可能具有不同的空间和通道数,因此需要通过修改通道数、上下采样修改分辨率等方式实现。
2、元素操作
特征混合的操作其实可以归纳为求和、求积、连接等操作

高分辨率特征

输入大小和特征分辨率是两个重要特性,在特征图里越低的分辨率意味着越难以检测小物体,一种避免的方式是去掉池化层或者减小下采样率,但是这有可能导致对大目标的检测困难。膨胀卷积的思路是增大卷积核的大小但是参数数量保持不变,这样可以提升精度的同时保持参数不变

摒弃滑动窗口

1、子区域搜索
一类是从初始的网格开始按照既定的路线检测最终收敛到设定的矩形框,另外一类是迭代的更新bounding box的四周
2、使用关键点定位检测
使用关键点定位矩形框的左上角和右下角,近期出现了一个使用热力图来预测四周的方法,这个方法的好处是不用设计多尺度的anchor box

定位精度的提升

1、bounding box的重调,把重调整作为后处理模块,但是这样似乎不能保证定位的单调性,即每次定位都一样
2、构建新的定位损失函数,把定位问题看做坐标的回归问题是常用的方法,但是有两个缺点,1是回归的损失函数不符合最终的定位评估,例如低的损失值不一定能够保证定位的准确;2是由于NMS等存在,定位不够confidence(信心???),有学者提出了IOU-guided NMS方法,还有学习提出在概率推断框架下提升定位精度

通过分割来优化

1、为什么分割能够提升检测效果?1分割能够对类型识别有帮助,2分割能够对定位精度有帮助,3分割能够让上下文背景辅助检测
2、如何是分割提升检测效果?1把分割作为固定的特征提取模块整合进检测框架里去;2构建多任务损失函数

关于旋转和尺寸变换的鲁棒性

目标旋转在目标检测中很常见,常用的做法是做数据增加或者对每个方向的目标单独训练模型,除此之外,还有一些新的方法:
1、旋转不变的损失函数
2、旋转校准,把目标做几何转换
3、旋转ROI池化,两阶段检测中需要使用ROI Pooling操作使特征保持一致传入后续的模块,通过把笛卡尔坐标转换为极坐标可以使模型对旋转鲁棒

尺度变换
1、适应尺度的训练,当前大部分的模型都是使用固定的尺寸配置并且对于所有的尺寸都进行反向传播操作,这容易造成尺度不平衡问题,建立图像金字塔可能一定程度上减缓这个问题,但是不能解决根本。Scale Normalization for Image Pyramids(SNIP)方法建立图像金字塔并且选择性的进行反向传播,这样的处理也有助于解决尺度不平衡问题
2、适应尺度的检测,使用固定配置检测时容易忽略一些意外的尺寸,特别是对小目标来说。adaptive zoom-in技术有助于提升小目标的检测效果;另一类方法是先预测图像内目标的尺度分布,然后根据分布相应的缩放图像。

从随机开始训练

我们常常使用预训练模型做初始化然后再通过特殊样本优化模型,但是这种做法真的有效吗?它至少有两个缺点:1)图像分类和目标检测任务本身是有差异的,包括损失函数和尺度类别分布等等;2)涉及领域不同,预训练模型如ImageNet使用的是RGB通道的图像,而目标检测可能会用在RGB-D或者3D医疗影像上。

对抗训练方法

近年来也有学者使用GAN来进行训练检测模型

弱监督目标检测

由于大部分目标检测模型需要有标注的图像,但是标注数据比较耗时,因此弱监督学习Weakly Supervised Object Detection(WSOD)也是许多学者研究的领域,Multi-instance learning 被用于弱监督学习,它使用的数据是图像级的标注。
CAM是在CNN可视化方面的方法,也可以被用来做弱监督学习

目标检测应用

当前目标检测应用主要有以下几类:
1、行人检测 2、人脸检测 3、文本检测 4、交通信号灯的检测 5、远程传感目标检测