前一篇博文写过关于形变卷积的部分,但是写的比较粗略,故再来分析、整理一下形变卷积相关知识。
- 因为网络最终用的形变卷积,所以是非看不可。
- 好读书,不求甚解。 不愧是我
初衷
适应几何变换
传统卷积卷积核是正方形,扫描不规则图形也只能用方形区域,而实际任务中,很多东西都不是规则的,例如生物、汽车等。传统卷积核无法适应比较大的变换,故提出了可以变形以适应几何变换的形变卷积。
卷积过程计算
- 传统卷积计算
其中,p0
表示输出特征图的一个点;pn
则是卷积核的坐标。
- 形变卷积计算
其中。最后加了一项delta
表示偏移量, 取值从1-N,N是卷积核尺寸。
这里P0表示输出特征图的点,之所以pn要加p0,因为是3X3卷积核,原始图片9个像素对应新特征图一个像素。
2020-8-19更新
- 采样
此时采样的点加了一项delta
, 可能是小数,因此需要用插值算法来确定采样位置,此处应用的是双线性插值来确定采样的位置,如下:
大致意思是 :先枚举输入特征图x所有的点q,用插值核G做个运算再乘以x(q).
总之这一步就是确定位置。之前看过有关书上讲解双线性采样的问题,可以用公式直接算出来,这边看的不是很明白,但是没那么重要。
从形变卷积公式可以看出,需要学习的参数有两个:卷积核的weight,偏移量
Delta
, 偏移量显得至关重要
- 反向传播学习
偏移量梯度即在上述计算公式中有偏移量这一项的都计算微分。
输出特征图尺寸计算
形变卷积与普通卷积无异,输出特征图尺寸计算需要先知道卷积核大小,再根据公式来计算。卷积核大小与是否使用空洞有关系。
- 空洞卷积卷积核尺寸计算
r 为空洞率, r=1时卷积核尺寸不变,故Pytorch
nn.Conv2D
默认 dilated=1.这里吐槽一下,看了三四个人写的博客,都说dlitated=1表示注入一个空洞,这是错的。不可信!
- 特征图尺寸计算
把空洞卷积卷积核带进去即可。
关于卷积
理论上,卷积核感受野随着卷积层的增加而线性增加;
事实上,有效的感受野是呈高斯分布,即一个卷积核中心的区域的比较有效。
因此实际中,有效的感受野随着卷积层的增加呈平方根增加,是远远不够的。空洞卷积恰好处理这个问题。
2020.7.13更新!
FRY
2020-8-19 第二次更新
Deformable Convolution V2
可形变卷积V2版本,给原始每个偏移的采样点加入了权重,即:
K表示采样位置;最后多了一项每个采样像素权重的控制。
有个地方需要注意:
V1和V2版本,
Offsets
输出通道数均为2K
, 因为每个点偏移需要x,y两个分量来表示,故用2个通道V2版本中输出通道数为
K
,每个点一个权重,故一共K个权重