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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容