Object Detection

简介

传统目标检测流程:

  1. 区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)
  2. 特征提取(SIFT、HOG等;形态多样性、光照变化多样性、背景多样性使得特征鲁棒性差)
  3. 分类器分类(主要有SVM、Adaboost等)

深度学习的方法,分解为两类问题:

  1. 图像识别
  2. 目标定位

区域提名

区域提名,或候选区域选择,方法总结如下[1]

Comparison of different detection proposal methods. Grey check-marks indicate that the number of proposals is controlled by indirectly adjusting parameters. Repeatability, quality, and detection rankings are provided as rough summary of the experimental results: “-” indicates no data, “·”, “*”, “**”, “***” indicate progressively better results.

基于区域提名的方法

Model Goal Resources
R-CNN Object recognition [paper][code]
Fast R-CNN Object recognition [paper][code]
Faster R-CNN Object recognition [paper][code]
Mask R-CNN Image segmentation [paper][code]

R-CNN, Fast R-CNN, Faster R-CNN和Mask R-CNN的模型结构如下图所示[2]

Model designs of R-CNN, Fast R-CNN, Faster R-CNN and Mask R-CNN

R-CNN

算法

  1. 输入图像,生成候选区域。利用选择性搜索(selective search)对图像生成1K~2K的候选区域(region proposal)。运行图像分割算法选出候选区域,速度快运算量少。
  2. 提取特征:将候选区域调整为统一大小,送入CNN,对每个候选区域提取特征。
  3. 对区域进行分类:SVM分类。
  4. 修正候选区域位置:对候选区域提取特征做回归。
R-CNN

R-CNN中提出的回归的方法,被广泛应用。这部分文章后面有单独的介绍。

缺点

  1. 对每个候选区域都进行特征计算,冗余计算多(候选区域高度重叠)。
  2. 不是端到端的训练。
  3. 需要储存多个SVM分类器和bounding box 回归器,占用内存大。
  4. 对输入图片的大小有要求。

Fast R-CNN

针对R-CNN第一个缺点。可以对图像提一次卷积层特征,然后只需要将候选区域在原图的位置映射到卷积层特征图上。这样一张图像只需要提一次卷积层特征,然后将每个候选区域的卷积层特征输入到全连接层做后续操作,实现共享。
每个候选区域的尺度不一样,而全连接层输入必须是固定的长度,需要对输入数据进行crop或warp。但这样图片失真。


Crop & Warp.

ROI Pooling(Region of Interest)解决了这个问题,这是SPP-net[3]的一个精简版(spatial pyramid pooling)。ROI pooling保证多尺度输入下固定的输出。

Spatial pyramid pooling layer.

另外一个改进是,损失函数使用了多任务损失函数(multi-task loss),将边框回归Bounding Box Regression (bbox)直接加入到CNN网络中训练。实际实验证明:把边框回归放进了神经网络内部,与分类和并成为了一个multi-task模型,这两个任务能够共享卷积特征,并相互促进。使用softmax代替了R-CNN里面的多个SVM分类器。
Fast R-CNN把分类和回归组合到一个网络里,实现了端到端的训练。其提出的Loss函数形式(loss=分类loss+定位loss)被广泛使用。
\mathcal{L}=\mathcal{L}_{cls}+\lambda \mathcal{L}_{box}

算法

  1. 将任意大小的图片输入CNN,得到特征图。
  2. 对原始图片使用选择性搜索算法得到约2k候选区域。在特征图中找到每一个候选区域对应的特征框。在ROI池化层中将每个特征框池化到统一大小。
  3. 统一大小的特征框经过全连接层得到固定大小的特征向量,分别进行softmax分类和bbox回归。
Fast R-CNN

Faster R-CNN

对前面选择性搜索的方法进行改进:加入一个提取边缘的神经网络,把候选框的工作也交给神经网络来做。即引入候选区域提名网络(Region Proposal Network (RPN))替代选择性搜索。

算法

  1. 提取特征:输入固定大小的图片,进过卷积层提取特征图(feature maps)
  2. 生成候选区域: 通过经过RPN生成候选区域,该层通过softmax判断anchors属于foreground或者background,再利用候选框回归修正anchors获得精确的候选区域。
  3. ROI Pooling: 该层的输入是特征图和候选区域,综合这些信息后提取候选特征图(proposal feature maps)。
  4. 分类: 将ROI pooling生成的提取候选特征图分别传入softmax分类和候选框回归,获得检测物体类别和检测框最终的精确位置
Faster R-CNN.

四个损失函数;

  • RPN calssification (anchor good/bad)
  • RPN regression (anchor->propoasal)
  • Fast R-CNN classification (over classes)
  • Fast R-CNN regression (proposal ->box)

R-FCN

R-FCN[4]解决了“分类网络的位置不敏感性(translation-invariance in image classification)”与“检测网络的位置敏感性(translation-variance in object detection)”之间的矛盾,在提升精度的同时利用“位置敏感得分图(position-sensitive score maps)”提升了检测速度。

Faster R-CNN网络跟经典的用于分类的卷积神经网络类似,用于分类的卷积神经网络前面一部分是用于特征提取的主干网络,后面是用于分类的全连接层,从卷积层到全连接层中间通过一个ROI池化层连接。ROI之后的分类和回归是针对每一个提名区域的,这样是为了获得“位置敏感性”。由于各个ROI后面的全连接层不能共享,造成计算量增大。简单的想法是把池化层放在全连接层后面,这样可以全连接层的计算所有ROI可以共享。实验表明此效果很差,因为深层卷积网络具有平移不变性----这也正是分类网络所需要的。对于图片分类效果比较好的一些网络(比如GoogLeNet,ResNet)都是属于全卷积网络的,一堆卷积层得到一个特征图经过一个全局平均值池化,然后为接入输出与物体类别数相等的全连接层,最后加上softmax层输出概率。

Head of Faster R-CNN -ResNet 101. Faster R-CNN, FCs are for each proposed ROI.

这也就是为什么基于ResNet101(见下图)中的 ROI 池化层不是放在 Conv5 输出的feature map后面,而是放在了Conv4和Conv5两组卷积层之间。Conv5和后面的全连接层构成了head部分,一来可以避免位置信息进一步损失,二来可以使用后面的Conv5卷积层学习位置信息。但是缺点就是每一个ROI都要再经过Conv5这一组卷积,head部分的计算不能实现共享。

Head of Faster R-CNN -ResNet 101.

R-FCN解决了head部分使用FCN共享计算的问题。网络使用了ResNet-101,ResNet-101包含100个卷积层,一个全局平均值池化层,和一个1000维的全连接层。论文[4]去掉了最后的全局平均值池化层和全连接层,最后加上了一个1024个 1×1 卷积核的卷积层用以降维(将Conv5输出的2048维降为1024维)。不一样的地方在于改变了 ROI Pooling的使用方法,称为位置敏感的ROI池化(Position-Sensitive ROI Pooling, PS ROI Pooling),增加了平移可变性 。

Key idea of R-FCN for object detection. In this illustration, there are k*k = 3*3 position-sensitive score maps generated by a fully convolutional network. For each of the k*k bins in an RoI, pooling is only performed on one of the k*k maps (marked by different colors).

得到feature map后,再经过最后一个卷积层Conv5(调整Conv5的卷积核数量使用k^2(C+1)个卷积核)为每一个类别产生k^2个position-sensitive score maps。对于C类的目标再加上一个背景类,输出层的通道数为k^2(C+1)。每个类别对应k^2个score map,与k\times k个空间子网格(bin)相对应,描述了相对空间位置。例如k=3,则对应9个位置(左上,左中,…右下)。然后是位置敏感的ROI池化层(position-sensitive RoI pooling layer)。这一层聚合上一个卷积层的输出。通过池化每个score map、每个类别得到一个score。对k^2个score maps,每个类别得到k个数相加就得到该类别的score。一共得到C+1个scores。对每一个ROI生成的C+1个scores,进行vote操作判断当前ROI类别。

后面每个ROI经过的都是池化层,而池化层与卷积层和全连接层相比计算量大大减少,这就实现了ROI运算共享。

要注意的是:“目标左上角的概率”的概念并不局限于图中画的绿色框范围,而是根据整张图上的每一个点,得到目标在左上角的概率。其余的bin同理。


FPN

FPN(Feature Pyramid Network)结构中包括自下而上,自上而下和横向连接三个部分。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息。

(a) Using an image pyramid to build a feature pyramid. Features are computed on each of the image scales independently, which is slow. (b) Recent detection systems have opted to use only single scale features for faster detection. (c) An alternative is to reuse the pyramidal feature hierarchy computed by a ConvNet as if it were a featurized image pyramid. (d) Our proposed Feature Pyramid Network (FPN) is fast like (b) and (c), but more accurate. In this figure, feature maps are indicate by blue outlines and thicker outlines denote semantically stronger features.

Single Shot Detector (SSD)就是利用了特征金字塔结构,见上图(c)。

Mask R-CNN

双线性插值

RetinaNet

RetinaNet = Resnet + FPN + 2 * FCN

通用技术

Bounding Box Regression Coefficients

TO分别代表“目标”和“原始”参数,x,y,w,h分别代表x,y坐标和宽、高。可以看出系数具有仿射(affine transformation)不变性。这一点很重要,因为在计算classification loss的时候,系数是根据原始参数中计算的,期望输出的系数是针对ROI pooling后的。

Note the regression coefficients are invariant to an affine transformation with no shear. This is an important point as while calculating the classification loss, the target regression coefficients are calculated in the original aspect ratio while the classification network output regression coefficients are calculated after the ROI pooling step on square feature maps (1:1 aspect ratio).

Intersection over Union (IoU) Overlap

IoU
IoU

Non-Maximum Suppression

有多个候选框,用非极大值抑制NMS,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。

  • 将所有框的得分排序,选中最高分及其对应的框;
  • 遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除;
  • 从未处理的框中继续选一个得分最高的,重复上述过程,直至边界框列表为空。
NMS.

参考资料


  1. What makes for effective detection proposals.

  2. Object Detection for Dummies Part 3: R-CNN Family

  3. Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition

  4. R-FCN:Object Detection via Region-based Fully Convolutional Networks

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容