第1章 双阶段检测
卷积神经网络(convolutional neural network,CNN)最早用于解决计算机视觉领域的分类任务,分类的目的是识别图片中物体的类别。在著名的计算机视觉竞赛ILSVRC(ImageNet Large Scale Visual Recognition Challenge,ImageNet大型视觉识别挑战赛)中,还有定位和检测两个任务。其中,定位任务不仅要识别出物体的具体类别,还要给出物体的具体位置。检测任务可以理解为多目标的定位任务,不仅要识别出图像中的多个物体,还要给出每个物体的具体位置。分类任务、定位任务和检测任务如图1.1所示。
图1.1 分类任务、定位任务和检测任务
目标检测对人类来说是非常简单的任务,人类凭借图像内容和日常经验通常可以快速给出精确的检测结果。但是这个任务对计算机来说是非常困难的,因为在计算机中,图像是使用RGB三维矩阵来表示的,计算机很难直接从矩阵中得出目标物体的位置和类别。传统的目标检测一般采用滑动窗口的方式,主要包括3步:
● 使用不同尺寸的滑动窗口,得到图的某一部分作为候选区域;
● 提取候选区域的视觉特征,例如行人检测常用的方向梯度直方图(histogram of oriented gradient,HOG)特征等;
● 使用分类器进行识别,常见的如支持向量机(support vector machine,SVM)分类器。
在区域卷积神经网络(region CNN,R-CNN)[1]出现之前,无论是传统方法,还是深度学习方法(如OverFeat等),都很难在目标检测方向取得令人满意的效果。2014年被提出的R-CNN则将PASCAL VOC 2007的检测精度大幅提升至58.5%,而之前的算法的检测精度从未超过40%。R-CNN是结合了CNN的骨干网络、选择性搜索(selective search)候选区域提取和SVM分类器的双阶段检测算法,即一个阶段用于候选区域提取,另一个阶段用于目标的识别和分类。R-CNN还是一个结合了传统策略、机器学习和深度学习的“杂交”模型。R-CNN对于检测精度的巨大提升开启了业界对R-CNN系列检测算法的火热研究,对这一方向做出卓越贡献的有Ross B. Girshick和何恺明等人。
[1] 参见Ross Girshick、Jeff Donahue、Trevor Darrell等人的论文“Rich feature hierarchies for accurate object detection and semantic segmentation”。
因为R-CNN需要生成长度固定的特征向量,它采用的策略是将输入图像缩放或裁剪到相同的尺寸。而SPP-Net [2]一文中指出这种缩放或者裁剪会导致输入数据丢失原本的语义信息,SPP-Net的提出便是为了解决这个问题。SPP-Net的核心模块是一个名为空间金字塔池化(spatial pyramid pooling,SPP)的结构,空间金字塔池化将不同尺度的特征图分成若干组大小相同的桶(bin),然后对每个大小相同的桶进行最大池化或者平均池化,便可以得到长度固定的特征向量。
[2] 参见Kaiming He、Xiangyu Zhang、Shaoqing Ren等人的论文“Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition”。
为了避免检测模型的漏检问题,通常需要用选择性搜索等方法提取大量的候选区域,然后将每个候选区域提供给分类器进行特征提取和分类。但是这些候选区域中存在大量的重复内容,针对这些候选区域的独立计算会产生大量的重复计算,严重影响检测算法的速度。Ross B. Girshick等人提出的Fast R-CNN[3]是在整幅输入图像上进行卷积操作,然后在输出层的特征图上提取候选区域对应的部分,从而实现参数共享。此外,Fast R-CNN使用多层感知机(multilayer perception, MLP)替代SVM进行分类,实现了检测模型的端到端训练。
[3] 参见Ross Girshick的论文“Fast R-CNN”。
Faster R-CNN[4]将候选区域的提取也交由深度学习去完成,实现了检测算法的“全深度学习化”,实现这个功能的便是Faster R-CNN最核心的区域候选网络(region proposal network,RPN)模块。RPN用于生成候选区域,因此它是一个只需要判断前景或者背景的二分类网络。RPN最重要的贡献是引入了锚点(anchor)来提升模型的收敛速度。锚点本质上是一个先验框,使模型预测框向着锚点收敛有助于降低模型学习的难度。
[4] 参见Shaoqing Ren、Kaiming He、Ross Girshick等人的论文“Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”。
目标检测和分割是一对密切相关的任务,何恺明等人将实例掩码任务加入Faster R-CNN,提出了可以同时检测和分割目标的Mask R-CNN[5]。分割任务要求的是像素级别的检测精度,而ROI池化或者空间金字塔池化会存在尺寸不匹配的问题。Mask R-CNN的一个重要模块是ROI对齐(ROI align)模块,它采用基于双线性插值的池化方法,不存在尺寸不匹配的问题,是能让掩码任务添加到Faster R-CNN中的最核心的模块。
[5] 参见Kaiming He、Georgi a Gkioxari、Piotr Dollar等人的论文“Mask R-CNN”。
目标检测的输出往往是标准矩形框,但是图像中的目标往往会有更丰富的形态。可变形卷积网络(deformable convolution network,DCN)[6][7]是一个提高模型学习复杂不变性能力的功能模块,由可变形卷积和可变形池化两个模块组成。可变形的实质是为卷积和池化操作学习一个偏移,这样卷积核和池化核便不再是一个形状固定的矩形。可变形模块可以嵌入任何检测或者分割网络,对于提升模型检测精度非常有效。
[6] 参见Jifeng Dai、Haozhi Qi、Yuwen Xiong等人的论文“Deformable Convolutional Networks”。
[7] 参见Xizhou Zhu、Han Hu、Stephen Lin等人的论文“Deformable Convnets v2: More Deformable, Better Results”。