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算法,有两个方面的改进:

  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与其他常规神经网络的对比:

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

  1. Scale-Transferrable Object Detection算法详解(基于多尺寸目标检测)

    Scale-Transferrable Object Detection算法详解 论文背景 算法背景 算法简介 算法对比 算法详解 网络结构 DenseNet STM Object Localizat ...

  2. Apollo6.0代码Lattice算法详解——Part6:轨迹评估及碰撞检测对象构建

    Apollo6.0代码Lattice算法详解--Part6:轨迹评估及碰撞检测对象构建 0.前置知识 1.涉及主要函数 2.函数关系 3.部分函数代码详解 3.1 lattice_planner.cc ...

  3. 目标检测 RCNN算法详解

    原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...

  4. CenterNet算法详解

    Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...

  5. DES(Detection with Enriched Semantics)算法详解

    DES算法详解 论文背景 实验结果 算法简介 算法结构 语义信息增强过程 与之前算法的区别 算法细节 Semantic enrichment at low level layer Semantic e ...

  6. SIFT特征点提取及描述论文算法详解

    SIFT特征点提取及描述论文算法详解 1. 尺度空间极值检测(Scale-space extrema detection) 1.1 尺度空间和极值 1.2 DoG和LoG的关系 1.3 构建高斯尺度差 ...

  7. 【机器学习】集成学习及算法详解

    集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...

  8. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

  9. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

最新文章

  1. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
  2. 注意,ruby循环体定义的变量在结束时后,变量还存在
  3. Android架构分析之Android消息处理机制(一)
  4. ffmpeg + rtp介绍
  5. swagger 参数
  6. Node.js 清洗万恶的种子
  7. python代码控制机械臂_Dobot 机械臂
  8. 垃圾分类数据集+垃圾分类识别训练代码(支持googlenet, resnet, inception_v3, mobilenet_v2)
  9. UG NX二次开发(C#)-装配-替换组件
  10. 饥荒服务器模组全部显示冲突,饥荒联机洞穴设置及常见问题的解决方法
  11. 基于比原链开发Dapp(二)-开发流程
  12. 微信中的个性化广告怎么关闭的
  13. mvp中的m作用_将M放入MVP
  14. JQuery动画基础:上卷下拉
  15. 搭建邮箱服务器hMailServer详细教程(Windows)
  16. ORACLE JOB无法自动执行
  17. java下载pdf_java – 下载时空白PDF
  18. 达梦数据库喜中国家电网公司信息化软件框架采购竞争性谈判项目
  19. RealVnc源码下载地址
  20. 零基础无学历,长沙哪家it学校好

热门文章

  1. uevent 驱动_uevent分析
  2. JavaScript——基本语法入门及控制台打印变量
  3. 使用springboot快速搭建支付宝当面付应用
  4. Visual Studio Code安装中文插件
  5. poli-java开源BI软件
  6. hive日期函数各种用法
  7. OpenCV 图像直方图计算calcHist()
  8. 智能车竞赛比赛校赛进展
  9. 发现一个很强的国产软件。可以给视频加动画大头贴
  10. 计算机考研432有哪些大学,考研百态,有学校录取94人让658人来复试,有学生初试432复试被刷...