Deformable Convolution v1, v2 总结

date
Apr 1, 2022
Last edited time
Mar 27, 2023 09:03 AM
status
Published
slug
DeformableConvolution_v1,v2总结
tags
DL
CV
summary
转载
type
Post
origin
Field
Plat
最近在复现其它文章时,发现他们用了 DCN 的网络。这里就总结下 Jifeng Dai 的关于 Deformable Convolution 的这两篇文章。文章挺有 insight 的。

Deformable Conv v1

1. Motivation

1.1 Task 上的难点

视觉任务中一个难点就是如何 model 物体的几何变换,比如由于物体大小,pose, viewpoint 引起的。一般有两类做法:
  • 在数据集上做文章,让 training dataset 就包含所有可能的集合变换。通过 affine transformation 去做 augmentation>
  • 另一种就是设计 transformation-invariant (对那些几何变换不变)的 feature 和算法。比如 SIFT 和 sliding window 的方式。
文章说上述两种方式有问题,几何变换我们是事先知道的,这种不能 generalize 到其它场景和任务中。以及 hand-crafted 的设计适应不了负责场景。

1.2 CNN 的缺陷

对于 geometric transformation 的问题,目前的 CNN 主要是通过 data augmentation 和一些手工设计,比如 max-pooling 解决的(max-pooling 只能解决一些很小程度的变化,比如字母 A 稍微倾斜了一下)。
CNN 的主要问题就在于它的采样操作是 fixed 的。每个点的 receptive field 是一样大的,对 high-level 的语义不太好。

2. Controbution & Details

主要提出了两个模块,Deformable Conv 和 Deformable Pooling。他们的优点是很方便的嵌入的已有的模型中,不需要额外的监督信号。
notion image
这张图很好的诠释了 deformable conv 是怎么做的

2.1 Deformable Convolution

notion image
这个操作很好理解,用另一个一样大小的卷积去学 offset, channel 数是 2N。 N 是 kernel 的面积。比如说,对于 3x3 卷积,也就是说每个 output 点,在 Input feature map 上都有 9 个点要算,N=9, 对于每个点,都有 x 和 y 方向上的 offset。
如果你去看它的代码的话,会发现它还有一个参数,叫 deformable_group, 这个参数在 paper 里是没有被提到了,具体的解释可以参考这个 issue 回答
这里稍微不好想是怎么求反传导数
这里是 forward 的形式,之前的铺垫公式笔记简单,读者可自己看一下。这里,p 就是 offset。用 bilinear sampling 来计算任意位置的 feature 大小。反传公式在这里
但是具体在算 offset 的时候,用了几个 conv, 有什么 trick, 它并没有提,需要看 code。

2.2 Deformable Pooling

notion image

3. Experiments

conv 和 fc layer 一开始是 zero weights. fc layer 的 learning rate 是该层的 0.01,conv 层不变。
论文说在网络的最后 3 层( kernel >1 的层)加 deformable conv 比较有效果。

4. Performance

他们对 detection 和 segmentation 任务都有帮助。
notion image
上面的 visulization 做得很好,如果一个点往回推算,可以看到 sampling 点是不规则的,都集中指定的物体部分。

数值上

notion image
可以看到在 stage5 的最后三层放 deformable conv,就已经饱和了。在 Faster R-CNN 上有 0.6 个点的提高,AP@0.7 上有 2 个点提升 (以 0.7 为阈值算正类,说明预测的 bbounding box 更准确了)。 这上面看好像只有一个点的提升。
文中定义了一个新的 metric, 叫 effective dilation,但是没有完全看懂。
如果把标准 resnet 最后几层的 conv kernel 里的 dilation 变大,效果会更好。
notion image
可以看到 deformable conv 涨了 0.5 个点,再加上 deformable pooling 涨了 0.7 个点。 总共能涨 1.2 个点左右。
notion image
在 params 和速度上的比较。可以看到,param 上的 overhead 其实并不多,说明性能的提升是来自于方法上的优势,而不是 params 上的增加。
总体来说,实验上验证了 deformable conv 的有效性:
  • 直接在 resnet 上加,尝试不同位置
  • ablative study 上验证了 deformable conv 和 deformable pooling
  • 尝试了在大小物体上验证,这个我没想到
  • 和之前的方法对比,比如 dilated conv, 验证是灵活的 dilated conv,这个也没想到
  • 计算了 param 的复杂度,和运行时间

5. Discussion

  • 文章也提到了,它和 STN 以及 Deformable part models 有点像。STN 的细节我还不是特别了解,希望以后有空能仔细看一下。 文章把这个相似性放在 intro 的最后说,写作上值得学习。
  • 我们其实可以把图片想象成连续空间,只是我们的相机做了规则的采样。
  • 文中引用了一篇 Raquel 的文章,说有效的 receptive field 其实并没有我们想象的那么大。随着 layer 数 N 的增加,它是以 sqrt_root(N) 增长的。
  • 应该用更小的网络试试,deformable conv 是否可以把网络深度降下来,这样其实等价节约参数,在小网络上可以试一试。
  • 这篇文章认为是稀疏约束的作用,就是说加了 offset 之后,相当于用了更大 kernel 的标准卷积,但是采样的数量是非常少的。deformable conv 就不用在 weight 上加约束了。
  • 另外我也想到了用采样来代替权重的方法,但是这样的话,权重就都是正值了。这个需要再想一下。
  • 另一个思路是,从 kernel 的角度看,输入的 feature 其实是形变了(把 offset 得到的点,又变回 3x3 的矩形,这样就认为把输入给形变了,只不过这样的形变是局部的,每个 local 上的形变可能不一样,不是全局形变)

6. 问题

  • 在 bilinear sampling 中,每个任意点是受邻居四个点影响的,但是如果 weight 的更新让他们进入了另一个 grid 中,他们的值会发生非常大的变化。这样会不会让训练不稳定? 难道网络倾向于让 offset 在同一个 grid 中更新? (来自这篇文章

7. Future

  • 在视频上是不是可以用一下,时间维度上的 offset ? 可是是文中提到的 [2] ?
  • 在 figure 7 那张图里,其实 offset 后,反而有些小区域是遗漏的。这会让网络总是看一写区域。
  • offset 是不是得学类别不同的,或者应该 channel 不同?

Deformable Conv v2

由于构造卷积神经网络所用的模块中几何结构是固定的,其几何变换建模的能力本质上是有限的。在DCN v1中引入了两种新的模块来提高卷积神经网络对变换的建模能力,即可变形卷积 (deformable convolution) 和可变形兴趣区域池化 (deformable ROI pooling)。它们都是基于在模块中对空间采样的位置信息作进一步位移调整的想法,该位移可在目标任务中学习得到,并不需要额外的监督信号。新的模块可以很方便在现有的卷积神经网络 中取代它们的一般版本,并能很容易进行标准反向传播端到端的训练,从而得到可变形卷积网络 (deformable convolutional network)。但是增加偏移之后可能会将无关的信息考虑进去,影响最终的结果。所以在DCN v2中作者对DCN v1进行了提升,减小无关信息的干扰。

1. Motivation

文章分析了 v1 版本中的问题,在使用了 deformable conv 后,还是会覆盖到 irrelevant context, 影响 performance。 所以 v2 的 contribution 基本上围绕如何消除 irrelevant context 的影响上。
为了分析 network 的 receptive field, 作者用了三个指标:
  • Effective receptive fields: 它是看在原始 image 上,对每个 pixel 的扰动会对 node response 产生多大影响。
  • Effective sampling / bin locations: 看对 sampling location 的扰动,能对 response 有多大影响。
  • Error-bounded saliency regions: 能让 node 保持同样 response 的最小区域。在附录里,作者给了详细的介绍。

2.1 更多的 deformable conv

在 conv 3-5 都用了 deformable conv

2.2 modulated deformable conv

在DCNV1里,Deformable Conv只学习offset:
为了减少 irrelevant 区域的影响,我们就想办法消除这些区域。通过学习 weight, 我们可以让这些区域的 weight 变得比较小。因此在DCNV2中,加入了对每个采样点的权重:
所以在学习 offset 的同时,我们又学习一个权重。这个权重是对每个 location 不同的。同样的操作也适用于 deformable RoIpooling。这样的好处是增加了更大的自由度,对于某些不想要的采样点权重可以学成0。
Modulated deformable RoIPooling也是如此:
的值由输入特征图上的分支产生。 在这个分支中,RoIpooling在RoI上生成特征,然后是两个1024-D的fc层。 额外的fc层产生 通道的输出(权重被初始化为零)。 前 通道是可学习偏移 , 剩余的 个通道由sigmoid层标准化以产生

© Lazurite 2021 - 2024