Deformable ConvNet算法详解(对象尺寸/形状变换)
Deformable ConvNet算法详解(DCN)
- 算法背景
- 算法细节
- Deformable convolution
- Deformable RoI pooling
- Deformable ConvNets
- 实验
算法背景
论文全称: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与其他常规神经网络的对比:
Deformable ConvNet算法详解(对象尺寸/形状变换)相关推荐
- Scale-Transferrable Object Detection算法详解(基于多尺寸目标检测)
Scale-Transferrable Object Detection算法详解 论文背景 算法背景 算法简介 算法对比 算法详解 网络结构 DenseNet STM Object Localizat ...
- Apollo6.0代码Lattice算法详解——Part6:轨迹评估及碰撞检测对象构建
Apollo6.0代码Lattice算法详解--Part6:轨迹评估及碰撞检测对象构建 0.前置知识 1.涉及主要函数 2.函数关系 3.部分函数代码详解 3.1 lattice_planner.cc ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- CenterNet算法详解
Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...
- DES(Detection with Enriched Semantics)算法详解
DES算法详解 论文背景 实验结果 算法简介 算法结构 语义信息增强过程 与之前算法的区别 算法细节 Semantic enrichment at low level layer Semantic e ...
- SIFT特征点提取及描述论文算法详解
SIFT特征点提取及描述论文算法详解 1. 尺度空间极值检测(Scale-space extrema detection) 1.1 尺度空间和极值 1.2 DoG和LoG的关系 1.3 构建高斯尺度差 ...
- 【机器学习】集成学习及算法详解
集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- 【目标检测】Faster RCNN算法详解
转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...
最新文章
- 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
- 注意,ruby循环体定义的变量在结束时后,变量还存在
- Android架构分析之Android消息处理机制(一)
- ffmpeg + rtp介绍
- swagger 参数
- Node.js 清洗万恶的种子
- python代码控制机械臂_Dobot 机械臂
- 垃圾分类数据集+垃圾分类识别训练代码(支持googlenet, resnet, inception_v3, mobilenet_v2)
- UG NX二次开发(C#)-装配-替换组件
- 饥荒服务器模组全部显示冲突,饥荒联机洞穴设置及常见问题的解决方法
- 基于比原链开发Dapp(二)-开发流程
- 微信中的个性化广告怎么关闭的
- mvp中的m作用_将M放入MVP
- JQuery动画基础:上卷下拉
- 搭建邮箱服务器hMailServer详细教程(Windows)
- ORACLE JOB无法自动执行
- java下载pdf_java – 下载时空白PDF
- 达梦数据库喜中国家电网公司信息化软件框架采购竞争性谈判项目
- RealVnc源码下载地址
- 零基础无学历,长沙哪家it学校好