文章主要介绍基于神经网络的object detection方法,包括single stage detectors和two stage detectors。目标在于了解这个领域内的发展情况,并没有对某个网络做特别详细的介绍。
计算机视觉可大致分为:
物体检测 (Object Detection) 需要回答两个问题:(1)物体在图片的什么位置?(2)物体属于什么类别?
假设有M张图片 x 1 , x 2 , x 3 , . . . , x M x_1, x_2, x_3, ..., x_M x1,x2,x3,...,xM,对于第 i 张图片 x i x_i xi,假设有 N i N_i Ni个物体,属于 K 个类(categories/classes)。
y i = { ( k 1 i , p 1 i ) , ( k 2 i , p 2 i ) , ( k 3 i , p 3 i ) , . . . , ( k N i i , p N i i ) } y_i=\{(k_1^i,p_1^i), (k_2^i,p_2^i), (k_3^i,p_3^i), ..., (k_{N_i}^i,p_{N_i}^i)\} yi={(k1i,p1i),(k2i,p2i),(k3i,p3i),...,(kNii,pNii)}
这里 k j i k_j^i kji表示类, p j i p_j^i pji表示第 i 张图片中,第 j 个物体的标签。
损失函数表示为:
l ( x , θ ) = 1 M ∑ i = 1 M l ( y p r e d i , x i , y i ; θ ) + λ 2 ∣ ∣ θ ∣ ∣ 2 2 l(x, \theta)=\frac{1}{M}\sum_{i=1}^Ml(y_{pred}^i, x_i, y_i;\theta)+\frac{\lambda}{2}||\theta||_2^2 l(x,θ)=M1i=1∑Ml(ypredi,xi,yi;θ)+2λ∣∣θ∣∣22
为了评价定位效果,使用参数IoU(intersection over union):
I o U ( P p r e d , p g r o u n d t r u t h ) = A r e a ( p p r e d ∩ p g r o u n d t r u t h ) A r e a ( p p r e d ∪ p g r o u n d t r u t h ) IoU(P_{pred}, p_{groundtruth})=\frac{Area(p_{pred}\cap p_{groundtruth})}{Area(p_{pred}\cup p_{groundtruth})} IoU(Ppred,pgroundtruth)=Area(ppred∪pgroundtruth)Area(ppred∩pgroundtruth)
其中 p g r o u n d t r u t h p_{groundtruth} pgroundtruth表示 ground truth bounding box。为了评价预测的Bbox是否包含了物体,使用 IoU 阈值参数,一般IoU threshold=0.5,也就是IoU>0.5判定为预测中包含物体,IoU<0.5判定为预测错误。
为了评价类别检测效果,引入mAP(mean average precision)参数。
另外,除了检测准确度,检测速度也是评价物体检测的重要指标。例如FPS(frames per second),表示每秒处理的图片数量。一个实时的detector每秒能处理20张图片。
传统的物体检测流程包括三步:
传统的物体检测致力于合理设计feature descriptors来获得感兴趣区ROI(region of interest)。这方面在PASCAL VOC 数据集上有进步1 2
但是,只用组合模型(ensemble models)和轻参数取得的进展有限。原因如下:
随着深度神经网络的出现和发展,能够自动产生多层次特征,也表现出更好的分辨力。深度神经网络对比传统方法的优点如下:
近来的深度学习目标检测能大体分为两类:
single stage detectors 直接在图片提取特征图位置标记分类结果,没有region classification步骤。在two stage detectors中,会在提取特征向量的位置,使用proposal generator提取一系列不精确的region proposals。
也就是说,single stage detectors将整张图片作为阳性目标(positive target),然后对每个感兴趣区(不管是目标物体还是单纯的背景)分类。而two stage detectors在阶段一产生一个proposals集合,在阶段二中从这些proposals中提取特征向量,然后使用深度卷积神经网络进行编码,然后进行类别预测。
two stage detectors比single stage detectors 精度高,但后者时间效率高,更适合实时预测。
分为single stage 和tow stage介绍
简单介绍各种single stage object detector
这是最早提出的single stage object detectors之一。已知:目标检测的任务可以看做多部分分类问题。over-feat通过将完全连接层看做1x1卷积,实现向网络输入任意size的图片,从而将多个分类器(classifiers)变成一个检测器(detector)。一旦发现物体,就用bounding box regressors将检测到的区域细化。检测不同尺度的物体,则重组输入图片,变成多幅图像喂到over-feat网络中。最后所有尺寸的预测结果整合到一起。
over-feat的速度快,但是优化训练classifier和regressor很难。
2015年R.joseph提出,是一个实时的detector
YOLO将object detection看做一个回归问题,将整幅图像分成固定的几个矩阵单元,每个单元被视为一个proposal,用于目标检测。这个网络超级快,在VOC2007数据集上,速度可达155fps(frames per second),检测精度52.7%。加强版本速度45fps,在VOC2007mAP为63.4%,在VOC2012精度为57.9%。
后续有YOLOv2,YOLOv3有更好的精度和更快的速度。
YOLO对小物体和拥挤物体的识别很差。
为了解决YOLO的问题,lin2016年提出SSD(single shot multibox detector)。SSD最大的贡献是使用了multi-reference和multi-resolution极大地提升了对小物体的检测精度。
和YOLO类似,SSD也将输入图像划分为矩阵单元,但是并不像YOLO那样直接从划分的单元里面识别物体,而是用一系列anchors去细化bounding boxes。这些anchors包含不同的scale、size、长宽比。SSD和遗忘的single stage detector最大的区别是:SSD在不同的层上做detection,而以往的模型只在深层网络中做detection。
SSD在VOC2007上mAP达76.8%,在VOC2012上达74.9%。
多阶段模型比单阶段模型预测精度高的一个原因:前景-背景分类失衡。为了解决这个问题,2017年lin提出Retina-net。在这个网络中提出一种全新的loss函数:focal loss——抑制阴性样本的梯度,而不是直接放弃。focal loss在不牺牲速度的前提下,提升了single stage detector的精度,
后续的single stage object detectors使用为特定训练目标人为设计的anchor boxes。然后出现了一系列不需要anchor boxes的网络,核心思想是:找到bounding boxes中的重要定位,而不是让物体去fittinganchor。根据这一思想,提出Corner-net,结构如下:
在corner-net中,物体被看做是一对corner,在特征图中每个可能的位置上,预测:
将detectors分为两个阶段:
然后介绍一些two stage object detector。
2014年Girshick提出。下图是一个简单的R-CNN detector:
它分为三个阶段:
R-CNN对每张输入图片使用selective search,产生大概2000个proposals,然后取出明显是背景的区域。每个proposals被corp成固定的size,然后输入一个在ImageNet上训练的深度神经网络,产生特征向量(4096-dimensional)。最后使用线性SVM分类器预测物体类别。此外,最后的全连接层被重新初始化来进行detection。
虽然R-CNN检测精度很优秀,但是大量时间花在高重叠区域的多余特征计算上,导致其在GPU上的计算非常慢,14fps。
SPP-net中引入spatial pyramid pooling layer,使得CNN能够产生一个预计长度的特征向量,而不用rescale原图。SPP将feature map 分为 M x M 的矩阵(M可取多个值),在每个矩阵单元(cell)上生成一个特征向量。然后,从矩阵的每个单元中获得的所有特征向量结合在一起,作为区域支持向量机分类器(SVM)和边界框回归器(bounding box regressors)的输入。
SPP-net在不降低精度的前提下比R-CNN快20倍。在VOC2007上mAP(mean average precision)是59.2%。但仍存在缺陷:首先,训练场景本质上是多相的(multiphase),其次,检测任务主要依赖于其完全连通的层,而忽略了之前的所有层。
2015年提出,属于多任务学习检测器(multitask learning detector),也能像SPP-net一样提取预定长度的特征向量。与SPP-net的区别是:Fast R-CNN中,使用ROI池化层提取与区域相关的特征。
ROI池化是SPP的一个特例,只用一个尺度划分proposal为预先确定的分区数,并将错误信号反向传播给卷积核。提取到的特征作为输入喂到一组全连接层,然后是一个分类层和一个回归层,分别生成C + 1类的softmax概率和左上角和右下角坐标,分别重新定义边界框。
Fast R-CNN结合了R-CNN和SPP-net的优点,但是仍然时间慢。
之前proposals的产生依赖于卷积的方法,比如selective search、edge box,它利用了简单的视觉信号,很难用数据驱动的方法来学习。2015年提出Fast R-CNN后很快又提出了Faster R-CNN。
Faster R-CNN利用了一个完全卷积层,称为区域建议网络RPN(region proposal network),它可以处理任意大小的图像,并在每个特征地图位置上创建一组proposal。然后将得到的特征向量送入分类层,再由边界框回归层进行目标定位,最终实现目标检测。
Faster R-CNN可看做第一个end-to-end、而且接近实时的深度学习detector,在VOC2007上mAP为73.2%,在VOC2012上是70.4%。但是尽管Faster R-CNN很优秀,仍然在detection阶段有计算冗余。
Faster R-CNN的问题是,它计算任意输入图像的feature map,并从中得到基于区域的特征向量,通过图像的不同区域共享特征提取计算。这样势必会产生很大的计算量,因为每个输入图片都可能有数百个proposal。为了克服这个问题,Dai提出了基于全卷积的区域建议网络R-FCN(region based fully convolutional networks),这个网络在区域分类的步骤中分担总计算消耗。
R-FCN创建了一个位置敏感得分地图(location sensitive score map),该地图将与不同类别相关的比较位置信息编码,并利用位置敏感的ROI池化层,通过对目标区域的每个比较位置进行编码来获得空间敏感的区域特征。
在卷积神经网络中,深层网络提取的特征可识别性强(semantically strong)但位置信息弱(spatially weak),反之,浅层网络提取的特征可识别性弱但位置信息强。特征金字塔(FPN)将浅层网络特征与深层特征结合,易于识别不同尺寸物体。
FPN现在已经是最近的detector必备的结构了。
Mask R-CNN是Faster R-CNN的一个拓展,用于实例分割(instance segmentation),从proposals中同时预测bounding box和用于分割的mask,而且达到了最先进的水准
图像中不同的目标具有不同的外观特征和几何信息,需要相互作用。考虑这点,Relation Networks3 提出了一种改进的注意网络——对象关系模块,该模块插入到两个完全连接层之前,提取出更优的特征,以便对目标对象进行正确的分类和定位。替代NMS后处理步骤,从而提高整体检测精度。
理解Deformable Convolutional Networks
在这些卷积或者ROI采样层上,添加了位移变量,这个变量根据数据的情况学习,偏移后,相当于卷积核每个方块可伸缩的变化,从而改变了感受野的范围,感受野成了一个多边形。
谷歌出品,NAS-FPN由自下而上和自上而下的关系组成,以多种不同尺度的特征融合在一起。
【论文笔记】:NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
Mark Everingham, Luc Van Gool, Christopher K.I. Williams, John Winn, Andrew Zisserman, The PASCAL visual object classes challenge 2007
(VOC2007) results, 2007. ↩︎
Mark Everingham, Luc Van Gool, Christopher KI Williams, John Winn, Andrew Zisserman, The pascal visual object classes (voc) challenge, Int.
J. Comput. Vis. 88 (2) (2010) 303–338. ↩︎
Han Hu, Jiayuan Gu, Zheng Zhang, Jifeng Dai, Yichen Wei, Relation networks for object detection, in: Proceedings of the IEEE Conference
on Computer Vision and Pattern Recognition, 2018, pp. 3588–3597. ↩︎