原论文:《Siyuan Qiao, Liang-Chieh Chen, Alan Yuille. DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution[J]. arXiv:2006.02334》
最后面有 参考代码 的 Github 链接
仅描述基本构成,原论文内容很丰富,所以详细情况还是要看论文。
效果:
论文的两个特点:
- 将 FPN 改为 RFP(Recursive Feature Pyramid);
- 将普通卷积改为 SAC(Switchable Atrous Convolution)。
1. RFP
- 将原始RPN每层的输出
f
i
1
f_i^1
fi1 反馈进同层骨干网,得到
f
i
2
f_i^2
fi2,具体反馈的方式是:
- 使用 ASPP模块 对 f i 1 f_i^1 fi1 进行变换,得到 R i R_i Ri;
- 修改接收 R i R_i Ri 的骨干网中对应的模块;
- 最后将 f i 1 f_i^1 fi1 与 f i 2 f_i^2 fi2 利用 Fusion模块 融合,得到最终的特征图;
- 骨干网模块中接收
R
i
R_i
Ri 的方式:
1.1 ASPP(Atrous Spatial Pyramid Pooling)
输入:
f
i
1
f_i^1
fi1 (通道为
c
c
c)
输出:
R
i
1
R_i^1
Ri1 (通道为
c
c
c)
结构:
- 四个并行的卷积分支,每个分支的输出的通道为 c / 4 c/4 c/4。
- 其中三个分支由 Conv+ReLU 构成,相关参数: k e r n e l s i z e = [ 1 , 3 , 3 ] , a t r o u s r a t e = [ 1 , 3 , 6 ] , p a d d i n g = [ 0 , 3 , 6 ] kernel\ size=[1,3,3],\ atrous\ rate=[1,3,6],\ padding=[0,3,6] kernel size=[1,3,3], atrous rate=[1,3,6], padding=[0,3,6]。
- 第四个分支: g l o b a l a v e r a g e p o o l i n g + C o n v _ 1 × 1 + R e L U + r e s i z e global\ average\ pooling+Conv\_1\times1+ReLU+resize global average pooling+Conv_1×1+ReLU+resize。
- 将四个分支连接在一起得到 R i 1 R_i^1 Ri1。
1.2 Fusion
输入:
f
i
1
f_i^1
fi1 与
f
i
2
f_i^2
fi2
输出:最终要使用的特征图
2. SAC
- 结构: ( P r e ) G l o b a l C o n t e x t + S A C + ( P o s t ) G l o b a l C o n t e x t (Pre)Global\ Context+SAC+(Post)Global\ Context (Pre)Global Context+SAC+(Post)Global Context
- 中间部分的 SAC 计算公式:
O u t p u t = S ( x ) ⋅ C o n v ( x , w , 1 ) + ( 1 − S ( x ) ) ⋅ C o n v ( x , w + Δ w , r ) Output=S(x)\cdot Conv(x,w,1)+(1-S(x))\cdot Conv(x,w+\Delta w,r) Output=S(x)⋅Conv(x,w,1)+(1−S(x))⋅Conv(x,w+Δw,r)
其中, S ( x ) = a v e r a g e p o o l i n g _ 5 × 5 + C o n v _ 1 × 1 S(x)=average\ pooling\_5\times 5+Conv\_1\times 1 S(x)=average pooling_5×5+Conv_1×1
图中的权重锁定(Lock)的含义:下侧的权重用上侧初始化,并在此基础上加上一个 Δ w \Delta w Δw,这个 Δ w \Delta w Δw 是后面训练得到的。