CNN卷积神经网络之DCN(Deformable Convolutional Networks、Deformable ConvNets v2)

本文深入探讨了可变形卷积网络Deformable ConvNets的原理与应用,从V1到V2的改进包括增加可变形卷积层数、引入可调节模块以及采用特征模仿策略。实验表明,这些改进在保持较低计算复杂度的同时,显著提升了目标检测和图像理解的准确性。Deformable ConvNets通过学习偏移量,适应不同几何形状,解决了传统卷积网络对几何变换建模能力有限的问题。


前言

2017年《Deformable Convolutional Networks》
论文地址:https://arxiv.org/pdf/1703.06211.pdf
2018年《Deformable ConvNets v2: More Deformable, Better Results》
论文地址:https://arxiv.org/pdf/1811.11168.pdf

由于构造卷积神经网络所用的模块中几何结构是固定的,其几何变换建模的能力本质上是有限的。可以说CNN还不能很好实现旋转不变性的。在以往会使用数据增强的方式,让网络强行记忆不同的几何形状。
作者认为以往的固定形状的卷积是网络难以适应几何变形的“罪魁祸首”,比如同一层的特征图的不同位置可能对应的是不同形状的物体,但是都和同一个形状卷积做计算,那么不能很好的将感受野作用在整个物体之上,因此提出了可变性卷积。

一、Deformable Convolutional Networks

下图展示了卷积核大小为 3x3 的正常卷积和可变形卷积的采样方式,(a) 所示的正常卷积规律的采样 9 个点(绿点),(b)( c)(d) 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头),其中 ( c)(d) 作为 (b) 的特殊情况,展示了可变形卷积可以作为尺度变换,比例变换和旋转变换的特殊情况 :
在这里插入图片描述
下面介绍,如何计算偏置位移量:

Deformable Convolution

在这里插入图片描述
假设输入的特征图为WxH,将要进行的可变性卷积为kernelsize=3x3,stride=1,dialated=1,那么首先会用一个具有与当前可变性卷积层相同的空间分辨率和扩张率的卷积(这里也要k=3x3,s=1,dial,才能保证偏移个数一致)进行学习offset。conv会输出一个WxHx2N的offset filed(N是可变性卷积的3x3=9个点,2N是每个点有xy两个方向向量)。之后,DConv可变形卷积核会根据偏移量进行卷积。
偏移量是小数,需要对原特征图进行双线性插值。

在这里插入图片描述
下图是连续三级可变形卷积带来的效果,每一级卷积都用3*3的卷积核做卷积,三层卷积后就能产生93=729个采样点。可以看到经过训练后所有的采样点都偏移到了不同尺度目标周围。
在这里插入图片描述

Deformable RoI Pooling

在这里插入图片描述

可变性ROIPooling的偏移值计算:首先RoI pooling产生pooled feature maps(绿色),然后用FC去学习归一化后的偏移值(为了使偏移量学习不受RoI大小的影响,需要对偏移量进行归一化),这个变量会和(w, h)做点乘,然后再乘以一个尺度因子,其中w,h是RoI的宽和高,而伽马是一个0.1的常数因子。用该位移作用在可变形兴趣区域池化(蓝色)上,以获得不局限于兴趣区域固定网格的特征。p也是个小数,需要通过双线性插值来得到真正的值。
在这里插入图片描述

个人理解,前者是为了让deformable能和RoI的尺度结合起来,更好地估计偏移位置;而后者是为了防止偏移量太大甚至超出RoI和整个图像。

调整后的bin如图红色框所示:此时并不是规则的将黄色框ROI进行等分成3x3的bin。
在这里插入图片描述

Position-Sensitive (PS) RoI Pooling

另外就是作者还搞出了一个和R-FCN的位置敏感比较类似的另一种RoI方法,同样是考虑deformable因素的,叫Position-Sensitive (PS) RoI Pooling,这里就不详细介绍了
在这里插入图片描述
偏移式学习是不同的,如图所示。在顶部分支中,一个conv层生成全空间分辨率偏移字段。对于每个RoI(同样对于每个类别),在这些字段上应用PS RoI池化,得到归一化偏移量∆pbij,然后将其转换为真实偏移量∆pij,方法与上述可变性RoI池化相同。

offset偏移学习

作者采用的是0初始化,然后按照网络其它参数学习率的 β \beta β倍来学习,这个 β \beta β默认是1,但在某些情况下,比如faster rcnn中的fc的那些,是0.01。
此外,并不是所有的卷积都一股脑地换成可行变卷积就是好的,在提取到一些语义特征后使用形变卷积效果会更好一点,一般来说是网络靠后的几层。下图是在不同层加入可变形卷积所带来的性能提升:
在这里插入图片描述

实验效果

加入DCN,参数量和速度只会略微增加:
在这里插入图片描述

下图是在各项任务中的性能对比:加入可变性卷积或者可变性ROI池化都能带来提升。(Atrous convolution也叫做空洞卷积dilated convolution)
在这里插入图片描述

思考

总而言之,卷积改变为类似采样的思路都是很有意义的,但是会存在以下几点需要顾及的地方:是否一层网络真的能有效学习偏置?不同图片的大量不同物体在offset优化上会不会引发竞争什么的(偏置会存在自己的偏好)?


二、Deformable ConvNets v2

本文对V1做了3方面的改进:增加可变形卷积的层数增加可调节的可变形模块采用蒸馏的方法模仿RCNN的特征

Stacking More Deformable Conv Layers

本文题目就是More Deformable, Better Results。v1中使用的ResNet-50,只将conv5中的共3层3x3卷积换成了可变形卷积,本文则将conv3,conv4和conv5中一共12个3x3的卷积层都换成了可变形卷积。v1中发现对于pascal voc这样比较小规模的数据集来说,3层可变形卷积已经足够了。同时错误的变形也许会阻碍一些更有挑战性的benchmark上的探索。作者实验发现在conv3到conv5中使用可变形卷积,对于COCO上的object detection来说,是效率和精度上最好的均衡。△pk,△mk都是通过一个卷积层进行学习,因此卷积层的通道数是3N,其中2N表示△pk,这和DCNv1的内容是一样的,剩下N个通道的输出通过sigmoid层映射成[0,1]范围的值,就得到△mk。

Modulated Deformable Modules

v1仅仅给普通的卷积的采样点加了偏移,v2在此基础上还允许调节每个采样位置或者bin的特征的增益,就是给这个点的特征乘以个系数,如果系数为0,就表示这部分区域的特征对输出没有影响。这样就可以控制有效的感受野。
在这里插入图片描述

从实验上来看,增加DConv的数量,提升还是很明显的;但是Modulated Deformable Modules参数量增加很多,而带来的性能提升很微弱。
在这里插入图片描述

R-CNN Feature Mimicking

在detection训练过程中,如果有大量不在roi内的内容,可能会影响提取的特征,进而降低最终得到的模型的精度(但不是说没有额外的context就一定不好,加上这里性能提升微弱,所以说这里还是有待更多的思考。)。

对于V2来说,将在RoIpooling中RoI之外的调节系数设为0可以直接去除无关的context,但是实验表明这样还是不能很好的学习RoI的特征,这是由于Faster R-CNN本身的损失函数导致的,因此需要额外的监督信号来改善RoI特征提取的训练。由于,RCNN训练时是裁剪出roi,使用roi进行训练,因此大大减小了无关区域对特征提取的影响。但是如果直接将RCNN引入到fasterRCNN中,会导致训练和测试的时间大大增加。

于是作者采用feature mimicking的手段,强迫Faster R-CNN中的RoI特征能够接近R-CNN提取的特征。引入feature mimic loss,希望网络学到的特征与裁剪后的图像经过RCNN得到的特征是相似的,在这里设置loss如下,采用的是cos相似度评价指标。

在这里插入图片描述

网络训练的框架如上图所示,右侧其实就是一个R-CNN,不过后面只接了分类的branch。

在这里插入图片描述

还有就是虽然上图画了两个网络,但是R-CNN和Faster R-CNN中相同的模块是共用的相同的参数,比如Modulated Deformable Convolutions和Modulated Deformable RoIpooling部分。inference的时候就只需要运行Faster R-CNN的部分就行了。这样的话,增加的运算量就小了。

思考

看R-CNN Feature Mimicking实验结果:

  1. 对于前景上的正样本,使用Mimicking是特别有用的,对于负样本背景,网络倾向于利用更多的上下文信息(context),在这种情况下,Mimicking没有帮助。所以FG Only最好
  2. 在没有mdconv的网络上,使用Mimicking的提升幅度要小一些,只有0.3个点。这里将之前的Modulated Deformable Modules(涨点也少,两个一起使用涨点就稍微明显一些)一起分析:仅仅通过Modulated带来的提升还是比较有限的,主要原因在于现有的损失函数难以监督模型对无关紧要的区域设置较小的权重,因此在模型训练阶段引入RCNN feature mimicking,通过RCNN网络提供有效的监督信息,发挥modulation的权重作用,使得提取到的特征更加集中于有效区域,因此涨点会更加明显如果对于Modulated Deformable Convolutions能找到一个更好的学习机制,那么我感觉,仅仅是Modulated Deformable Modules也可以带来更好性能提升
    在这里插入图片描述

看不同尺度上的一些结果:

在这里插入图片描述

  1. APL:800 -> 1000 不加可变性卷积(或者是加的不够多的也会掉点,从下表的绿蓝部分可见)都掉点了 [小物体APs涨了],但是 deformable 相关的在涨。分析:把图片调大会等价于减少网络的 receptive field,所以大物体会变得很差。那么这样DCN在调大图片仍然上涨 performance 就合理了,因为毕竟能动态调整感受野。

在这里插入图片描述

个人观点,欢迎交流
按理说多加几层的DCN本应该在V1的时候就应该做实验得到结果,而不应该放在V2的时候说我们多加几层能涨好多点(本篇论文也基本是靠这个涨了很多点),后来看见了其中一个原作者的回答就合理了:

在这里插入图片描述
链接:https://www.zhihu.com/question/303900394

modulated 和feature mimicking 涨点都很少,有人会觉得这两项不过是为了发论文而想出来的华而不实的新点子,看起来比较有创新,毕竟涨分靠的是多加几层DConv。但是个人觉得给每个感受野增加增益系数确实是很有创新的,就好比是考虑了信号的相位,接着需要考虑幅度,很自然的想法。但是为什么收益甚微?然而modulated和feature mimicking 一起使用就显出了效果?感觉就是这个增益系数缺少合适的监督信息,训练起来的效果不太好,加入了feature mimicking能提供更多更好的监督信息让增益系数得以学习。

在这里插入图片描述
进一步思考一下,怎样才能让卷积更好的学习△mk?从前面可以知道△pk,△mk都是通过一个卷积层进行学习得来的,那么一个卷积层是不是不足以学习如此多的参数了;对于△mk可不可以在学习的时候加入正则化方法,因为一个特征图上需要重点关注的地方是有限的,此外也不能一个地点也不关注;要不要在每个特征图上加入更多的监督,加入增益系数的损失函数 😃

欢迎交流,禁止转载!

上一篇:目标检测之FPN

<think>首先,用户的问题是基于提供的引用,要求我回答关于Deformable Convolution V2DCNv2)的原理、应用和实现。我从系统提示中知道,必须使用中文回答,结构清晰,确保真实可靠,并使用指定的LaTeX格式。 关键点来自引用: - 引用[1]:描述了PyTorch实现的教程,提到DCNv2增强了网络对几何变换的适应能力,用于目标检测、图像分割。 - 引用[2]:强调了DCNv2动态调整采样位置,提高网络的表观能力和灵活性。 - 引用[3]:提供了原理和代码链接,论文是https://arxiv.org/abs/1703.06211。 - 引用[4]:解释了为什么做DCN,并链接到代码。 用户的问题核心是:了解原理、应用和实现。 我的回答结构应该清晰: 1. **原理**:解释DCNv2的基本概念,为什么它被提出,基于论文。 2. **应用**:讨论在哪些任务中表现出色。 3. **实现**:描述如何在PyTorch中实现,参考提供的链接。 在回答中: - 使用中文。 - 行内数学表达式用$...$,例如卷积操作。 - 独立公式用$$...$$。 - 引用末尾添加引用标识,如[^1]。 - 最后生成相关问题。 从系统提示:"生成相关问题",并在示例中看到结尾有相关问题部分。 构建回答: - 开头简要介绍DCNv2。 - 然后分节:原理、应用、实现。 - 在每个部分中,引用提供的参考文献。 - 结束时,生成相关问题。 确保真实可靠: - 基于提供的引用,特别是引用[3]链接到论文和代码。 - 论文是《Deformable Convolutional Networks》,arXiv:1703.06211。DCNv2是改进版,但引用中提到的是V2,所以我会专注于V2DCNv2原理: - 标准卷积有固定的采样点(例如3x3网格)。 - DCN引入偏移量(offsets),允许采样点在空间位置上变形。 - V2版本可能添加了调制因子(modulation scalars)来更好地缩放偏移。 - 数学上,输出特征图的计算涉及动态偏移。 数学公式: - 对于一个位置$p_0$,输出$y(p_0) = \sum_{p_n \in R} w(p_n) \cdot x(p_0 + p_n + \Delta p_n)$ 其中$R$是感受野,$w$是权重,$x$是输入,$\Delta p_n$是学习的偏移。 - 在DCNv2,可能还有缩放因子,如$y(p_0) = \sum_{p_n \in R} w(p_n) \cdot x(p_0 + p_n + \Delta p_n) \cdot m_n$,其中$m_n$是调制因子。 - 根据论文,需要验证。 应用: - 目标检测(如Faster R-CNN)、实例分割(如Mask R-CNN)、图像分类等。[^1],[^2] 实现: - 在PyTorch中,使用自定义层。 - 引用[3]链接到实现:https://github.com/4uiiurz1/pytorch-deform-conv-v2 - 核心代码涉及计算偏移和调制。 回答结构: 1. **引言**:简述DCNv22. **原理**:详细解释机制。 3. **应用**:列出常见任务。 4. **实现**:基于PyTorch的实现步骤或要点。 5. **结论**:总结。 6. **相关问题**:生成3个相关问题。 生成相关问题: 类似示例,如: 1. DCNv2相比标准卷积有何优势? 2. 如何训练包含DCNv2的网络? 3. DCNv2在特定任务中的最新进展是什么? 最后,确保回答是逐步的、有帮助的。 </think>### Deformable Convolution V2 (DCNv2) 的原理、应用及实现 Deformable Convolution V2 (DCNv2)Deformable Convolutional Networks 的改进版本,通过在标准卷积操作中引入动态偏移和调制机制,增强网络对几何变换(如尺度、旋转和形变)的适应能力。以下是基于相关引用资料的详细解释,回答结构清晰,分为原理、应用和实现三部分。引用资料来自用户提供的站内引用[^1][^2][^3][^4]。 #### 1. **原理** DCNv2 的核心思想是让卷积核的采样位置可学习地变形,而非固定网格。这通过两个关键组件实现:**偏移量(offsets)** 和 **调制因子(modulation scalars)** ,使网络能动态调整输入特征图的采样点,提升特征提取的灵活性[^3][^4]。 - **标准卷积的限制**:传统卷积使用固定位置采样,例如对于位置 $p_0$,输出特征图 $y(p_0)$ 的计算为: $$ y(p_0) = \sum_{p_n \in R} w(p_n) \cdot x(p_0 + p_n) $$ 其中 $R$ 是感受野(如 $3 \times 3$ 网格),$w$ 是卷积权重,$x$ 是输入特征图。 - **DCNv2 的改进**: - **偏移量($\Delta p_n$)** :引入可学习的偏移 $\Delta p_n$,允许采样点位置变形: $$ y_{\text{offset}}(p_0) = \sum_{p_n \in R} w(p_n) \cdot x(p_0 + p_n + \Delta p_n) $$ 其中 $\Delta p_n$ 来自一个额外的卷积层预测。 - **调制因子($m_n$)** :V2 版本新增调制因子,缩放偏移效果以避免过大变形: $$ y_{\text{DCNv2}}(p_0) = \sum_{p_n \in R} w(p_n) \cdot x(p_0 + p_n + \Delta p_n) \cdot m_n $$ $m_n$ 通常通过 Sigmoid 函数约束在 $[0,1]$ 范围内,确保权重平滑[^3][^4]。 这种机制使网络能自适应物体形状变化,如图像中的非刚性变形,极大提升了模型的几何建模能力。DCNv2 源于论文《Deformable Convolutional Networks》(arXiv:1703.06211),通过端到端训练学习偏移和调制参数[^3]。 #### 2. **应用** DCNv2计算机视觉任务中表现出色,尤其在需要处理几何变换的场景下: - **目标检测**:增强模型对物体位置和尺度的鲁棒性,提升检测精度(如用于 Faster R-CNN 和 YOLO 架构)[^1][^2]。 - **图像分割**:在实例分割和语义分割任务中,可变形卷积能准确捕捉物体边界,提高分割结果(如集成到 Mask R-CNN)[^1]。 - **图像分类**:通过适应输入图像的变化,提升分类模型的泛化性能[^2]。 - **其他任务**:包括关键点检测、视频分析等,DCNv2 被广泛应用于开源框架(如 MMCV 和 Detectron2)中[^1][^3]。 实验表明,DCNv2 能显著减少模型对数据增强的依赖,并在 COCO 和 PASCAL VOC 等基准数据集上取得 SOTA 性能[^3][^4]。 #### 3. **实现** DCNv2 的 PyTorch 实现基于开源项目,核心是自定义卷积层。参考引用中的代码库:[GitHub 实现](https://github.com/4uiiurz1/pytorch-deform-conv-v2)。以下是关键步骤: - **依赖安装**:需安装 PyTorch 和 CUDA。示例命令: ```bash pip install torch torchvision git clone https://github.com/4uiiurz1/pytorch-deform-conv-v2.git cd pytorch-deform-conv-v2 ``` 详细依赖见引用[^1]。 - **核心代码结构**: - **偏移和调制预测**:使用额外的卷积层生成 $\Delta p_n$ 和 $m_n$。 - **可变形卷积层**:定义 `DeformConv2d` 类,集成到网络中。 示例代码片段(简化版): ```python import torch from deform_conv_v2 import DeformConv2d # 示例:定义一个DCNv2层 deform_conv = DeformConv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1) input = torch.randn(1, 64, 32, 32) # 输入特征图 offset = torch.randn(1, 18, 32, 32) # 偏移量(2*9个坐标偏移) output = deform_conv(input, offset) # 输出特征图 ``` 完整代码见[引用[^3]的链接](https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py)。 - **训练技巧**: - 初始化时偏移量设为零,避免训练不稳定。 - 在骨干网络(如 ResNet)中添加 DCNv2 层,常用于特征提取阶段。 - 项目最近更新包括优化 CUDA 内核和内存效率[^2]。 DCNv2 实现简单高效,易于集成到现有 PyTorch 项目中,显著提升视觉任务的性能[^1][^3]。 #### 总结 DCNv2 通过动态偏移和调制机制,解决了标准卷积在几何变换上的局限性,在目标检测、分割等任务中优势显著。PyTorch 实现便捷,社区支持丰富。如需深入,请参考论文[^3]和代码库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值