论文链接:https://arxiv.org/abs/1703.06211
代码链接:https://github.com/msracver/Deformable-ConvNets(官方实现,但是release的版本是迁移到MXNet上的,速度和performance上有些出入)
MSRA的文章,严格意义上讲,deformable convolutional不仅仅只适用于object detection,作为对常见的卷积的一种改良,它可以广泛应用在各个网络中,和空洞卷积一样,是对传统卷积的改良,而且某种意义上也可以说是空洞卷积的进一步拓展。
这篇文章的motivation其实比较简单,我们都知道,常规的卷积,包括池化这些操作,不管你怎么累加,基本得到的都是矩形框……这个其实非常不贴合实际,在对不规则的目标建模的时候有非常大的局限性。
作者认为克服建模形变困难主要是两种方法:
至于这个位置偏移是怎么做的?看下个部分
我们知道,一般的卷积是这种形式的:
留意到p0是中心点,pn是属于R的3x3的kernel的9个位置,因此这是在3x3方格内采样的一个规则卷积,而可形变的卷积就是在x(po+pn)之中再加上一个偏移量:
在实际当中,因为添加的这个偏移量往往是小数,导致比较难处理,作者采用的办法是双线性差值,根据相邻的点来进行计算具体公式如下,留意到这里的a-b如果差值大于1了,g就是0,所以只有比较接近的点才对线性差值的点有效果:
(以上是公式化的内容,关于差值内容如何求导可以到附录里面找)
重点来了,怎么得到这个偏移量?,可变卷积神经网络的示意图如下图所示:
deformable convolution在特征图的每个位置都生成一个偏移量,注意是特征图的每个位置而不是卷积核的每个位置,我之前也经常误解为后者……实际上这里的特征图经过conv得到一个2N的offset field,N就是通道数,field是和feature map相同的,这样HxWxN的feature map就得到了一个HxWx2N的offset filed,正好每个feature map位置有两个偏移量。
然后将偏移量对应到原来feature map的每个位置,就可以在原来的feature map上做deformable卷积了~还不理解的话可以看这篇博客https://blog.csdn.net/u011974639/article/details/79996353,是对照着代码讲的,很详细,不过这个只是帮助理解原理的,不能直接用,没有重写op,太慢。
还需要注意的一点是,如果input feature map到output feature map用的是空洞卷积之类的特殊结构的话,生成offset field的卷积也要使用相应的结构以保证一致。
为RoI pooling添加deformable机制其实和卷积的非常类似。因为本身RoI pooling的时候和卷积一样,选取的也是方形区域,我们要做的也是增加偏移量。原来的RoI pooling过程可以表示为如下:
那么新的RoI pooling计算公式则如下:
而它的偏移量的网络结构和计算过程如下图所示:
其中,要注意的有两点:
这个部分没什么太多内容要介绍的,因为deformable卷积使用前后feature map是不变化的,因此大致上就是将卷积和Pooling方法直接替换到一些主流方法里就好……一些网络设置就不谈了,说两个我感觉比较重要的点:
作者绘制了一些图来方便我们理解deformable卷积,例如常规卷积和可形变卷积的一些对比:
最上面的top feature map的activation units,中间层和最下层是上一层和上上层的卷积,可以看到它们产生的过程。这张图应该会更清晰一点的:
绿色的点是activation units,而红色的点是激活点在3个level的deformable filters采样位置(一共9的三次方700多个点),左中右分别是背景类,小目标和中等目标的采样点分布,和传统的卷积还是产生了很大差异的。
另外也有关于RoI pooling中的9个Bin和gt的图,可以看到和传统的方法的差别,RoI pooling也会根据物体产生形变:
作者认为可形变卷积的优势还是很大的,包括:
这是作者给出的最终结果,class-aware RPN是指分类别的RPN,可以视作一个简易版本的SSD,而对DeepLab的方法笔者也不是很了解。
总的来说,这个工作亮点是很多,包括对卷积的改良,知乎上对这个工作有一些讨论包括评论我觉得还是很不错的:
https://www.zhihu.com/question/57493889/answer/153369805 (包括评论),卷积改变为类似采样的思路都是很有意义的。但是看完之后总感觉也有一些疑问,比如怀疑是否一层网络真的能有效学习偏置,不同图片的大量不同物体在offset优化上会不会引发竞争什么的,不过都属于很难量化和考察的内容了,最后还是要靠实验结果说话,大概是目前炼丹的通病吧,有兴趣的也可以留言讨论下~