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

Dai J, Li Y, He K, et al. R-FCN: Object Detection via Region-based Fully Convolutional Networks[J]. 2016.

背景介绍

   R-CNN 系列的方法,如 SPPnet、Fast R-CNN、Faster R-CNN 等方法在 Object Detection 上取得了很大的成功。这些方法的网络结构被 RoI pooling 层分成两个子网络:共享的全卷积子网,RoI-wise 的子网络。这样设计的一个主要的原因是,借鉴自那些经典的分类网络结构,如 AlexNet、VGG Nets 等,这些网络结构都是卷积子网络,再接一个 pooling层,之后再接几个全连接层。很容易将分类网络的 spatial pooling 层对应到 RoI pooling,将分类网络转化成一个用于 detection 的网络。

   当前 state-of-art 的分类网络,如 ResNet、GoogleNet,都是全卷积网络。很自然地将这样的分类的全卷积网络的结构应用到 Detection 网络上。ResNet的论文中提出了,一种使用 ResNet 作为特征引擎的 Faster R-CNN 方法,将 RoI pooling 层插在两个卷积子网络之间。RoI-wise 子网络越深,那么对于有  N 个 Proposal 的图像,那么子网络就需要重复计算  N  次,虽然子网络越深,准确度可能越高,但是这应一定程度上是以牺牲速度为代价的。这一点可以从实验结果部分Tabel 4 中 Faster R-CNN+++ 与 R-FCN 的时间消耗对比中可以看到。

基于ResNet 的网络结构


   该文的出发点就是为了减少重复计算,尽可能地共享网络,因此对这种结构,提出了更深层次的理解:分类问题,具有平移不变性(translation invariance);检测 (Detection) 问题,在一定程度上具有平移敏感性 ( translation variance)。前面提到的 将 RoI pooling 层插入到两个卷积子网路之间,就是为了打破 translation invariance,使用这种 region-specific 操作也就是为了尽可能的捕捉检测的 translation variance特性。

   该论文巧妙地同时考虑这两种相互矛盾的特性,设计了一个用于 Detection 的共享的全卷积网络结构。




Dai J, Li Y, He K, et al. R-FCN: Object Detection via Region-based Fully Convolutional Networks[J]. 2016.(CVPR)

摘要:本文提出了基于区域的和全卷积网路的准确有效的对象检测方法。与之前的基于区域的检测器(fast/faster RCNN)相比,它们应用每个区域子网络数百次,本文提出的基于区域的检测器是完全卷积的,几乎所有计算在整个图像上共享。为了实现这一目标,我们提出位置敏感得分映射,以解决图像分类中平移不变性和对象检测中的平移方差之间的问题。因此,我们的方法自然可以采用完全卷积图像分类器主干,如最新的残留网络(ResNets)[9],用于对象检测。我们在PASCAL VOC数据集(2007数据集为83.6%mAP)上使用101层ResNet显示竞争结果。同时,我们的结果是在每个图像的测试时间速度为170毫秒,比Faster RCNN速度快2.5-20倍。

code available:https://github.com/daijifeng001/r-fcn.


1. 简介

物体检测的深度网络按感兴趣区域 (RoI) 池化层分为两大主流:共享计算的全卷积子网络 (每个子网络与 RoI 独立) 和 不共享计算的RoI-wise 子网络。开创性的分类体系结构 (如 Alexnet 和 VGG Nets) 造成这样的分流。分类结构由两个子网络组成——1个以空间池化层结束的卷积子网络和多个全连接层。因此,图像分类网络中最后的空间池化层自然变成了物体检测网络中的 RoI 池化层。

近年来,诸如残差网络和 GoogLeNets 等先进的图像分类网络为全卷积网络。类似地,使用全卷积层在对象检测体系结构中构造共享的卷积子网络 (隐藏层不包含于 RoI 的子网络)。然而,物体检测工作中的经验表明,这样的解决方案的检测效果远差于该网络的分类效果。为了解决这个问题,在ResNet论文[9]中,Faster R-CNN检测器[18]的RoI池层不自然地插入在两组卷积层之间 - 这创建了更深的RoI-子网络,其提高了精度, 由于每个RoI计算非共享导致了较低速度成本。 

我们认为上述非自然设计是由于增加对于图像分类的平移不变性与针对对象检测的平移方差之间的困境引起的。一方面,图像分类任务有平移不变性 - 图像内的对象的移动应该是不加区别的。因此,尽可能具有平移不变性的深(完全)卷积体系结构是优选的,如ImageNet分类中的主导结果所证明的。另一方面,对象检测任务需要在一定程度上是平移变化的定位表示。例如,候选框内的对象的平移应该产生有意义的响应,用于描述候选框与对象重叠的好坏。我们假设图像分类网络中的更深的卷积层对平移不太敏感。为了解决这个困境,ResNet论文的检测传输途径[9]将RoI池层插入卷积 - 这种特定区域操作打破了平移不变性,并且当跨不同区域评估时,RoI卷积层不再是平移不变的。然而,这种设计牺牲了训练和测试效率,因为它引入了相当多的区域层。

在本文中,我们开发了一个称为基于区域的完全卷积网络(R-FCN)的框架用于对象检测。我们的网络包括共享的,完全卷积的架构,如FCN的情况[15]。为了将平移方差合并到FCN中,我们通过使用一组专用卷积层作为FCN输出来构造一组位置敏感的分数映射。这些得分映射使用一个相对空间位置(例如,“在对象的左边”)编码位置信息。在这个FCN的顶部,我们添加了一个位置敏感的RoI池层指导来自得分映射的信息,没有跟随的权重(卷积/ fc)层。整个架构是端到端的学习。 所有可学习的层是卷积的,并在整个图像上共享,但编码对象检测所需的空间信息。

使用101层残差网络(ResNet-101)[9]作为骨干网,我们的R-FCN产生了PASCAL VOC 2007年的83.6%的mAP和2012年的82.0%的竞争结果。同时,我们的结果是在使用ResNet-101的每个图像的测试时间速度为170ms时实现的,这比在[9]中的Faster R-CNN + ResNet-101相比要快2.5×20倍。这些实验证明,我们的方法设法解决翻译不变性/方差之间的困境,完全卷积图像级分类器如ResNets可以有效地转换为完全卷积对象检测器。




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

我曾看到的尴尬包括:

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 一样,输入为整幅图像。但R-FCN 最后1个卷积层的输出从整幅图像的卷积响应图像中分割出感兴趣区域的卷积响应图像。

这里写图片描述

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

R-FCN 最后用位置敏感 RoI 池化层,给每个 RoI 1个分数。选择性池化图解:看上图的橙色响应图像 ( top−left ),抠出橙色方块 RoI,池化橙色方块 RoI 得到橙色小方块 (分数);其它颜色的响应图像同理。对所有颜色的小方块投票 (或池化) 得到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个物体的边界框中心坐标分成 k2 个网格的中心坐标,宽高缩放为物体宽高的 1k 倍,得到每个网格的掩码。用原图像和每类物体的网格在整幅图像中的掩码端到端训练全卷积网络。挺像图像分割~

(2) 基础结构

ResNet-101 网络有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) 个桶 ( 0≤i,j≤k−1 ),定义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,c 为 k2(C+1) 个分数图中的输出, (x0,y0) 为 RoI 的左上角坐标, n 为桶里的像素总数,且 Θ 为网络的参数。

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

(4) 分类

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

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


Softmax 回归分类。

(5) 定位

k2(C+1) 维的卷积层后,增加1个 4k2 维的卷积层来回归边界框。每个 RoI 产生的 4k2 维向量经平均投票后,用快速 R-CNN 的参数化得到1个 4 维向量 (tx,ty,tw,th) 。

(6) 训练

每个 RoI 的损失函数为交叉熵损失与边界框回归损失的和。


L(s,tx,y,w,h)=Lcls(sc∗)+λ[c∗>0]Lreg(t,t∗)=−log(erc∗(Θ)∑Cc′=0erc′(Θ))+λ[c∗>0]Lreg(t,t∗)


其中, c∗=0 说明 RoI 的真实标签为背景。 Lreg 与快速 R-CNN 中的边界框损失回归相同。RPN 产生的区域建议当 RoI 与 真实边框的 IoU 超过0.5时,标定为正样本。

在线难例挖掘 (OHEM)。假设每个图像前向产生 N 个区域建议,计算所有建议的损失。按损失排序所有 RoIs,选择损失最高的 B 个 RoIs 3

(7) 可视化

RoI 分类的可视化。RPN 刚好产生包含 person 类的 RoI。经过 R-FCN 的最后1个卷积层后产生9个相对空间位置的分数图,对 person 类的每个相对空间位置通道内的 RoI 桶平均池化得到 3×3 的池化分数,投票后送入分类器判断属于 person 类。当分类正确时,该类通道的位置敏感分数图 (中间) 的大多数橙色实线网格内的响应在整个 RoI 位置范围内最强。

这里写图片描述

3. 相关工作

R-CNN 证实用深度网络产生区域建议是有效的。R-CNN 在剪切变形的区域上评价卷积网络,区域间不共享计算。SPP 网络,快速 R-CNN 和更快速 R-CNN 为”半卷积” (卷积子网络在整幅图像上共享计算,另1个子网络评价各个区域)。

一些物体检测器被认为是”全卷积“模型。OverFeat 在共享卷积特征图上滑窗操作来检测物体。类似地,快速 R-CNN 等也用滑动窗口,它们的1个单尺度的滑动窗口可看作1个卷积层。更快 R-CNN 的 RPN 部分为1个预测关于多尺寸参考盒 (锚) 的边界框的全卷积检测器。更快 R-CNN 的 RPN 未知区域建议的类,但 SSD 该部分已知特定的类。

另一类物体检测器采用全连接层,在整个图像上产生整体物体的检测结果。

4. 实验

(1) PASCAL VOC

训练VOC 07  trainval  和 VOC 12  trainval ,测试VOC 07  test 。

a. 与其它全卷积策略比较

朴素更快 R-CNN 
ResNet-101 的共享特征图,最后1个卷积层后用 RoI 池化。每个 RoI 上用21类全连接层。 
ResNet-101 (conv4 与 conv5 间插入 RoI 池化层),朴素更快 R-CNN (conv5 后插入 RoI 池化层)。mAP 升 7.5%。。经验证实更快 R-CNN 系统的卷积层间插入 RoI 池化层能提高相关空间信息的重要性。

特定类 RPN 
训练 RPN 与 更快 R-CNN 部分相同,2类卷积分类层 (物体或背景) 改为 21类卷积分类层 (20类物体+1背景)。 
特定类 RPN 类似于快速 R-CNN 的特殊形式 (用稠密的滑窗替换区域建议)。mAP 跌 8.8%。效果不如2类 RPN。

无位置敏感的 R-FCN 
k=1 时,位置不敏感。相当于每个 RoI 全局池化。 
位置敏感的 R-FCN 相对于 ResNet-101,mAP 升0.02 %~

b. 与用 ResNet-101 的更快 R-CNN 比较

所要比较的检测器为各大 Benchmark 上的最强竞争者。名字太长,后面简称暂时最强检测器。

原作者的意思可能是这样:结合 MS COCO 训练后,R-FCN 仅需多尺度训练 mAP 就能到 82%,而暂时最强检测器,除了多尺度训练,还要迭代盒回归和上下文才比 R-FCN 多 2.0% 和 1.8%;而且,即使不带 MS COCO 训练,没有上述附加的”+++”工作,R-FCN 也比暂时最强检测器的 mAP 还要至少高 3%。而且,R-FCN 快得多。

带 MS COCO 训练数据后,mAP 大涨~ P.S. 该数据集由微软发起~

c. 深度的影响

深度为50~101时 mAP 会增加,到152层时饱和。

d. 区域建议的影响

RPN 即使用选择搜索和边缘盒 (Edge Boxes) 也有 77% 以上的 mAP。

(2) MS COCO

IoU 为0.5时,R-FCN和暂时最强检测器的 mAP 仅有刚过50%。说明 MS COCO 与 PASCAL VOC 相比有更大的挑战性~

5. 小结

R-FCN 在数据集 VOC 07 和 12 上的 mAP 分别为 83.6% 和 82%,测试时每张图像耗时 170ms。微软的视觉计算组其实每年在领先的成果上改进了一点点,但原理简单,分析角度又新,实验规模也不小。该团队不仅明星云集,且力往一块使,容易出大片~ ( ̄﹏ ̄)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R-FCN(Region-based Fully Convolutional Networks)是一种用于目标检测的深度学习网络模型。它是基于卷积网络(Fully Convolutional Networks)和区域建议网络(Region Proposal Networks)的结合。R-FCN 在目标检测任务上取得了较好的性能。 关于 R-FCN 的 Matlab 实现,你可以参考以下步骤: 1. 下载 R-FCN 的源代码。你可以在 GitHub 上找到一些开源实现,如 https://github.com/daijifeng001/R-FCN 或者其他类似的仓库。 2. 安装 Matlab 并配置深度学习框架。Matlab 支持多种深度学习框架,如 TensorFlow、PyTorch、Caffe 等。根据你选择的 R-FCN 实现,安装对应的深度学习框架并配置 Matlab 的环境。 3. 加载预训练模型。R-FCN 需要在大规模数据集上进行预训练,你需要下载相应的预训练模型,并将其加载到 Matlab 中。 4. 准备数据集。为了使用 R-FCN 进行目标检测,你需要准备一个目标检测数据集,包括图像和标注信息。确保数据集格式与 R-FCN 的输入要求相符。 5. 运行训练代码。根据你选择的 R-FCN 实现,运行相应的训练代码来训练网络模型。你可能需要调整一些训练参数,如学习率、批大小等。 6. 进行目标检测。训练完成后,你可以使用 R-FCN 进行目标检测。提供待检测图像作为输入,R-FCN 将输出目标类别和位置信息。 请注意,以上步骤仅提供了一般的指导,具体实现可能因不同的 R-FCN 实现而有所差异。在实际操作中,请参考相应的文档和代码示例,以确保正确实现 R-FCN 网络

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值