程序员人生 网站导航

R-FCN:基于区域的全卷积网络来检测物体

栏目:综合技术时间:2016-07-06 13:20:59

原文标题为“R-FCN: Object Detection via Region-based Fully Convolutional Networks ”,作者代季峰 1,14年毕业的清华博士到微软亚洲研究院的视觉计算组,CVPR 16 两篇1作的会议主持人~ ╰(°▽°)╯ 同时公布了源码~ 2

后面主要内容为原文随意的翻译或概括。必有不紧贴原文原意的地方,歪曲请指出,否则求放过~

1. 简介

物体检测的深度网络按感兴趣区域 (RoI) 池化层分为两大主流:同享计算的全卷积子网络 (每一个子网络与 RoI 无关) 和 不同享计算的作用于各自 RoI 的子网络。工程分类结构 (如 Alexnet 和 VGG Nets) 造成这样的分流。而工程上的图象分类结构被设计为两个子网络——1个后缀1个空间池化层的卷积子网络和多个全连接层。因此,图象分类网络中最后的空间池化层自然变成了物体检测网络中的 RoI 池化层。

最近几年来,诸如残差网络和 GoogLeNets 等先进的图象分类网络为全卷积网络。类似地,自然会想到用在物体检测中用全卷积网络 (隐藏层不包括作用于 RoI 的子网络)。但是,物体检测工作中的经验表明,这样天真的解决方案的检测效果远差于该网络的分类效果。 为弥补为难,更快 R-CNN 检测器不自然地在两卷积层间插入RoI 池化层,这样更深的作用于各 RoI 的子网络虽精度更高,但各个 RoI 计算不同享所以速度慢。

为难在于:物体分类要求平移不变性越大越好 (图象中物体的移动不用辨别),而物体检测要求有平移变化。所以,ImageNet 分类领先的结果证明尽量有平移不变性的全卷积结构更受亲睐。另外一方面,物体检测任务需要1些平移变化的定位表示。比如,物体的平移应当使网络产生响应,这些响应对描写候选框覆盖真实物体的好坏是成心义的。我们假定图象分类网络的卷积层越深,则该网络对平移越不敏感。

我曾看到的为难包括:

a) Kaggle 中的白鲸身份辨认。刚开始很多人尝试从图象到坐标的直接回归,到后面有几位心善的大哥分享了自己手动标定后白鲸的图象坐标,后来显著的进展大多是由于把白鲸的位置检测和身份辨认问题简化为白鲸的身份辨认问题。
b) Caffe 用于物体检测时的均值收敛问题。

消除为难,在网络的卷积层间插入 RoI 池化层。这类具体到区域的操作在不同区域间跑时不再有平移不变性。但是,该设计因引入相当数目的按区域操作层 (region-wise layers) 而牺牲了训练和测试效力。

本文,我们为物体检测推出了基于区域的全卷积网络 (R-FCN),采取全卷积网络结构作为 FCN,为给 FCN 引入平移变化,用专门的卷积层构建位置敏感分数地图 (position-sensitive score maps)。每一个空间敏感地图编码感兴趣区域的相对空间位置信息。 在FCN上面增加1个位置敏感 RoI 池化层来监管这些分数地图。

2. 方法

(1) 简介

效仿 R-CNN,采取流行的物体检测策略,包括区域建议和区域分类两步。不依赖区域建议的方法确切存在 (SSD 和 Yolo 弟兄),基于区域的系统在不同 benchmarks 上仍然精度领先。用更快 R-CNN 中的区域建议网络 (RPN) 提取候选区域,该 RPN 为全卷积网络。效仿更快 R-CNN,同享 RPN 和 R-FCN 的特点。

这里写图片描述

RPN 给出感兴趣区域,R-FCN 对该感兴趣区域分类。R-FCN 在与 RPN 同享的卷积层后多加1个卷积层。所以,R-FCN 与 RPN 1样,输入为整幅图象。但 R-FCN 最后1个卷积层的输出从整幅图象的卷积响应图象中分割出感兴趣区域的卷积响应图象。

这里写图片描述

R-FCN 最后1个卷积层在整幅图象上为每类生成k2个位置敏感分数图,有C类物体外加1个背景,因此有k2(C+1)个通道的输出层。k2个分数图对应描写位置的空间网格。比如,k×k=3×3,则9个分数图编码单个物体类的 {topleft,topcenter,topright,...,bottomright}。

R-FCN 最后用位置敏感 RoI 池化层,给每一个 RoI 1个分数。选择性池化图解:看上图的橙色响应图象 (topleft),抠出橙色方块 RoI,池化橙色方块 RoI 得到橙色小方块 (分数);其它色彩的响应图象同理。对所有色彩的小方块投票 (或池化) 得到1类的响应结果。

选择性池化是跨通道的,投票部份的池化为所有通道的池化。而1般池化都在通道内。

R-FCN 最后1个卷积层的输出为何会具有相对空间位置这样的物理意义 (top-left,top-center,…,bottom-right)?

原文为“With end-to-end training, this RoI layer shepherds the last convolutional layer to learn specialized position-sensitive score maps.”。所以,假定端到端训练后每层真有相对位置的意义,那末投票前的输入1定位置敏感。投票后面的内容用作分类。

端到端训练先自行脑补:
假定已知原图象与真实物体的边界框中心坐标和宽高,把1个物体的边界框中心坐标分成k2个网格的中心坐标,宽高缩放为物体宽高的1k倍,得到每一个网格的掩码。用原图象和每类物体的网格在整幅图象中的掩码端到端训练全卷积网络。挺像图象分割~

(2) 基础结构

ResNet⑴01 网络有100个卷积层,1个全局平均池化层和1个1000类的全连接层。仅用ImageNet预训练的该网络的卷积层计算特点图。

(3) 位置敏感分数图

对 R-FCN 的卷积响应图象按 RPN 的结果分割出来感兴趣区域,对单通道的感兴趣区域分成k×k个网格,每一个网格平均池化,然后所有通道再平均池化。
其实不是这样的~ 由于 RoI 覆盖的所有面积的橙色方片都是左上位置的响应。

“To explicitly encode position information into each RoI, we divide each RoI rectangle into k×k bins by a regular grid.” 这句话应对应下图 (对应后面效果图的黄色虚线部份):

这里写图片描述

对1个大小为w×h的 RoI,1个桶 (bin) 的大小为wk×hk,最后1个卷积层为每类产生k2个分数图。对第(i,j)个桶 (0i,jk1),定义1个位置敏感 RoI 池化操作:

rc(i,j|Θ)=1n(x,y)bin(i,j)zi,j,c(x+x0,y+y0|Θ)

其中,rc(i,j|Θ)为第c类第(i,j)个箱子的池化响应,zi,j,ck2(C+1)个分数图中的输出,(x0,y0)为 RoI 的左上角坐标,n为桶里的像素总数,且Θ为网络的参数。

桶对应后面效果图的黄色实线部份,1个桶只抠了每类的每一个相对空间位置通道中 RoI 的对应相对空间位置的分数图,其它的部份抛弃。

(4) 分类

对该 RoI 每类的所有相对空间位置的分数平均池化 (或投票)。

rc(Θ)=i,jrc(i,j|Θ)

Softmax 回归分类。

(5) 定位

k2(C+1)维的卷积层后,增加1个4

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐