Deformable ConvNet算法详解(对象尺寸/形状变换)

若如初见. 提交于 2019-12-03 10:57:49

算法背景

论文全称:Deformable Convolutional Networks
论文链接:https://arxiv.org/abs/1703.06211
论文日期:2017.6.5

算法提出背景:
CNN本质上仅限于大型模型,对几何变换建模的能力主要来自于广泛的数据增强,庞大的模型容量以及一些简单的手工模型。
同时还受到模型几何变化的限制,因为模型都是固定几何结构,卷积层,池化层以及RoI pooling层。缺失处理几何变化的内部机制。

CNN模型限制的结果:

  • 这就导致了相同CNN层的所有激活单元的感受野尺寸相同,会影响高层CNN层在空间定位编码语义,因为不同的定位与不同的尺寸与变形的对象相关。
  • 所有方法都依赖于基于原始边界框的特征提取,尤其不适用于刚性对象。

因此需要提出一个新的模型,能够适应检测对象尺寸、姿态、视野、部件变形中的几何变化以及模型几何变换。

基于这些要求,过去有两种解决方法:

  • 数据集(足够的变量),进行数据增强。 花费高,模型复杂。
  • 转换不变的特征与算法,eg. SIFT,sliding window。

缺点:

  • 基于几何变换是固定这一假设,泛化能力差;
  • 手工设计不变的特征与算法很困难,并且不灵活。

本文提出了Deformable conv算法,有两个方面的改进:

  1. 在conv5层添加了一个变形卷积,Deformable convolution模型;
  2. 使用了position-sensitive RoI pooling,deformable RoI pooling模型。deformable RoI pooling是CNN中第一个端到端学习池化区域的模型

这两个模型的中心思想:
1. 都是增强带有额外offset的模型的空间采样定位,
2. 同时学习目标任务的offset。

算法细节

Deformable convNets包含Deformable convolution与Deformable RoI pooling两种方式的变换。
这两个模型都是light weight,为offset学习加入了少量的参数与计算。可以通过标准反向传播进行端到端的训练。
在这里插入图片描述

Deformable convolution

在常规的网格采样定位中加入了2D offset, 它允许采样网格的自由变形。而offset是通过之前的feature map中学习到的。 变形取决于局部、密集和自适应方式的输入特征。
在这里插入图片描述
神经网络中的特征映射与卷积都是3D的,但是Deformable convolution与Deformable RoI pooling是在2D的空间领域操作的,但整个通道维度的操作保持不变。

Deformable convolution总共分为两步:

  1. 从输入的特征映射X上使用常规网格R进行采样;
  2. 由W加权的采样值总和,网格R定义感受野的尺寸与扩张。

R = {(-1,-1),(-1,0),…,(0,1),(1,1)}
使用的扩张为1,3 x3的kernel。

对于每一个定位p,在特征映射y上的输出:
在这里插入图片描述
网格R加入了一个增强的偏移:
在这里插入图片描述
此时的输出为:
在这里插入图片描述
offset(△p)通常都是小数,x§的值无法用任意一个网格表示,在本文中,采用双线性插值
在这里插入图片描述
双线性的具体计算过程为,其中q的值为整数:
在这里插入图片描述
其中:g(a, b) = max(0, 1 − |a − b|)。

整个Deformable convolution的流程为:

  1. 首先由输入的特征映射得到offset;
  2. 基于特征映射以及offset通过Deformable convolution获得输出的特征映射。
    在这里插入图片描述
    加入了偏移量的卷及网络是输入卷积层的两倍,输出的特征映射与输入的特征映射尺寸相同。

Deformable RoI pooling

在前一个RoI pooling的常规bin分区中的每一个bin位置都添加一个offset,offset是通过之前的feature map与RoIs学习到的。 为不同形状的对象使用自适应部件定位。

整个过程可以分为两个部分:

  1. 首先通过输入的特征映射学习到offset;
  2. 利用输入的特征映射与offset,通过Deformable RoI pooling生成RoI的输出特征映射。
    在这里插入图片描述
    首先通过RoI pooling得到RoI特征映射,然后利用全连接网络得到归一化的offset,接着利用offset进行双线性插值,使用RoI pooling得到输出的特征映射。

RoI pooling是用于将输入的不规则尺寸的区域变为固定尺寸。
输出的特征映射y:
在这里插入图片描述
加入偏移量之后得到:
在这里插入图片描述
通过全连接得到归一化的offset(∆pij)。再设置参数 γ = 0.1,得到△pij
在这里插入图片描述

Position-Sensitive (PS) RoI Pooling
在这里插入图片描述
Position-Sensitive (PS) RoI Pooling用于获取归一化的偏移量offset,然后利用上面的公式转化为真实的偏移△pij。PS RoI Pooling的整个流程类似于RFCN。

Deformable ConvNets

两种方式都是一样的输入与输出。为了学习offset,加入的卷积层与全连接层均使用零权重进行初始化,Faster RCNN的fc层的学习率设置为已有神经网络的0.01倍,其余的学习率相同。通过双线性插值算法进行反向传播。
整个算法可被分为两步:

  1. 利用FCN学习到特征图;
  2. 浅层任务专用网络从特征映射中生成结果。

Deformable Convolution for Feature Extraction

使用了在ImageNet分类数据集上进行了预训练的ResNet-101与Inception ResNet结构进行特征提取,对Inception ResNet进行了优化,解决了不对齐的问题,优化的版本叫做“Aligned-Inception-ResNet”。

在这两种模型中,移除了平均池化层,使用任意初始化的1 x 1卷积层,将通道维度降为1024维将最后一个卷积块的步长stride由32降为16,从而增加特征图的分辨率。在conv5的最开始将步长由2变为1。为了进行补偿,将该块中所有卷积滤核(卷积核大小>1)的扩展从1改为2

deformable convolution只用于了最后一个卷积块(conv5),在v2版本中,deformable convolution用于了conv3,vonv4,conv5三个卷积块,用于了更多的卷积层,效果也变得更优了。
在这里插入图片描述
Segmentation and Detection Networks

从特征提取神经网络得到的输出特征图上建立了一个任务专用网络。
在神经网络的最后面添加了1 x 1的卷积层会生成C+1个(C个目标类别+1个背景)代表每个像素的分类分数的映射。

候选提取是使用的Category-Aware RPN,基本上和faster RCNN相同,除了在最后使用C+1类的分类器替代原始的2类分类器, 也可以被考虑为SSD的简化版本。

原始的RPN是加在conv4后面,剩下的10层卷积层用于训练每个候选区域,准确率提升,但是速度变慢。在本文中,直接将RPN加在conv5后面。
在池化的RoI特征顶部,加入了维度为1024的全连接层,接着是回归分支与分类分支,这只会轻微地降低准确率。
在这里插入图片描述

实验

使用了两种数据集:

  • PASCAL VOC (20类目标)
    VOC 2012: train:10582,evaluation:1449
  • CityScapes数据集(19类 + 1背景)
    train:2975,evaluation:2975

在这里插入图片描述
感受野和标准卷积中的采样位置都固定在顶部特征图(左)上。它们根据物体的尺寸和形状进行自适应调整自适应卷积(右)。
在这里插入图片描述
实验:

  • 在不同的卷积层添加Deformable ConvNets的对比:
    在这里插入图片描述
  1. 变形的filter的感受野尺寸与目标尺寸关联,指出从图片内容学到的变形有效的;
  2. 北京区域上的filter尺寸介于中型与大型之间,表明识别背景区域需要相对较大的感受野。
  • 使用ResNet-101主干神经网络,对比了deformable modules 与 atrous convolution:
    在这里插入图片描述
  1. 当使用较大的扩展值时,准确性都会提高,这意味着默认网络的感受野太小;
  2. 不同任务的最佳扩展值不同。
  • 添加了Deformable ConvNets与其他常规神经网络的参数与速度对比:
    在这里插入图片描述
  • 在COCO数据集上添加了Deformable ConvNets与其他常规神经网络的对比:
    在这里插入图片描述
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!