Deformable Convolution Net论文笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l718531794/article/details/84631406
  1. 论文大致背景及思路
    a. MSRA在2017年的作品,最近出了V2版本。
    b. 提出了两个模块用于加强CNN对变形的适应能力。
    c. 对于几何变化,目前有两种方法:
    i. 构造一个足够强的数据集
    ii. 使用一些具有旋转变形不变性的特征算法,比如SIFT
    d. 上述方法有两个问题:
    i. 我们假定了这些几何变化都是固定且已知的,那么在处理未知情况时,就无法很好地得到结果了。
    ii. 手工设计的特征很难适应复杂的变化。
    e. 那么强大如CNN,能否解决这个问题呢,答案也是否定的。由于CNN的结构中并不包含能处理几何变化的模块,这就造成了在同一层上,所有的激活单元的感受野都是一样的。那么,较高层就无法很好的在空间位置上进行语义的编码,因为不同的位置可能对应着不同尺寸和变形的物体。
    f. 作者提出了deformable convolution 也就是在标准卷积中加入了增加了一层偏移量,使得可以响应不同形状的物体。如下图。偏移量通过输入的特征图学习得到。
    在这里插入图片描述
    g. 第二个部分就是deformable RoI pooling。也是在普通的RoI pooling前对每一块bin都增加了偏移量。也是从前一层学习得到。

  2. 网络结构
    a. Deformable Convolution:
    i. 对于标准卷积,我们可以如下定义:
    在这里插入图片描述
    其中:
    在这里插入图片描述
    ii. 而我们在其中加入偏移量,使得可以响应不同形状位置。即

    在这里插入图片描述
    可以预料,这个偏移量大概率并不是一个整数,那么我们该如何得到对应的位置的值呢。这里使用双线性插值:
    在这里插入图片描述
    在这里插入图片描述
    那么这个该如何反向传播呢,挖个坑,待推导。
    iii. 3*3的卷积核对应的deformable convolution示意图如下:
    在这里插入图片描述

  3. 首先通过一个普通卷积,得到一个和输入分辨率一致的特征图,但是通道数翻倍,对应于X,Y两个轴。然后再和输入图进行带偏移量的卷积。
    b. Deformable RoI Pooling
    i. 首先普及一下RoI Pooling:对于每个W大小的RoI,我们把它划分为kk个块,然后对每一块计算均值,得到一个kk的输出。
    ii. 现在我们加上Deformable,也就是也加上一个偏移量。我们先进行一次pooling,然后通过一个全连接层买得到归一化的偏移量。这里对于偏移量的操作并不理解,挖坑。
    iii. PS RoI Pooling:这里和RoI Pooling大不相同,我们要产生k
    k*(c+1)通道数的分数图,对应于kk个bin和C个类。然后就是相似的给出2通道数的偏移值,对原本的分数图加偏移量,得到结果。
    c. Deformable ConvNets:
    i. 由于上述模块的输入输出和标准模块是一样的,所以可以直接替代对应的模块。训练还是靠反向传播。
    ii. 效果示意如下:
    在这里插入图片描述
    iii. 思路总体来源于根据目标任务,学习和添加偏移量,增大在卷积和池化时的空间采样位置。

PS:这篇文章看的不太清楚,还需要通过看源码和反复研读才能透彻理解。

猜你喜欢

转载自blog.csdn.net/l718531794/article/details/84631406