可变形卷积网络(Deformable Convolutional Networks)

注意!

可变形卷积网络由微软亚洲研究院的研究员们提出,有以下两篇:

  1. Deformable Convolutional Networks1
  2. Deformable ConvNets v2: More Deformable, Better Results2

这个工作主要受Spatial Transform Networks3和deformable part models4启发。

这两篇论文主要提出了两个modules,一个是可变形卷积层(Deformable Convolution),一个是可变形的RoI池化层(Deformable RoI Pooling)。这两个modules可以很容易地取代深层CNNs中简单的对应部分,并且可以很容易地通过标准的反向传播进行端到端训练。所得到的网络被称为可变形卷积网络(Deformable Convolutional Networks),或Deformable ConvNets5

Motivation

visual recognition中的关键挑战是如何处理几何形变问题(geometric variations)6

通常有两种方法来解决这个问题:

  1. 建立具有足够期望变化的训练数据集。这通常通过增加现有的数据样本来实现,例如通过仿射变换。鲁棒的表示可以从数据中学习,但是通常以昂贵的训练和复杂的模型参数为代价7
  2. 使用变换不变的算法。这一类包含了许多众所周知的技术,如SIFT(尺度不变特征变换)8

上面的方法有两个弊端:

  1. 几何变换被假定是固定并且已知的。这样的先验知识被用来扩充数据,并设计特征和算法。这使模型对未知几何变换的新任务缺少泛化能力9
  2. 手工设计的不变特征和算法对于过于复杂的变换可能是困难的或不可行的10

CNN本质上局限于建模大型,未知的转换。该限制源于CNN模块的固定几何结构11。由于不同的位置可能对应不同尺度或形变的目标,所以对于具有精细定位的视觉识别来说,尺度或感受野大小的自适应确定是理想的情况12

DeformableConv
我们看到\((a)\)图是普通卷积,\((b),(c),(d)\)是加了offsets的卷积:

Deformable Convolution

Summary

CNN中的特征图和卷积是3D。可变形卷积和RoI池化模块均在2D空间域上运行。在整个Channel范围内,该操作保持不变。在不失一般性的情况下,此处为了清楚起见以2D形式描述了模块。扩展到3D很简单13

参数表如下:

参数 意义
\(x\) 输入特征图(input feature map)
\(y\) 输出特征图(output feature map)
\(\mathscr{R}\) Regular Grid
\(w\) 权重(Weight)

我们以\(3\times 3\)的卷积核为例,\(\mathscr{R}\)用以下形式表示:
\[
\begin{matrix}
(-1,-1)&(0,-1)&(1,-1)\\
(-1,0)&(0,0)&(1,0)\\
(-1,1)&(0,1)&(1,1)
\end{matrix}
\]
\(p_n\)表示\(\mathscr{R}\)中的坐标,如\((-1,1)\)。那么对于输出特征图\(y\)中的每个点\(p_0\)来说,我们有:
\[
\begin{equation}
y(p_0)=\sum\limits_{p_n\in \mathscr{R}}\ w(p_n)\cdot x(p_0+p_n)\label{ordinary_conv}
\end{equation}
\]

在可变形卷积层中,卷积核\(\mathscr{R}\)增加一个偏移项\(\{\Delta p_n|n=1,\cdots,N\}\),\(N=|\mathscr{R}|\)。那么\(\ref{ordinary_conv}\)变成:
\[
\begin{equation}
y(p_0)=\sum\limits_{p_n\in \mathscr{R}}\ w(p_n)\cdot x(p_0+p_n+\Delta p_n)\label{offset_conv}
\end{equation}
\]

由于\(\ref{ordinary_conv}\)中偏移量\(\Delta p_n\)通常为小数,Input Feature Map上没有对应的点,我们通常使用双线性插值(bilinear interpolation)来计算,得到这个小数坐标位置上的点的值。双线性插值的计算的方法推导在后面。

Get Offsets

Basic

我们在讲计算过程之前,需要先明白可变形卷积到底什么时候变形,在哪里变形。我们并不是对卷积核变形,而是对特征图上的每个点学习一个offset,对特征图变形

fig2

上图说明了可变形卷积层的计算过程。具体的卷积核数据看表:

卷积方式 卷积核 padding Input Feature Map Output
可变形卷积 \(n\times n\times C\times (2\cdot n\cdot n)\cdot C\) same \(N\times C\times H\times W\) \(N\times (2\cdot n\cdot n)\cdot C\times H\times W\)
普通卷积 \(n\times n\times C\times \hat{C}\) 任意 \(N\times C\times H\times W\) \(N\times \hat{C}\times \hat{H}\times \hat{W}\)

上表中:

这里存疑。论文中讲:

Offsets通过将卷积应用于相同的Input Feature Map,并保持与当前普通卷积层相同的spatial resolution和dilation。
The offsets are obtained by applying a convolutional layer over the same input feature map. The convolution kernel is of the same spatial resolution and dilation as those of the current convolutional layer.

我觉得可能是对于反向传播的考虑。

可变形卷积层分两路进行:

  1. 上路:Input Feature Map与可变形卷积核卷积,得到Offsets,具体大小看上表,并且Offsets的Spatial Resolution和Input Feature Map一样14

  2. 下路:Input Feature Map先与Offsets计算,然后与普通的卷积核卷积。这里讲起来比较复杂了,因为Offsets中每一个像素点上的Channel为\((2\cdot n\cdot n)\cdot C\),这么多的参数该怎么使用呢?为了画图简便起见,我们就令Input Feature Map的Channel为1,\(n\)为3,这样Offsets的Channel为\(2\times 3\times 3\times 1=18\),我们以Input Feature Map中坐标为\((N', 1, x,y)\)的点,即下图中的蓝点为例进行计算。红色的为卷积区域,我们用\(\text{Offsets}(a, b, c, d)\)表示Offsets中的值。上面的那个图可以很好地说明可变形卷积的原理,但对于真正理解可变形网络是有误导作用的。所以真正理解可变形卷积请看下图。虽然蓝点是绝对不动的,但是它相对卷积核是在移动的!
    bi
    当蓝点在卷积区域右下角的时候,我们与卷积核相乘的不是Input Feature Map中\((N', 1, H',W')\)的值,而是\((N', 1, x+\text{Offsets> }(N',0,x,y),y+\text{Offsets}(N',1,x,y))\)。因为\(x+\text{Offsets}(N',0,x,y)\)与\(y+\text{Offsets}(N',1,x,y))\)的值一般都是小数,Feature Map上肯定没有对应的像素(像素点的坐标不都是整数嘛),所以我们通过双线性插值计算得到这个坐标点上的值。以此类推,在卷积核移动的过程中,与卷积核相乘的值分别为Input Feature Map中\((N', 1, x+\text{Offsets}(N',2,x,y),y+\text{Offsets}(N',3,x,y))\)的值、\((N', 1, x+\text{Offsets}(N',4,x,y),y+\text{Offsets}(N',5,x,y))\)的值、\((N', 1, x+\text{Offsets}(N',6,x,y),y+\text{Offsets}(N',7,x,y))\)的值……

v2: More Deformable, Better Results

《Deformable ConvNets v2》这篇论文主要是对《Deformable Convolutional Networks》加了一个权重,由\(\ref{offset_conv}\)变为:
\[
y(p)=\sum\limits_{k=1}^K\ w_k\cdot x(p+p_k+\Delta p_k)\cdot \Delta m_k
\]
维度如下表:

卷积方式 卷积核 padding Input Feature Map Output
可变形卷积 \(n\times n\times C\times (3\cdot n\cdot n)\cdot C\) same \(N\times C\times H\times W\) \(N\times (3\cdot n\cdot n)\cdot C\times H\times W\)
普通卷积 \(n\times n\times C\times \hat{C}\) 任意 \(N\times C\times H\times W\) \(N\times \hat{C}\times \hat{H}\times \hat{W}\)

\((3\cdot n\cdot n)\cdot C\)中\((2\cdot n\cdot n)\cdot C\)是用于偏移的,多出来的\(n\cdot n\cdot C\)就是新加的权重了。

为什么要加这个权重呢?下部分内容来自这里。v2的论文中讲,使用了可形变卷积之后,会覆盖到不相关的内容,影响网络的表现。为了减小不相关区域的影响,我们就想办法消除这些区域。通过学习weight,可以让不相关区域的weight变小。

论文之外

Deformable Group

但是这里有个问题,如果按照上面的方法计算的话,特征图中同一个像素点的不同Channel有不一样的偏移量。GitHub上有人提出了相同的疑问。在源码中有一个名为num_deformable_group的变量,这个变量的作用在modulated_deformable_convolution-inl.h中有解释。这个变量在代码中写为dg。它的意思是,将输入沿Channel Axis分割成dg个部分,在同一个部分的Channel共享相同的偏移量。一般我们都令dg=1,这个意思是一个像素点的所有Channel都做相同的偏移。当然,由于不同的通道负责检测不同的部分,并且具有不同的几何变化,因此在dg!=1时网络具有更大的灵活性。因此我们将上表改成(这里就不讨论v2了):

卷积核 padding 输入 输出
\(n\times n\times\text{dg}\cdot \frac{C}{\text{dg}}\times 2\cdot n\cdot n\cdot \text{dg}\) same \(N\times\text{dg}\cdot \frac{C}{\text{dg}}\times H\times W\) \(N\times (2\cdot n\cdot n)\cdot \text{dg}\times H\times W\)

注意如果直接按照这个参数输入机器学习框架的卷积函数(如tf.nn.conv2d)的话,由于和一般的卷积在深度维度上有一点点不一样,所以一定会报维度错误!

Dilation Convolution

如果你去看代码,就会发现关于卷积核的参数有以下五个:

里面的dilation参数指定了卷积核的扩张倍数,使可变形卷积网络可以进行空洞卷积,增加感受野。这一部分我也没有怎么研究,也没有什么话好讲,就这样吧。

Bilinear Interpolation

我们从头开始推导双线性插值。下面这段是抄维基的,但是维基上讨论的是一般情况,即\(|x_2-x_1|\)和\(|y_2-y_1|\)不一定为\(1\)的情况,我们在这里令\(|x_2-x_1|=1\),\(|y_2-y_1|=1\)。

假如我们想得到\(P(x,y)\)处的值,且已知四个点\(Q_{11}(x_1,y_1)\)、\(Q_{12}(x_1,y_2)\)、\(Q_{21}(x_2,y_1)\)、\(Q_{22}(x_2,y_2)\)的值。

首先在\(x\)方向上进行线性插值,得到(其实这个地方早就可以化简了,但是我是直接复制的,就懒得改了😝):
\[
\begin{align*}
f(x,y_{1})&\approx {\frac {x_{2}-x}{x_{2}-x_{1}}}\cdot f(Q_{11})+{\frac {x-x_{1}}{x_{2}-x_{1}}}\cdot f(Q_{21})\\
f(x,y_{2})&\approx {\frac {x_{2}-x}{x_{2}-x_{1}}}\cdot f(Q_{12})+{\frac {x-x_{1}}{x_{2}-x_{1}}}\cdot f(Q_{22})
\end{align*}
\]

然后在\(y\)方向上进行线性插值,得到:
\[
\begin{align*}
&f(x,y)\\
\approx& {\frac {y_{2}-y}{y_{2}-y_{1}}}\cdot f(x,y_{1})+{\frac {y-y_{1}}{y_{2}-y_{1}}}\cdot f(x,y_{2})\\
=&{\frac {y_{2}-y}{y_{2}-y_{1}}}\left({\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{11})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{21})\right)+{\frac {y-y_{1}}{y_{2}-y_{1}}}\left({\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{12})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{22})\right)\\
=&{\frac {1}{(x_{2}-x_{1})(y_{2}-y_{1})}}{\big (}f(Q_{11})(x_{2}-x)(y_{2}-y)+f(Q_{21})(x-x_{1})(y_{2}-y)+f(Q_{12})(x_{2}-x)(y-y_{1})+f(Q_{22})(x-x_{1})(y-y_{1}){\big )}\\
=&{\frac {1}{(x_{2}-x_{1})(y_{2}-y_{1})}}\cdot {\begin{bmatrix}x_{2}-x&x-x_{1}\end{bmatrix}}\cdot {\begin{bmatrix}f(Q_{11})&f(Q_{12})\\f(Q_{21})&f(Q_{22})\end{bmatrix}}\cdot {\begin{bmatrix}y_{2}-y\\y-y_{1}\end{bmatrix}}\\
=&{\begin{bmatrix}x_{2}-x&x-x_{1}\end{bmatrix}}\cdot {\begin{bmatrix}f(Q_{11})&f(Q_{12})\\f(Q_{21})&f(Q_{22})\end{bmatrix}}\cdot {\begin{bmatrix}y_{2}-y\\y-y_{1}\end{bmatrix}}\\
=&(x_2-x)\cdot (y_2-y)\cdot f(Q_{11})+(x-x_1)\cdot (y_2-y)\cdot f(Q_{21})\\
&+(x_2-x)\cdot (y-y_1)\cdot f(Q_{12})+(x_2-x)\cdot (y-y_1)\cdot f(Q_{22})
\end{align*}
\]

下面我们要把它变成卷积形式,得到核函数。以下部分参考自《Linear Methods for Image Interpolation》和这里

首先,我们将\(x_1\)、\(x_2\)、\(y_1\)、\(y_2\)用\(x\)表示,则:

\(x\)表示
\(x_1\) \(\lfloor x\rfloor\)
\(x_2\) \(\lfloor x\rfloor+1\)
\(y_1\) \(\lfloor y\rfloor\)
\(y_2\) \(\lfloor y\rfloor+1\)

然后将新的坐标代入上式:

\[
\begin{equation}
\begin{split}
f(x,y)=&(1-<x>)(1-<y>)\cdot f(Q_{11})&+&<x>(1-<y>)\cdot f(Q_{21})\\
+&(1-<x>)<y>\cdot f(Q_{12})&+&<x><y>\cdot f(Q_{22})
\end{split}\label{final_bilinear}
\end{equation}
\]

上式中,\(<x>:=x-\lfloor x\rfloor\)。

我们将其转为卷积形式:
\[
\begin{align*}
f(\boldsymbol{p})&=\sum\limits_n^H\ \sum\limits_m^W\ g_{nm}^c\max(0,1-|fuck|)\cdot \max(0,1-|fuck|)\\
&=\sum\limits_{\boldsymbol{q}}\ G(\boldsymbol{q},\boldsymbol{p})\cdot x(\boldsymbol{q})
\end{align*}
\]

\(\ref{bilinear_conv}\)中,\(\boldsymbol{p}\)、\(\boldsymbol{q}\)均为二维,展开写就是,\((p_x,p_y)\)和\((q_x,q_y)\)。\(\boldsymbol{p}\)、\(\boldsymbol{q}\)枚举了\(f\)中的所有位置。\(G(\cdot,\cdot)\)是双线性插值的核函数。注意,\(G\)是二维的,它有两个一维的核:
\[
\begin{equation}
G(\boldsymbol{q},\boldsymbol{p})=g(q_x,p_x)\cdot g(q_y,p_y)\label{twokernel}
\end{equation}
\]

其中,\(g(a,b)=\max(0,1-|a-b|)\)。\(\ref{bilinear_conv}\)计算起来很快,因为\(G(q,p)\)在很多地方都是\(0\)15,对于不是围绕点\(p\)周围的四个整数点,\(1-|a-b|\)都是负数,\(g(a,b)=0\)。

我们把公式\(\ref{bilinear_conv}\)展开来看:
\[
\begin{align*}
f(p)=&\sum\limits_q\ G(q,p)\cdot f(q)\\
=&\sum\limits_q\ g(q_x,p_x)\cdot g(q_y,p_y)\cdot f(q)\\
=&\sum\limits_q\ \max(0,1-|q_x-p_x|)\cdot \max(0,1-|q_y-p_y|)\cdot f(q)
\end{align*}
\]

你把\(f\)中的坐标代入上式,就会发现和\(\ref{final_bilinear}\)是一样的。我没有学过泛函分析,核函数这一块不是很懂,这一部分理解不深。

Backpropagation

这部分内容只有在arXiv上的版本上有。下面部分内容来自这里和Spatial Transformer Networks16

在\(\ref{offset_conv}\)中,\(\Delta p_n\)的梯度按如下方法计算:
\[
\frac{\partial\ \boldsymbol{y}(p_0)}{\partial\ \Delta\ \boldsymbol{p}_n}
=\sum\limits_{\boldsymbol{p}_n\in \mathscr{R}}\ \boldsymbol{w}(\boldsymbol{p}_n)\cdot \frac{\partial\ \boldsymbol{x}(\boldsymbol{p}_0+\boldsymbol{p}_n+\Delta \boldsymbol{p}_n)}{\partial\ \Delta \boldsymbol{p}_n}
=\sum\limits_{\boldsymbol{p}_n\in \mathscr{R}}\ \left[\boldsymbol{w}(\boldsymbol{p}_n)\cdot \sum\limits_q\ \frac{\partial\ G(\boldsymbol{q},\boldsymbol{p}_0+\boldsymbol{p}_n+\Delta \boldsymbol{p}_n)}{\partial\ \Delta \boldsymbol{p}_n}\cdot \boldsymbol{x}(\boldsymbol{q})\right]
\]

其中\(\frac{\partial\ G(\boldsymbol{q},\boldsymbol{p}_0+\boldsymbol{p}_n+\Delta \boldsymbol{p}_n)}{\partial\ \Delta \boldsymbol{p}_n}\)可以从式\(\ref{twokernel}\)中得到。

注意,\(\Delta\boldsymbol{p}_n\)是二维的,我们用\(\partial\ \Delta\boldsymbol{p}_n\)来简化地表示\(\partial \Delta p_n^x\)和\(\partial \Delta p_n^y\)。

Deformable RoI Pooling

这部分是论文买一送一的🤣。

RoI Pooling

我没有搞过目标检测,对RoI Pooling也不是很熟,所以还是提一嘴。下面的内容来自这里

目标检测通常分为两个阶段:

  1. Region Proposal:给定一张输入图像找出物体可能存在的所有位置。这一阶段的输出应该是一系列物体可能位置的Bounding Box。这些通常称之为Region Proposal或者Regions of Interest(RoI);
  2. Final Classification:确定上一阶段的每个RoI是否属于目标一类或者背景。通常在Proposal Phase,我们必须生成许多感兴趣的区域。为什么?如果在第一阶段(区域提议)中未检测到对象,则无法在第二阶段对其进行正确分类。这就是为什么这个地区的提案有很高的召回率非常重要。这是通过生成大量提案(例如,每帧几千个)来实现的。在检测算法的第二阶段中,大多数将被归类为背景。

这种目标检测的手法存在的问题是:

这就是RoI Pooling提出的根本原因。RoI Pooling最早在Fast R-CNN17中提出,用于对象检测。该图层有两个输入:

  1. 从具有多个卷积和最大池层的深度卷积网络获得的固定大小的Feature Map;
  2. 表示RoI列表的\(N\times 5\)矩阵,其中\(N\)是RoI的数量。第一列表示图像索引,其余四列是区域左上角和右下角的坐标。

对于来自RoI列表的每个RoI,我们都采取如下操作:

  1. 根据输入RoI列表矩阵,将RoI映射到Feature Map对应位置;
  2. 将映射后的区域划分为相同大小的bin(bin数量与输出的维度相同);
  3. 对每个bin进行最大池化。

这样我们就将任意大小的RoI转换为固定大小的feature。具体操作看图:
roi_pooling-1

Get Offsets

这部分靠谱资料比Deformable Convolution还难找,下面部分内容参考这里

Deformable RoI Pooling

我们的参数表示如下(下面都省掉了通道维度):

对于第\((i,j)\)个bin(\(0\leq i,j\leq k\)):
\[
\begin{equation}
y(i,j)=\sum\limits_{\boldsymbol{p}\in \text{bin}(i,j)}\ \frac{\boldsymbol{x}(\boldsymbol{p}_0+\boldsymbol{p})}{n_{ij}}\label{roipooling}
\end{equation}
\]

其中,\(n_{ij}\)为该bin中像素的个数。第\((i,j)\)个bin的范围是:
\[
\lfloor i\cdot \frac{w}{k}\rfloor\leq p_x\leq \lceil(i+1)\cdot \frac{w}{k}\rceil\\
\lfloor j\cdot \frac{h}{k}\rfloor\leq p_y\leq \lceil(j+1)\cdot \frac{h}{k}\rceil
\]

我们对其增加一个偏移项\({\Delta {\boldsymbol{p}}_{ij}|0\leq i,j\leq k}\):
\[
\begin{equation}
y(i,j)=\sum\limits_{\boldsymbol{p}\in \text{bin}(i,j)}\ \frac{\boldsymbol{x}(\boldsymbol{p}_0+\boldsymbol{p}+\Delta \boldsymbol{p}_{ij})}{n_{ij}}\label{roipoolingoffset}
\end{equation}
\]

fig3
上面的图演示了我们如何得到偏移量:

  1. 首先我们使用公式\(\ref{roipooling}\)从RoI中得到Pooled Feature Map;

  2. 将Pooled Feature Map连接到一个全连接层(FC Layer),生成大小为\(2\times k\cdot k\),正则化(normalized)的Offsets,\(\Delta\hat{\boldsymbol{p}}_{ij}\)。因为Pooled Feature Map的大小是固定的,所以这样做是没有问题的。我们将这个正则化Offsets与RoI的width和height做element-wise product,得到Offsets\(\Delta\boldsymbol{p}_{ij}\):
    \[
    \Delta\boldsymbol{p}_{ij}=\gamma\cdot \Delta\hat{\boldsymbol{p}}_{ij}\circ(w,h)
    \]
    注意,Offsets中,和Deformable Convolution一样,一个在\(x\)方向上偏移,一个在\(y\)方向上偏移,且按一个bin一个bin地偏移,不是一个像素一个像素地偏移,所以总共的参数量为\(2\times k\cdot k\)。并且Offsets中,\(\Delta\hat{\boldsymbol{p}}_{ij}\)下面要和\((w,h)\)做element-wise product(要求相乘的两个矩阵维度一样),所以我写成了二维。

    在这里解释一下为什么要做这个正则化。因为每个RoI是不一样大的,但是他们分成的bin是一样多的,都是\(k\times k\),这样不同的RoI的bin也是不一样大的。为了贴合大小不一样的bin,所以这里正则化(一般是到\([0,1]\)),然后再在\(x\)方向上和\(y\)方向上分别乘bin的长宽18

  3. 对于偏移后的bin,由于\(\boldsymbol{p}_0+\boldsymbol{p}+\Delta \boldsymbol{p}_{ij}\)不是整数,所以用双线性插值计算出\(x(\boldsymbol{p}_0+\boldsymbol{p}+\Delta \boldsymbol{p}_{ij})\)处的值再用公式\(\ref{roipoolingoffset}\)计算\(y(i,j)\)。

Deformable Position-Sensitive(PS) RoI Pooling

fig4
现在来讲讲PS RoI Pooling。这篇文章中关于PS RoI Pooling的原理讲得很好:

如果一个RoI含有一个类别\(c\)的物体,那么作者将该RoI划分为\(k\times k\)个区域,分别表示该物体的各个部位,比如假设该RoI中含有人这个物体,\(k=3\),那么就将“人”划分为了9个子区域,top-center区域毫无疑问应该是人的头部,而bottom-center应该是人的脚部,而将RoI划分为\(k\times k\)个区域是希望这个RoI在其中的每一个区域都应该含有该类别\(c\)的物体的各个部位,即如果是人,那么RoI的top-center区域就必须含有人的头部。而当这所有子区域都含有各自对应的该物体的相应部位后,那么分类器才会将该RoI判断为该类别。物体的各个部位和RoI的这些子区域是“一一映射”的对应关系(这就像《游戏王》中的对黑暗大法师的召唤一样,要集齐5张被封印的部位才能召唤出黑暗大法师)。

看上图下路,\(k\times k\)大小的RoI Pooling经过\(1\times 1\)卷积层,被映射成大小为\( k^2\cdot(C+1)\times k\times k\)的Score Maps。\(C+1\)表示将要被分成的\(C\)个类别加上背景,每个类别都有\(k^2\)个score maps。

假设是“人”这个类别,那么其中有\(k^2\)个score maps。每一个score map表示“原图中的哪些位置含有人的某个一个部位”,而该score map会在含有“该score map对应的人体的某个部位”的位置有“高响应值”,也就是说每一个score map都是用来“描述人体的其中一个部位出现在该score map的何处,而在出现的地方就有高响应值”。那么好了既然是这样,那么我们只要将RoI的各个子区域对应到“属于人的每一个score map”上然后获取它的响应值不就好了。对,就是这样。但是要注意,由于一各score map都是只属于“一个类别的一个部位”的,所以RoI的第\(i\)个子区域一定要到第\(i\)张score map上去找对应区域的响应值,因为RoI的第\(i\)的子区域需要的部位和第\(i\)张score map关注的部位是一样的,所以就是这样的对应关系。那么现在该RoI的\(k\times k\)个子区域都已经分别到“属于人的\(k\times k\)个score maps”上找到其响应值了,那么如果这些响应值都很高,那么就证明该RoI是人呀。不过,当然这有点不严谨,因为我们只是在“属于人的\(k^2\)个score maps”上找响应值,我们还没有到属于其它类别的score maps上找响应值呢,万一该RoI的各个子区域在属于其它类别的上的score maps的响应值也很高,那么该RoI就也有可能属于其它类别呢?是吧,万一2个类别的物体本身就长的很像呢?所以呢,当然就是看那个类别的响应值更高了。

我们再看上图上路,Input Feature Map通过卷积层,生成一个全空间尺度的Offsets。

那个图其实是很有深意的。你看上路中每个bin的颜色,和Offset Fields中每一层的颜色(每种颜色有\(2\cdot (C+1)\)层),就知道这么多偏移量是如何使用的了。比如说你要看“人”这一类的偏移量,就去每个颜色中找属于“人”的两层。一共有\(k^2\)个颜色,这样我们就有\(2\cdot k^2\)个参数,正好可以完成偏移。你要看“树”这一类的偏移量,就去每个颜色中找属于“树”的两层……每一类每一类一偏移,每一个bin一个bin一偏移。

RoI Pooling PS RoI Pooling Offsets Fields
\(k\times k\) \(k^2\cdot (C+1)\times k\times k\) \(2\times k^2\cdot (C+1)\times k\times k\)

Backpropagation

\[
\begin{align*}
\frac{\partial\ \boldsymbol{y}(i,j)}{\partial\ \Delta\boldsymbol{p}_{ij}}
&=\frac{1}{n_{ij}}\ \sum\limits_{\boldsymbol{p}\in\text{bin}(i,j)}\ \frac{\partial\ \boldsymbol{x}(\boldsymbol{p}_0+\boldsymbol{p}+\Delta \boldsymbol{p}_{ij})}{\partial\ \Delta \boldsymbol{p}_{ij}}\\
&=\frac{1}{n_{ij}}\ \sum\limits_{\boldsymbol{p}\in\text{bin}(i,j)}\ \left[ \sum\limits_{\boldsymbol{q}}\ \frac{\partial\ G(\boldsymbol{q},\boldsymbol{p}_0+\boldsymbol{p}+\Delta\boldsymbol{p}_{ij})}{\partial\ \Delta \boldsymbol{p}_{ij}}\cdot \boldsymbol{x}(\boldsymbol{q})\right]
\end{align*}
\]

实验(待补)

虽然写着待补但是之后估计也不会补了hh。我真的对图像识别没得兴趣,不想看。

但是这里还是有要讲一点的,在v2的论文中,作者说多堆叠几个Deformable Convolution对实验效果提升很大。

Deformable Convolution和Deformable RoI Pooling都和他们的普通形态有着相同的输入和输出,因此他们可以替换现存的CNN中的相应部分19

在训练中,我们将用于得到Offsets的卷积层和全连接层使用zero weights初始化。他们的学习率\(\beta\)默认为\(1\)。在R-CNN中,\(\beta=0.01\)20

我们为了把deformable ConvNets集成到state-of-the-art CNN中,需要两步:

  1. 使用深层的全卷积网络生成Feature Map;
  2. 使用一个浅层的Task Specific Network从这个Feature Map中生成结果21

理解

关于堆叠

fig5
当可形变卷积堆叠起来的时候,复合形变的影响是深远的22

左边,标准卷积中,感受野和采样位置是固定的;右边,在可形变卷积里,感受野和采样位置可以随着物体的大小和形状而调整23。看左边的小羊和右边的大羊,小羊在标准卷积中被定位到了肩膀,在可形变卷积中,和大羊一样,被准确地定位到了肚子。

fig6
展示了Deformable Convolution是如何适应物体的。

fig7

在上图中,我们也可以很好地看见可形变卷积对物体的适应。标准RoI pooling中网格结构不再规则。RoI bin会偏移。尤其是对于非刚性物体,定位效果增强明显24

相关工作

与这篇文章最相关的要数Spatial Transform Networks(STN)了。

The offset learning in deformable convolution can be considered as an extremely light-weight spatial transformer in STN. However, deformable convolution does not adopt a global parametric transformation and feature warping. Instead, it samples the feature map in a local and dense manner.

STN使用的是仿射变换,而Deformable ConvNets使用的是更泛化的偏移量。

其他的相关工作还有很多,可以去看看论文3.1节,In Context of Related Works。

一些思考和质疑

一个思考

在知乎的这个回答中,作者对卷积有很好的描述:

感觉名字叫extended dilated convolution更合适。 用convolution去学习dilatation的值,和STN异曲同工。

卷积、池化这种操作,其实可以分为三个阶段:

  1. indexing->im2col
  2. reduce->sum
  3. reindexing->col2im

在每一阶段都可以做一些事情。用data driven的方式去学每一阶段的参数,也是近些年的主流方向。

一个质疑

另外一篇对这个论文有很好思考的文章中说道:

bilinear sample其实是一个分段线性函数,所以逻辑上在bp的时候,你要想你的目的是让loss下降的话,就不能让你的step太大以至于超过来当前的线性区间,也就是你在当前四个点中算出来梯度,如果你更新后跳到另外四个点上来,理论上这次的gradient的更新就是错误的,loss是不一定下降的。

但是话说回来,如果不跳到另外四个点,这个offset永远限制在当前四个点里面的话,也是毫无意义的。话再说回来,因为整个feature map还是smooth的,这也跟图像的性质有关,所以我们还是比较相信只要你的学习率不是很大,loss还是会下降的。


  1. Dai J, Qi H, Xiong Y, et al. Deformable convolutional networks[C]//Proceedings of the IEEE international conference on computer vision. 2017: 764-773. 

  2. Zhu X, Hu H, Lin S, et al. Deformable convnets v2: More deformable, better results[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 9308-9316. 

  3. Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[C]//Advances in neural information processing systems. 2015: 2017-2025. 

  4. Girshick R, Iandola F, Darrell T, et al. Deformable part models are convolutional neural networks[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2015: 437-446. 

  5. They add small amount of parameters and computation for the offset learning. They can readily replace their plain counterparts in deep CNNs and can be easily trained end-to-end with standard back-propagation. The resulting CNNs are called deformable convolutional networks, or deformable ConvNets. 

  6. A key challenge in visual recognition is how to accommodate geometric variations or model geometric transformations in object scale, pose, viewpoint, and part deformation. 

  7. The first is to build the training datasets with sufficient desired variations. This is usually realized by augmenting the existing data samples, e.g., by affine transformation. Robust representations can be learned from the data, but usually at the cost of expensive training and complex model parameters.  

  8. The second is to use transformation-invariant features and algorithms. This category subsumes many well known techniques, such as SIFT (scale invariant feature transform) and sliding window based object detection paradigm. 

  9. First, the geometric transformations are assumed fixed and known. Such prior knowledge is used to augment the data, and design the features and algorithms. This assumption prevents generalization to new tasks possessing unknown geometric transformations, which are not properly modeled.  

  10. Second, handcrafted design of invariant features and algorithms could be difficult or infeasible for overly complex transformations, even when they are known. 

  11. CNNs are inherently limited to model large, unknown transformations. The limitation originates from the fixed geometric structures of CNN modules.  

  12. Because different locations may correspond to objects with different scales or deformation, adaptive determination of scales or receptive field sizes is desirable for visual recognition with fine localization. 

  13. The feature maps and convolution in CNNs are 3D. Both deformable convolution and RoI pooling modules operate on the 2D spatial domain. The operation remains the same across the channel dimension. Without loss of generality, the modules are described in 2D here for notation clarity. Extension to 3D is straightforward. 

  14. The output offset fields have the same spatial resolution with the input feature map. 

  15. Eq. \(\ref{bilinear_conv}\) is fast to compute as \(G(q, p)\) is non-zero only for a few \(q\)s. 

  16. Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[C]//Advances in neural information processing systems. 2015: 2017-2025. 

  17. Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448. 

  18. The offset normalization is necessary to make the offset learning invariant to RoI size. 

  19. Both deformable convolution and RoI pooling modules have the same input and output as their plain versions. Hence, they can readily replace their plain counterparts in existing CNNs. 

  20. In the training, these added conv and fc layers for offset learning are initialized with zero weights. Their learning rates are set to \(\beta\) times (\(β = 1\) by default, and \(\beta = 0.01\) for the fc layer in Faster R-CNN) of the learning rate for the existing layers. 

  21. To integrate deformable ConvNets with the state-of-the-art CNN architectures, we note that these architectures consist of two stages. First, a deep fully convolutional network generates feature maps over the whole input image. Second, a shallow task specific network generates results from the feature maps. We elaborate the two steps below. 

  22. When the deformable convolution are stacked, the effect of composited deformation is profound. 

  23. The receptive field and the sampling locations in the standard convolution are fixed all over the top feature map (left). They are adaptively adjusted according to the objects’ scale and shape in deformable convolution (right). 

  24. The regularity of the grid structure in standard RoI pooling no longer holds. Instead, parts deviate from the RoI bins and move onto the nearby object foreground regions. The localization capability is enhanced, especially for non-rigid objects.