R-FCN

论文:R-FCN: Object Detection via Region-based Fully Convolutional Networks
来源:NIPS 2016

1. Motivation

  • 分类问题需要特征具有变换不变性(translation invariance),目标在图像中的任一位置均不能影响分类结果。CNN由于具有平移不变性,因此在分类问题中能达到比较好的分类准确度,一般来讲,网络越深,其具有的平移旋转不变性越强,这个性质对于保证分类模型的鲁棒性有积极意义。在CNN分类网络的发展中,网络深度越来越深,分类性能也越来越好(AlexNet、VGG、ResNet)。
  • 在检测问题中,物体的定位任务要求模型对位置信息有良好(敏感)的感知能力,要求在目标发生平移时,能快速作出正确的响应。因此,在采用CNN做检测时,要求CNN不能太深,否则,过度的平移旋转不变性将会削弱这一性能。研究发现,对于较深的全卷积神经网络(Inception、ResNet 等),Faster-RCNN检测框架存在着一个明显的缺陷:检测器对物体的位置信息的敏感度下降,检测准确度降低。
  • 检测问题存在这样一种矛盾:分类问题要求的变换不变性和定位问题要求的变换敏感性之间的矛盾。( a dilemma of increasing translation invariance for image classification vs. respecting translation variance for object detection)
  • Faster R-CNN在ROI pooling前都是卷积,是具备变换不变性的,但是,一旦插入ROI pooling之后,后面的网络结构就不再具备变换不变性了。可以说,Faster R-CNN是通过牺牲一些分类网络变换不变性,来增加定位网络变换敏感性的。但是,分类是否正确比定位是否精准更加重要,在保证分类正确的前提下,才考虑如何提高定位精度,因此,网络应该以变换不变性为主,ROI pooling应该放在分类网络和定位网络的共有部分的较深层,而不能放在最深层。
  • 为增加定位网络的变换敏感性一般来讲最直观的做法是将RPN的位置稍向浅层移动(比如在ResNet中将RPN嵌入到conv4_x的位置),但这样做存在的问题是,conv5必须删除,以保证Fast-RCNN head接到conv4_x的位置,否则会造成特征不对齐,而删除conv5又会影响检测准确度。
    在这里插入图片描述在这里插入图片描述
  • R-FCN为了在不影响分类所需的变换不变性的情况下,通过引入position-sensitive score maps和position-sensitive RoI pooling,一来增加网络对位置信息的敏感程度,二来大大减小detection head的检测时间。在VOC2007测试集上mAP达83.6%,比Faster R-CNN有所提升,同时速度提高2.5~20倍。

2. R-FCN

2.1 overview

以ResNet-101作为backbone:

  • ResNet-101 = 100 convolutional layers + 1 global average pooling and 1 1000-class fc layer
  • backone(output 1024-d) = 100 convolutional layers(output 2048-d) + 1 convolutional layer( 1 × 1 × 1024 1\times1\times1024 1×1×1024
    在这里插入图片描述

2.2 Position-sensitive score maps

  • 为了增加变换敏感性,R-FCN在全卷积网络的最后层之后添加了一个 1 × 1 × k 2 ( C + 1 ) 1\times1\times k^2(C+1) 1×1×k2(C+1)卷积层,输出position-sensitive score maps。
  • 共有 k 2 ( C + 1 ) k^2(C+1) k2(C+1)score map:先按部位分成 k 2 k^2 k2组,每组有 C + 1 C+1 C+1个类别。某张score map的某一位置的含义是:该位置包含某个类别 c c c的物体的某一部分的概率值
  • 所谓"位置敏感",其主要思想是在特征聚集时人为引入位置信息,从而有效改善较深的神经网络对物体位置信息的敏感程度。

2.3 Position-sensitive RoI pooling

  • 假设RoI在position-sensitive score maps上的左上角坐标为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),RoI的宽和高分别为 w w w h h h,将RoI划分为 k × k k\times k k×k个bin,则第 ( i , j ) (i,j) (i,j)个bin ( 0 ≤ i , j ≤ k − 1 ) (0\le i,j\le k-1) (0i,jk1)占据的区域为
    b i n ( i , j ) = { ( x , y ) ∣ ⌊ i w k ⌋ ≤ x < ⌈ ( i + 1 ) w k ⌉   , ⌊ j w k ⌋ ≤ y < ⌈ ( j + 1 ) w k ⌉   } bin(i,j)=\{(x,y)|\lfloor i\frac{w}{k}\rfloor\le x< \lceil (i+1)\frac{w}{k}\rceil\ ,\lfloor j\frac{w}{k}\rfloor\le y< \lceil (j+1)\frac{w}{k}\rceil\ \} bin(i,j)={(x,y)ikwx<(i+1)kw ,jkwy<(j+1)kw }
  • 在每个通道的每个对应bin区域做pooling,即
    r c ( i , j ) = ∑ ( x , y ) ∈ b i n ( i , j ) z i , j , c ( x + x 0 , y + y 0 ) / n r_c(i,j)=\sum_{(x,y)\in bin(i,j)}z_{i,j,c}(x+x_0,y+y_0)/n rc(i,j)=(x,y)bin(i,j)zi,j,c(x+x0,y+y0)/n其中, z i , j , c z_{i,j,c} zi,j,c表示 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个score maps中第 c c c个score map上与第 ( i , j ) (i,j) (i,j)个bin对应的区域, r c ( i , j ) r_c(i,j) rc(i,j)表示第 c c c个输出值。由于 0 ≤ c ≤ k 2 ( C + 1 ) 0\le c \le k^2(C+1) 0ck2(C+1),所以此过程将得到 k 2 ( C + 1 ) k^2(C+1) k2(C+1)维向量。通俗地讲,当 k = 3 k=3 k=3时,就是找到top-left区域对应的 C + 1 C+1 C+1个score maps,按类别(即通道数)做平均池化,找到top-center区域对应的 C + 1 C+1 C+1个score maps,按类别做平均池化,. . . ,找到bottom-right区域对应的 C + 1 C+1 C+1个score maps,按类别做平均池化。
  • 对上述的 k 2 ( C + 1 ) k^2(C+1) k2(C+1)维向量按照类别再做一次平均池化,即
    r c = 1 n ∑ i , j r c ( i , j ) r_c=\frac{1}{n}\sum_{i,j}r_c(i,j) rc=n1i,jrc(i,j)得到 C + 1 C+1 C+1维向量,再通过softmax函数后即表示该RoI属于各个类别的概率值。
    在这里插入图片描述

对于定位问题:

  • 全卷积网络的最后层之后添加了一个 1 × 1 × 4 k 2 1\times1\times 4k^2 1×1×4k2卷积层输出position-sensitive offset map(论文中未出现该名称,为方便讲述,自己定义的)。显然这时归回器是与类别无关的(class-agnostic),如果要设置与类别有关的回归器(class-specific),则输出通道数为 4 k 2 C 4k^2C 4k2C
  • 某张position-sensitive offset map的某一位置的含义是:该位置需要对物体边界框的某个坐标的偏移量
  • 后续与position-sensitive score map相同,但要去掉最后的softmax。

3. 总结

3.1 R-FCN vs Faster-RCNN

  • Faster-RCNN对于每个RoI都需要做一次RoI pooling,同样地,R-FCN对于每个RoI都需要做一次position-sensitive RoI pooling。
  • R-FCN目的是减小Faster-RCNN中detection head的检测时间:Faster-RCNN使用RoI pooling得到RoI features后,还需要使用由多层全连接层构成的detection head做分类和回归,而R-FCN在使用position-sensitive RoI pooling后直接得到分类概率和回归值,这就大大减小了检测时间。

3.2 对position-sensitive score maps的理解

  • 位置敏感得分图就是多个二分类器的分类结果,即,根据backbone提取的feature maps,利用 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个二分类器( k 2 ( C + 1 ) k^2(C+1) k2(C+1) 1 × 1 1\times 1 1×1卷积核)进行多次二分类。这些二分类器具有专一性,某一个二分类器对某个类别的某个部位进行二分类。
  • 通过对物体进行细分(分成 k 2 k^2 k2个小部分),增加了检测器对位置信息的敏感程度。之前分类关注的是物体的重点区域,现在关注的是物体各个部分的重点区域。
  • 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、付费专栏及课程。

余额充值