Deformable ConvNet算法详解(DCN)
算法背景
论文全称:Deformable Convolutional Networks
论文链接:https://arxiv.org/abs/1703.06211
论文日期:2017.6.5
算法提出背景:
CNN本质上仅限于大型模型,对几何变换建模的能力主要来自于广泛的数据增强,庞大的模型容量以及一些简单的手工模型。
同时还受到模型几何变化的限制,因为模型都是固定几何结构,卷积层,池化层以及RoI pooling层。缺失处理几何变化的内部机制。
CNN模型限制的结果:
- 这就导致了相同CNN层的所有激活单元的感受野尺寸相同,会影响高层CNN层在空间定位编码语义,因为不同的定位与不同的尺寸与变形的对象相关。
- 所有方法都依赖于基于原始边界框的特征提取,尤其不适用于刚性对象。
因此需要提出一个新的模型,能够适应检测对象尺寸、姿态、视野、部件变形中的几何变化以及模型几何变换。
基于这些要求,过去有两种解决方法:
- 数据集(足够的变量),进行数据增强。 花费高,模型复杂。
- 转换不变的特征与算法,eg. SIFT,sliding window。
缺点:
- 基于几何变换是固定这一假设,泛化能力差;
- 手工设计不变的特征与算法很困难,并且不灵活。
本文提出了Deformable conv算法,有两个方面的改进:
- 在conv5层添加了一个变形卷积,Deformable convolution模型;
- 使用了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总共分为两步:
- 从输入的特征映射X上使用常规网格R进行采样;
- 由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的流程为:
- 首先由输入的特征映射得到offset;
- 基于特征映射以及offset通过Deformable convolution获得输出的特征映射。
加入了偏移量的卷及网络是输入卷积层的两倍,输出的特征映射与输入的特征映射尺寸相同。
Deformable RoI pooling
在前一个RoI pooling的常规bin分区中的每一个bin位置都添加一个offset,offset是通过之前的feature map与RoIs学习到的。 为不同形状的对象使用自适应部件定位。
整个过程可以分为两个部分:
- 首先通过输入的特征映射学习到offset;
- 利用输入的特征映射与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倍,其余的学习率相同。通过双线性插值算法进行反向传播。
整个算法可被分为两步:
- 利用FCN学习到特征图;
- 浅层任务专用网络从特征映射中生成结果。
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的对比:
- 变形的filter的感受野尺寸与目标尺寸关联,指出从图片内容学到的变形有效的;
- 北京区域上的filter尺寸介于中型与大型之间,表明识别背景区域需要相对较大的感受野。
- 使用ResNet-101主干神经网络,对比了deformable modules 与 atrous convolution:
- 当使用较大的扩展值时,准确性都会提高,这意味着默认网络的感受野太小;
- 不同任务的最佳扩展值不同。
- 添加了Deformable ConvNets与其他常规神经网络的参数与速度对比:
- 在COCO数据集上添加了Deformable ConvNets与其他常规神经网络的对比:
来源:CSDN
作者:yangyi_hust
链接:https://blog.csdn.net/woduitaodong2698/article/details/88258327