本文是目标检测方向的第一篇,目标检测是当前个人最熟悉的任务之一,这是很久之前在知乎专栏写的文章,曾经被多个公众号转载,但是因为一些客观原因,无意中注销了知乎。在分享目标检测相关的总结之前,先介绍一下目标检测任务很有必要,而了解一个任务最简单的方式就是通过综述,所以重新展示一下该篇。
这是一篇综述的阅读笔记:《Object Detection in 20 Years: A Survey》,主要介绍了目标检测的发展历程、评测数据集、评价指标、检测系统的基本构件、加速技术,以及最新最先进的检测方法。本文还综述了行人检测、人脸检测、文本检测等重要的检测应用,并对其面临的挑战以及近年来的技术进步进行了深入分析。
关于目标检测的细节,后续会多篇文章进行详细介绍。
目标检测解决什么问题?
目标检测解决的是计算机视觉任务的基本问题:即What objects are where?图像中有什么目标,在哪里?
目标检测面临哪些挑战?
除了计算机视觉任务都存在的不同视角、不同光照条件以及类内差异等之外,还存在目标旋转和尺度变化(如小目标),如何精确的目标定位,密集和遮挡条件下的目标检测,以及如何加快检测速度等。
以2014年为界,目标检测分为传统目标检测时期和基于深度学习的目标检测时期
基本依靠手工特征
Viola Jones检测器首次实现人脸实时监测,VJ检测器使用简单直接的检测方式---滑动窗口,但是当时算力有限,为了达到实时使用了三项技术:
(1)积分图
积分图是一种计算方法,可以加速框过滤或卷积过程。在VJ检测器中使用Haar小波作为图像的特征表示。积分图像使得VJ检测器中每个窗口的计算复杂度与其窗口大小无关。
(2)特征选择
没有使用手动选择的Haar基过滤器,而是使用Adaboost算法从一组巨大的随机特征集合(约180k维)中选择一组对人脸检测最有帮助的特征。
(3)检测级联
VJ 检测器引入了多级检测范式(又称“检测级联”),通过减少对背景窗口的计算,而更多地对人脸目标进行计算,从而减少了计算开销。
HOG(Histogram of Oriented Gradients),即方向梯度直方图特征描述器,主要用于行人检测,也可以用于检测其他对象。为了平衡特征不变性( feature invariance,包括平移、尺度、光照等)和非线性(区分不同目标类别),将HOG描述符设计为在密集的均匀间隔单元网格上计算,并使用重叠局部对比度归一化(local contrast normalization)来提高精度。为了检测不同大小的对象,HOG检测器在保持检测窗口大小不变的情况下,对输入图像进行多次rescale。
传统目标检测方法的巅峰之作,VOC07、08、09检测连续夺冠。DPM最初是HOG检测器的扩展,随后由Girshick大佬作了一系列改进。DPM遵循“分而治之”的检测思想,训练可以简单地看作是学习分解对象的恰当方式,推理可以看作是对目标不同部分检测的集合。
一个典型的DPM检测器由一个root-filter和一些part-filters组成。基于DPM的弱监督学习方法不需要手工指定part filters的配置(如尺寸和位置),而是将part-filters的所有配置作为潜变量自动学习。
Girshick将此过程进一步表示为Multi-Instance learning的一个特例,并应用了“hard negative mining”、“bounding box regression”和“context priming”等重要技术来提高检测精度。为了加快检测速度,Girshick开发了一种技术,将检测模型“编译”成一个更快的模型,该模型实现了级联结构,在不牺牲任何精度的情况下实现了超过10倍的加速(什么这么神奇,其实我也想知道,但是暂时没时间看了)。
在深度学习时代,目标检测可以分为两类:two-stage和one-stage,前者是由粗到精的过程,而后者则一步到位。
Regions with CNN features
背景
传统方法遭遇瓶颈,AlexNet带来曙光
过程
(1)使用选择性搜索(selective search)获取目标候选框(proposal)
(2)每个proposal rescale到固定尺寸,输入CNN来提取特征
(3)线性SVM分类器用于预测每个区域内目标的存在,并识别其类别
缺点
对大量重叠proposal的冗余特征计算(一张图像超过2000个框)导致检测速度极慢(使用GPU每张图像14秒)。
Spatial Pyramid Pooling Networks
背景
RCNN速度慢,且需要固定尺寸的输入(比如AlexNet的224x224)
贡献
引入了空间金字塔池层(Spatial Pyramid Pooling),它使CNN能够生成固定长度的表示,而不需要重新调整图像/感兴趣区域的大小。
利用SPPNet进行目标检测时,只需要对整个图像进行一次计算得到特征图,就可以生成任意区域的定长表示来训练检测器,避免了卷积特征的重复计算。
SPPNet的速度是R-CNN的20多倍,并且没有牺牲任何检测精度(VOC07 mAP=59.2%)。
缺点
(1)训练仍然是多阶段的
(2)SPPNet只对其全连接层进行微调,而忽略了之前的所有层。
RCNN和SPPNet的结合
缺点
选择性搜索速度较慢,可否替换为CNN
贡献
Region Proposal Network (RPN),几乎没有消耗的生成proposal
从R-CNN到Faster RCNN,一个目标检测系统的大部分独立模块,如proposal生成、特征提取、边界框回归等,都逐渐集成到一个统一的端到端学习框架中。
解决Faster RCNN的计算冗余
背景
在FPN之前的大部分检测模型,都是使用单层Top Layer进行检测(当然也有SSD)
虽然CNN较深层的特征有利于分类,但不利于对象的定位。
贡献
为此,在FPN中构建了一种具有横向连接的自顶向下的结构,用于在所有尺度上获取高层语义。由于CNN通过前向传播自然形成了一个特征金字塔,所以FPN在检测具有多种尺度的目标时显示出了很大的进步。
深度学习时代第一个One-stage检测器,最大的特点就是速度快
完全摒弃了之前proposal+refine的思路,对整张图片应用单个神经网络
该网络将图像分割成多个区域,同时预测每个区域的边界框和置信度。
缺点
相比two-stage检测器,定位精度差,尤其是对于小目标,随后的v2、v3版本及SSD都在尝试解决这个问题
贡献
与之前检测器的主要区别在于,SSD在网络的不同层检测不同尺度的对象,而后者仅在其顶层进行检测。
背景
单阶段检测器效果比两阶段检测器差,本文认为主要问题在于单阶段检测器训练时正负样本的极度不平衡。
贡献
提出Focal Loss,通过对标准交叉熵损失的重构,使检测器在训练过程中更加关注难分类的样本,解决正负样本不平衡问题。
The PASCAL Visual Object Classes (VOC) Challenges (from 2005 to 2012)
20类:
Person: person;
Animal: bird, cat, cow, dog, horse, sheep;
Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train;
Indoor: bottle, chair, dining table, potted plant, sofa, tv monitor
The ImageNet Large Scale Visual Recognition Challenge(ILSVRC,2010~2017)
200类
2015开始
80类
单图目标数量多,目标密集,且小目标多
包含实例分割标注
2018
Open Im- ages Detection (OID) challenge
600类
包含两个任务:
(1)标准目标检测
(2)视觉关系检测,用于检测特定关系中成对的目标
这部分将在后续文章介绍:Detection基础之(一)IoU
这部分将在后续文章介绍:Detection基础之(二)mAP