提出由于卷积网络卷积核的结构固定,导致对图像的建模不精确,对此作者提出了可变性卷积DCN和可变形ROI Pooling,两种方法都是在空间中通过学习偏移量来扩展卷积核的采样空间,并且所增加的资源很少,也可以进行端到端的训练。
如何对于目标的形状、角度等几何变换进行建模,一般来说有两种方法,一是获得大量的监督信息,但这样成本太高;二是通过手工设计,这类的方法以前有很多了,但这种方法泛化能力较差,而且复杂情况下也未必奏效。
卷积神经网络在计算机视觉任务取得了显著的成果,但同样有着上述的问题,卷积结构固定,对目标建模不充分。图像不同位置的结构应当是不同的,但是却用相同结构的卷积进行计算;不管当前位置的图像是什么结构,都使用固定比例的池化层降低特征图分辨率。这种做法是不可取的,尤其是对非刚性目标。
接着作者提出了两个新的模块,DCN 和DCN ROI Pooling.DCN通过学习卷积核中位置的偏移量,改变卷积核的感受野,增加其形变。
a为正常的卷积,b为学习到偏移量的DCN,cd是b的特殊情况,意思是b能学习到很多情况,不管是尺度和是旋转。
第二个是DCN ROI Pooling,也是为Pooling中的每个块增加偏移量。
对于二维卷积,其操作是这样的:
如果我们对卷积R的每个位置Pn都用一个
Δ
\Delta
ΔPn来来学习偏移量的话,那么公式就变为了:
这时就存在一个问题,学习的偏移量为整数的概率基本为0,那么最终得到位置(原始+偏移)的数值,该怎么确定?
作者提出双线性插值的方法,
p
p
p为学习到的位置,q是特征图x上的所有位置,使用双线性插值确定
p
p
p点的数值。我们学习到的偏移量是二维的,有是x方向和y方向。
G
(
⋅
,
⋅
)
G(·,·)
G(⋅,⋅)就是双线性插值的公式,自己画图推导一下就明白了。
关于双线形插值及其后像素点对应请看博文:
https://blog.csdn.net/qq_37577735/article/details/80041586#%E5%8D%95%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC%E6%B3%95
讲的非常详细。
效果图如下
对于N个位置的偏移量,需要2N维向量来保存,因为一个位置有x和y两个方向的偏移需要保存。反向传播公式在附录。
ROI Pooing我最早是在SPP上看到的,当时读论文读的也不仔细。其目的是将提取出的特征图都Pooling到统一大小,好送入之后的分类或者回归branch。
ROI Pooing输入尺寸为
w
∗
h
w*h
w∗h的特征图x,左上坐标为
P
0
P_0
P0,通过ROI转换为
k
∗
k
k*k
k∗k大小的特征图
y
y
y,
y
y
y与
x
x
x的对应关系可以表示为:
也是双线性插值进行pooling。使用了DCN之后的公式变为了:
后面针对R-FCN中的改进我没有看,也是对Faster RCNN的改进,DCN的代码解读请看:
https://zhuanlan.zhihu.com/p/144365785