1 背景
传统的CNN存在固定几何形状的缺陷: 卷积单元在固定位置对输入特征图进行采样。池化层以固定比率降低空间分辨率;一个ROI(感兴趣区域)池化层将一个ROI分割成固定的空间单元;缺乏处理几何变换的内部机制等。
上述缺陷会引起下列问题:
- 1. 同一CNN层中所有激活单元的感受野大小是相同的,这对于在空间位置上编码语义的高级CNN层是不需要的
- 2. 对于具有精细定位的视觉识别的实际问题,不同的位置对象可能具有不同尺度或形状。因此,固定位置进行采样很难提取完整的对象特征。尺度或感受野大小的自适应确定是可取的。
- 为了解决上面的问题,提出了可变卷积,在文本检测DBNet等文章中使用。
上图左侧是传统的CNN提取特征,由于固定位置进行下采样,很难将羊的位置全部覆盖进行下采样,即没有完整提取羊的特征。
右侧是可形变卷积,由于卷积的形状自适应,进行的下采样卷积核形状不定,可以覆盖整个羊,从而提取到完整羊的特征。
2 可变卷积 DCN1
其中图(a)是传统CNN,(b)©(d)是可变形卷积。
2.1 传统卷积
假设图(a)中虚线框是一个特征图F,9个绿色点构成了一个卷积核,那么该点的值应该是:
其中是卷积核在位置i的值,而(x,y)是卷积核该位置对应图像中一点的坐标。
2.2 可变卷积
可变卷积的计算与传统CNN的类似,只是多了一个偏移量:
该偏移量使得参与计算的点发生变化。如图(b)中,卷积核遍历到了9个绿色点的位置,但是参与计算的是通过9个绿色点和偏移量得到的蓝色点。相当于在控制卷积核的形状。
那么偏移量是如何生成的呢?
将输入特征图通过一个卷积核,输出为大小为原特征图大小,out_channlel为2,代表x和y方向山的偏移量。然后提取ROI区域得到卷积核上在该次采样时的偏移量,如下图所示:
了解上面的东西后,再总结一下DCN 1的过程:
本质上,我们利用的卷积核还是按照传统CNN一样遍历。但是遍历到某个位置后,由于偏量,我的结果是另外位置和卷积核参数的计算结果。
如上图,我们卷积核遍历到了绿色的位置。但是偏量使得我们真正参与计算的是蓝色的点。
3 可变卷积 DCN 2
DCN 2在DCN 1的基础上添加了一个采样点权重:
这个采样点的区域我们不感兴趣,则把权重学习为0即可。