可变卷积网络V2版出来有一段时间了,第一版的代码复现较少,不然就是本地跑不起来。但是V2出来之后V2的源码有一大群,也有一些V1陆陆续续出来对比了,可能是大家看到V2的效果显著,搜了一圈发现出来的V2代码有很多。
论文在这里:arxiv
V1 与 V2 简单不同
- 在DCNV1里,Deformable Conv只学习offset:
- 而在DCNV2中,加入了对每个采样点的权重:
上式就是一个v2的可变形卷积操作的公式,其中△p_k和△m_k分别是采样点k的位置偏移和特征调节系数。要注意的是△p_k和△m_k分别是由不同卷积核得到的,这些卷积层都以特征x作为输入。假设有K个采样点(3x3卷积9个采样点),那么上面卷积层的分辨率和x相同,但是输出有3K个通道,2K对应每个采样点的△p_k(x,y两个方向),K个对应△m_k(要经过sigmoid)。特别重要的是得到△p_k和△m_k的卷积核的参数一开始一定要初始为0,△p_k和△m_k的初始值则为0和0.5。这些新加入的卷积层的学习率则是现有的层的0.1。△m_k就是对不同偏置的权重值,对于某些不想要的采样点权重可以学成0。
以笔记形式记录一些简单部分,可变形卷积分析:
- Effective receptive fields:有效感受野顾名思义就是感受野中贡献突出的区域。
- Effective sampling / bin locations:DCN v1中对dpool各个bin的采样作了可视化。作者也使用节点对于采样位置的梯度大小来说明,通过分析采样点的梯度大小表征卷积的贡献。
- Error-bounded saliency regions:有时候直接去除图片的一些没有影响的区域,节点的值并不会改变。一个节点的贡献区域为图片上能够得到error-bounded的节点值的最小区域。也就是error-bounded saliency region,这些区域就是能够对检测有贡献的区域。
分析下面这图:
在(a)中3x3的各自中,从左往右依次为小物体,大物体,背景。从上到下为上面三种性能的可视化分析。
- 普通的卷积有一定刻画物体几何形变的能力。
- 通过引入可变形卷积,网络刻画几何形变的能力得到了加强。spatial support区域扩展到了整个物体,对于背景,也变得更大了。但是spatial support可能是不准确的,DCNv1和DCNv2对目标边缘刻画更加准确,贡献区域和贡献点比较集中,分布准确。
- 这三种可视化比deformable v1提出的可视化提供了更多的信息
GitHub上找到几个可以对比,同时可以嵌入的pytorch源码:
- ChunhuanLin :提供一个可以测试deform_conv_V1的准确度的demo.py。我的所有准确都是在这个demo.py上跑的。
- 4uiiurz1:一个简单版本的Deformable Convolutional Networks-V2
- chengdazhi: 提供最新的完整的V2中提到的DeformConv和ModulatedDeformConv
使用ChunhuanLin的demo.py进行测试准确率,下面是在2个epoch之后得到的结果:
model | Test set: Average loss | Accuracy |
---|---|---|
ChunhuanLin-Conv2d | 0.7698 | 89% |
ChunhuanLin-DeformConv2D-v1 | 0.4618 | 92% |
4uiiurz1-DeformConv2D-v2 | 0.3851 | 94% |
chengdazhi-DeformConv2D-v2 | 0.2222 | 96% |
chengdazhi-ModulatedDeformConv-v2 | 0.2033 | 96% |
参考
论文阅读:Deformable ConvNets v2: More Deformable, Better Results
Deformable ConvNets V2
论文笔记:Deformable ConvNets v2: More Deformable, Better Results
Deformable ConvNets v2: More Deformable, Better Results
知乎