可变形卷积:Deformable ConvNets

可变形卷积:Deformable ConvNets

DCNv1论文网址:Deformable Convolutional Networks
DCNv2论文网址:Deformable ConvNets v2: More Deformable, Better Results
DCNv2代码:https://github.com/CharlesShang/DCNv2/tree/pytorch_0.4

DCNv1

1. 空洞卷积(dilated conv)

  • 在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测,之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸
  • 在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。

可变形卷积:Deformable ConvNets_第1张图片

  • (a)普通卷积,1-dilated convolution,卷积核的感受野为3×3
    图中对应3x3的1-dilated conv,和普通的卷积操作一样.

  • (b)空洞卷积,2-dilated convolution,卷积核的感受野为7×7
    图中对应3x3的2-dilated conv,实际的卷积kernel size还是3x3(红点)。 可以看到虽然kernel size只有3x3,但是这个卷积的感受野已经增大到了7x7。

  • ( c) 空洞卷积,4-dilated convolution,卷积核的感受野为15×15
    图中是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。

  • 空洞卷积与普通卷积的相同点在于,卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。

  • 空洞卷积在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变

  • dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者语音文本需要较长的sequence信息依赖的问题中,都能很好的应用dilated conv。

  • 将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。

2. 反卷积(Deconv)

  • deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。
  • 卷积操作可以形象的做个解释:对于标准的k*k卷积操作,stride为s,分三种情况:
    (a)s>1,即卷积的同时做了downsampling,卷积后图像尺寸减小;
    (b)s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小
    (c)0deconv,相当于对图像做upsampling。比如s=0.5时,意味着在图像每个像素之间padding一个空白的像素后,stride改为1做卷积,得到的feature map尺寸增大一倍。

3. 可变形卷积(Deformable convolution)

  • 文章提出了可变卷积和可变ROI采样。原理是一样的,就是在这些卷积或者ROI采样层上,添加了位移变量,这个变量根据数据的情况学习,偏移后,相当于卷积核每个方块可伸缩的变化,从而改变了感受野的范围,感受野成了一个多边形

可变形卷积:Deformable ConvNets_第2张图片

  • (a)是普通的卷积,卷积核大小为3*3,采样点排列非常规则,是一个正方形
    (b)是可变形的卷积,给每个采样点加一个offset(这个offset通过额外的卷积层学习得到),排列变得不规则。
    (c)和(d)是可变形卷积的两种特例。对于(c)加上offset,达到尺度变换的效果;对于(d)加上offset,达到旋转变换的效果。

可变形卷积:Deformable ConvNets_第3张图片

  • 如上图所示,有一个额外的conv层来学习offset,共享input feature maps。然后input feature maps和offset共同作为deformable conv层的输入,deformable conv层操作采样点发生偏移,再进行卷积

可变形卷积:Deformable ConvNets_第4张图片

  • 事实上,可变形卷积单元中增加的偏移量是网络结构的一部分,通过另外一个平行的标准卷积单元计算得到,进而也可以通过梯度反向传播进行端到端的学习。加上该偏移量的学习之后,可变形卷积核的大小和位置可以根据当前需要识别的图像内容进行动态调整,其直观效果就是不同位置的卷积核采样点位置会根据图像内容发生自适应的变化,从而适应不同物体的形状、大小等几何形变

可变形卷积:Deformable ConvNets_第5张图片

  • 上图展示了两层的3*3卷积层的映射。对于标准的卷积,后面层的feature map上的一个点,映射到前面层所对应的感受野是规则的,无法考虑到不同目标的外形、大小不同;而可变形的卷积则考虑到了目标的形变,映射到前面层的采样点大多会覆盖在目标上面,采样到更多我们感兴趣的信息。

4. 可变形ROI pooling(Deformable RoI pooling)

  • RoI pooling是把不同大小的RoI(w*h)对应的feature map 统一到固定的大小(k x k);可形变RoI pooling则是先对RoI对应的每个bin按照RoI的长宽比例的倍数进行整体偏移(同样偏移后的位置是小数,使用双线性差值来求),然后再pooling。
  • 由于按照RoI长宽比例进行水平和竖直方向偏移,因此每一个bin的偏移量只需要一个参数来表示,具体可以用全连接来实现。
    可变形卷积:Deformable ConvNets_第6张图片
  • 如上图所示,RoI被分为3*3个bin,被输入到一个额外的fc层来学习offset,然后通过一个deformable RoI pooling层来操作使每个bin发生偏移。
  • 对于普通的ROI pooling,将ROI分解成k×k个bin,输出为k×k的特征图y,对于第 (i, j)个 bin (0 ≤ i, j < k),有:
    在这里插入图片描述
  • 对于 deformable RoI pooling,offsets {∆pij |0 ≤ i, j < k} 加入到空间bin的位置,有:
    在这里插入图片描述

DCNv2

1. 简介

  • 目标检测一个主要挑战:尺度,姿势,视角和部件变形引起的几何变化。
  • 在DCN v1中引入了两种新的模块来提高卷积神经网络对变换的建模能力,即可变形卷积 (deformable convolution)可变形兴趣区域池化 (deformable ROI pooling)
  • DCNv1引入了可变形卷积,能更好的适应目标的几何变换。但是v1可视化结果显示其感受野对应位置超出了目标范围,导致特征不受图像内容影响(理想情况是所有的对应位置分布在目标范围以内)。
  • 提出DCNv2,主要改进有:(1)扩展可变形卷积,增强建模能力;(2)提出了特征模拟方案指导网络培训:feature mimicking scheme.

2. 可变形卷积可视化

  • 可视化三个内容:
    有效感受野 : 可视化感受野
    有效采样位置: 对采样点求梯度,然后可视化
    误差界限显著性区域 : 参考显著性分析理论,进行可视化

可变形卷积:Deformable ConvNets_第7张图片

  • 从中观察到:
    (1)常规卷积可以一定程度上模拟几何变化,通过网络权重做到的;
    (2)可变形卷积DCNv1模拟几何变化能力显著提升,但是不够精确

3. DCNv2改进

  • 3点改进:
    (1)使用更多的可变形卷积;
    (2)在DCNv1基础(添加offset)上添加幅值参数;
    (3)R-CNN Feature Mimicking.

3.1 使用更多的可变形卷积

  • DCNv1:ResNet-50 Conv5里边的3×​3的卷积层都使用可变形卷积替换。Aligned RoI pooling 由 Deformable RoI Pooling取代。
  • DCNv2:在Conv3, Conv4, Conv5中所有的3×​3的卷积层全部被替换掉。

3.2 在DCNv1基础(添加offset)上添加幅值参数

在DCNV1里,Deformable Conv只学习offset:
可变形卷积:Deformable ConvNets_第8张图片

而在DCNV2中,加入了对每个采样点的权重:
可变形卷积:Deformable ConvNets_第9张图片
其中Δpk是学到的offset,Δmk是学到的权重。这样的好处是增加了更大的自由度,对于某些不想要的采样点权重可以学成0。

  • Δpk和Δmk都是通过在相同的输入feature map 上应用的单独卷积层获得的。 该卷积层具有与当前卷积层相同的空间分辨率。 输出为3K通道,其中前2K通道对应于学习的偏移剩余的K通道进一步馈送到sigmoid层以获得调制量
  • 对于deformable RoIPooling,DCNV2的修改类似:
    在这里插入图片描述
    Δpk和Δmk的值由输入特征图上的分支产生。 在这个分支中,RoIpooling在RoI上生成特征,然后是两个1024-D的fc层。 额外的fc层产生3K通道的输出(权重被初始化为零)。 前2K通道是可学习偏移Δpk, 剩余的K个通道由sigmoid层标准化以产生Δmk。

3.3 R-CNN Feature Mimicking

  • Revisiting RCNN中作者发现把R-CNN和Faster RCNN的classification score结合起来可以提升performance,说明R-CNN学到的focus在物体上的feature可以解决redundant context的问题。但是增加额外的R-CNN会使inference速度变慢很多。
  • DCNV2里的解决方法是把R-CNN当做teacher network,让DCNV2的ROIPooling之后的feature去模拟R-CNN的feature。
    可变形卷积:Deformable ConvNets_第10张图片
  • 得到ROI之后,在原图中抠出这个ROI,resize到224x224,再送到一个RCNN中进行分类,这个RCNN只分类,不回归。然后,主网络fc2的特征去模仿RCNN fc2的特征,实际上就是两者算一个余弦相似度,1减去相似度作为loss即可.

4. 实验结果

可变形卷积:Deformable ConvNets_第11张图片

你可能感兴趣的:(论文笔记,卷积,网络,计算机视觉)