极简笔记 Deformable Convolutional Networks

允我心安 提交于 2019-12-03 10:43:05

极简笔记 Deformable Convolutional Networks

论文地址:https://arxiv.org/abs/1703.06211

文章核心是提出deformable convolution和deformable roi pooling两种结构模块,使得卷积能够自由形变,打破了方形卷积的形状约束,增强了卷积对于物体几何形变的适应性。
这里写图片描述

先讲deformable convolution,如上图,就是卷积层多出一个分支预测原始卷积核中各个bin对应的卷积位置的offset。这个offset经常是个小数,所以卷积位置的实际取值在是feature map周围像素点的线性插值。用公式表示就是,对于任意位置p0,它的卷积结果就是:

y(p0)=pnRw(pn)x(p0+pn+pn)

其中pn属于卷积核内的相对坐标集合R={(1,1),(1,0),...,(1,0),(1,1)}pn就是fc层预测的offset。因为要考虑插值,所以函数x(p)表示p位置的差值结果(p可以是小数)
x(p)=qG(q,p)x(q)

G(q,p)=g(qx,px)g(qy,py)

g(a,b)=max(0,1|ab|)

这个地方q表示用于插值产生p的邻近的一堆点(就是正常的线性插值,对p周边一些点根据x,y轴距离乘相应的权重)。在反向传播的时候,对offset的求导会涉及这个bin周围的四个像素点的像素值,麻烦一点但是也能算,从y(p0)p0xy(p0)p0y一步步推过来就好。
这里写图片描述

接下来讲deformable roi pooling,如上图,还是一样的操作,把一个尺寸为w×h的图pooling成k×k。对于pooling核中第(i,j)的输出bin(0i,j<k)

y(i,j)=pbin(i,j)x(p0+p+pij)/nij

其中第(i,j)bin的跨度为iwkpx<(i+1)wk,jwkpy<(j+1)wknij表示这个跨度里面有多少个像素点。函数x()和之前一样,注意这里pij=γp^ij(w,h),fc层预测的是归一化的p^ij,需要对应乘宽高,γ是predefined约束来调整offset的量级,文章取值为γ=0.1
这里写图片描述

没完,文章接着提了更强的Position-Sensitive (PS) RoI Pooling,如上图,把分类信息也加在pooling层里面了,上图C表示类别数(+1是背景),k就是pooling的尺寸,等于说每一个(i,j)对应C+1类channel,然后deformable roi pooling(密集恐惧症要犯了。。。)

在实验时候,文章将backbone network最后几层改成了deformable conv + deformable pooling的形式,这些新加offset部分初始为0,学习率设为对应层的学习率乘上系数ββ=1为默认取值,fc层的β=0.01
这里写图片描述
这里写图片描述
这里写图片描述
文章后面的实验以及对比都是在为了说明deformable conv/pooling是一种更加general的卷积形式,常用于增加感受野的atrous conv就是它的一种特例。在对比试验中,不同网络和任务对应的最优atrous conv选择不同,但是使用deformable conv之后都是效果最好的。作者还对比了增加deformable部分后网络的参数量和计算量,都只增加了一点点却有明显的性能提升,说明deformable模块是有效的而不是依靠增加模型复杂度来提高性能的。
这里写图片描述

最后让我们try to understand deformable module,如上图,deformable conv/pooling收敛后的采样点更加与物体位置相关,offset在训练时会偏向于对象强响应的位置,能够更高效地利用对象特征而不是背景特征,在分类、分割、检测上都会有帮助。

个人感觉分类、检测的任务用deformable做有点杀鸡用牛刀,deformable module应该能够处理更加复杂的任务。总之这是一篇非常solid研究,期待后续进展。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!