R-FCN

论文信息

Jifeng Dai, Yi Li, Kaiming He, Jian Sun, R-FCN: Object Detection via Region-based Fully Convolutional Networks, CVPR 2016.

https://arxiv.org/abs/1605.06409

Introduction

历史

因为当时的two stage目标检测模型都用ResNet等高准确率classification network作为backbone, 在当时的现象是backbone都能达到较高的accuracy, 但是最终目标检测模型accuracy都不高, 当时常见的解决方法时在backbone和detector之间加入RoI pooling层, 作者认为这样做时unnatural的.

unnatural的一方面原因是因为每个RoI unshared从而增加了计算量导致速度变慢.

本文的基本思想

作者认为直接这样套用太粗暴, 他认为对于目标检测应该有两个重心对其兼顾:

  1. image classification应该是translation invariant - 对图片放缩不应该影响分类.
  2. object classification应该是translation variant - detector应该对其不同位置有不同的responses.

解决方案

Basic Approach

对于上文提到的第一点, 现有方法基本都能实现, 因此本文重点在于提出了一种实现第二点的方法 - 加入一个position-sensitive部分. 下图便是basic approach.

basic

可以看出从proposal先经过conv, 对得到的feature maps进行了 k 2 ( C + 1 ) k^2(C+1) k2(C+1)-d的conv, 其中 k k k表示预设将proposal划成 k × k k \times k k×k个区域(e.g. k = 3 k = 3 k=3, 就化成左上, 中上, 右上等9个区域), 而 C + 1 C+1 C+1表示预测 C C C个目标类别和 1 1 1个背景类别.

将这样操作产生的score maps用产生 k × k k \times k k×k个RoIs, 在这些RoIs中只取对应位置的RoI(e.g. 左上层只取左上角RoI)称之为bin, 将bin拼接产生 k × k k \times k k×k个responses, 此过程称为position-sensitive RoI pooling, 各个response投票并SoftMax得到预测结果.

Practical Approach

practical

实际模型就是用RPN共享backbone的权重, 产生proposals, 将其与score maps对应, 其他基本不变.

Backbone Architecture

移除avg pooling layer和fc layer, 只保留conv layer. 并且在最底部加入了一个randomly initialized 1024-d conv layer来减小维度.

Position-sensitive score maps & Position-sensitive RoI pooling.

bin产生的response如此定义:
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|\Theta) = \sum\limits_{(x,y)\in bin(i,j)}z_{i,j,c}(x+x_0,y+y_0|\Theta)/n rc(i,jΘ)=(x,y)bin(i,j)zi,j,c(x+x0,y+y0Θ)/n
关于各个成分定义我们使用原文中的描述:

Here r c ( i , j ) r_c(i, j) rc(i,j)is the pooled response in the ( i , j ) (i, j) (i,j)-th bin for the c-th category, $z_{i, j, c} is one score map
out of the k 2 ( C + 1 ) k^2(C + 1) k2(C+1) score maps, ( x 0 , y 0 ) (x_0, y_0) (x0,y0) denotes the top-left corner of an RoI, n n n is the number
of pixels in the bin, and Θ \Theta Θ denotes all learnable parameters of the network.

该等式是一个avg pooling, 作者提到max pooling同样可以实施.

关于投票部分就是对每个class的response相加:
r c ( Θ ) = ∑ i , j r c ( i , j ∣ Θ ) r_c(\Theta) = \sum\limits_{i,j}r_c(i,j|\Theta) rc(Θ)=i,jrc(i,jΘ)
之后送入SoftMax中预测:
s c ( Θ ) = e r c ( Θ ) / ∑ c ‘ = 0 C e r c ‘ ( Θ ) s_c(\Theta) = e^{r_c(\Theta)}/\sum\limits_{c^` = 0}^Ce^{r_{c^`}(\Theta)} sc(Θ)=erc(Θ)/c=0Cerc(Θ)
特别的, 作者除了classification还在每个RoI在position-sensitive RoI pooling过程中进行了bbox regression.

Loss

整个loss包含classification loss和bbox regression loss:
L b ( s , t x , y , w , h ) = L c l s ( s c ∗ ) + λ [ c ∗ > 0 ] L r e g ( t , t ∗ ) L c l s = C E ( c , c ∗ ) L_b(s,t_{x,y,w,h}) = L_{cls}(s_{c^*})+\lambda[c^*>0]L_{reg}(t,t^*)\\ L_{cls} = CE(c,c^*) Lb(s,tx,y,w,h)=Lcls(sc)+λ[c>0]Lreg(t,t)Lcls=CE(c,c)
其中 L r e g L_{reg} Lreg时bbox regression, λ \lambda λ设置为1, [ c ∗ > 0 ] [c^*>0] [c>0]是指当分类为bg时为0, 否则为1.

作者还提供了一个可视化的instance:

visualization

实验

实验结果

experiment_1

实验中作者尝试用OHEM, multi-scale等方法训练, accuracy达到了state-of-the-art的效果, speed远超当时流行的two stage方法.

后来作者又尝试增加网络深度, 使用不同的proposal方法, 结果显而易见:

  1. 网络越深accuracy越高.
  2. 使用RPN达到最好效果.

总结

我对作者实验的看法:

作者本意可能为了提升accuracy, 但并没有对于state-of-the-art拉开较大的gap, 这是因为后半部分网络结构比其他网络简单一些, 又因为利用了新的算法以应对RoI pooling的位置信息损失, 因此能达到相对比较高的accuracy. 而在用时上达到了一半甚至更小的指标, 便是因为后半部分网络结构简单.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值