论文地址:http://arxiv.org/abs/1811.11168html
做者:pprpgit
时间:2019年5月11日github
DCNv1引入了可变形卷积,能更好的适应目标的几何变换。可是v1可视化结果显示其感觉野对应位置超出了目标范围,致使特征不受图像内容影响(理想状况是全部的对应位置分布在目标范围之内)。网络
为了解决该问题:提出v2, 主要有性能
结果:性能显著提高,目标检测和分割效果领先。学习
Geometric variations due to scale, pose, viewpoint and part deformation present a major challenge in object recognition and detection.测试
目标检测一个主要挑战:尺度,姿式,视角和部件变形引发的几何变化ui
v1 引入两个模块:spa
为了理解可变形卷积,进行了可视化操做:.net
samples for an activation unit tend to cluster around the object on which it lies.
激活单元样本点汇集在目标附近
可是覆盖范围不够精确,超出the area of interest
由此提出DCNv2, 具备加强建模的能力,可用于学习可变形卷积
with enhanced modeling power for learning deformable convolutions.
添加了两种互补的模式:
为了充分利用可变形卷积提取的信息,吸收知识蒸馏的手段,进行培训。
可视化三个内容:
Faster R-CNN中Conv1-Conv4使用在Head中的,Conv5使用在Classification network上
ResNet-50 Conv5里边的3$\times$3的卷积层都使用可变形卷积替换。Aligned RoI pooling 由 Deformable RoI Pooling取代,当offset学习率设置为0,那么Deformable RoI Pooling就退化为Aligned RoI Pooling。 ps: 这是V1中的操做。
从中观察到:
v2 中进行改进的部分主要有三点
在Conv3, Conv4, Conv5中全部的3$\times$3的卷积层所有被替换掉。对于pascal voc简单数据集,堆叠三层以上就会饱和。
回顾一下DCNv1:
R 是至关于3$\times$3的kernel, \(p_0\)是当前中心点,\(p_n\)枚举每个点。
可见,在普通卷积基础上,offset \(\Delta p_n\)是主要改进点。
那DCNv2主要改了哪些地方?
在v1基础上,添加了\(\Delta m_k\), 一个控制幅值变化的量。
ROI pooling是如何改进的?
先看Faster R-CNN中的ROI Pooling:
而后先看DCNv1的Deformable RoI Pooling
主要是添加了offset fields \(\Delta p_{ij}\) 来控制偏移部分。
DCNv2的Deformable RoI Pooling也是将幅值引入,以下图:
相似的也添加了幅值变量,在训练的过程当中进行学习。
采用了相似知识蒸馏的方法,用一个R-CNN分类网络做为teacher network 帮助Faster R-CNN更好收敛到目标区域内。
获得ROI以后,在原图中抠出这个ROI,resize到224x224,再送到一个RCNN中进行分类,这个RCNN只分类,不回归。而后,主网络fc2的特征去模仿RCNN fc2的特征,实际上就是二者算一个余弦类似度,1减去类似度做为loss便可
GitHub几个源码
<https://github.com/msracver/Deformable-ConvNets> 官方提供的版本,有DeepLab, Faster R-CNN, FPN, R-FCN等。源码使用的是mxnet。
https://github.com/open-mmlab/mmdetection 集成了可变形卷积,源码使用的是pytorch。
https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 Pytorch 1.0 最新的完整的DCNv2
http://www.javashuo.com/article/p-xyoutjdt-dh.html
http://arxiv.org/abs/1811.11168