DCN v1阅读笔记

news2024/11/17 6:52:51

DCN v1即 Deformable Convolutional Networks。
视觉识别(例如对象检测和语义分割)中的一个关键挑战是如何适应物体尺度、姿态、视角和零件变形中的几何变化或模型几何变换。卷积神经网络(CNN)构建模块中为固定几何结构:

  • 卷积单元在固定位置对输入特征图进行采样;
  • 池化层以固定比率降低空间分辨率;
  • RoI(感兴趣区域)池化层将 RoI 分成固定的空间箱等。

缺乏处理几何变换的内部机制,固有地在建模几何变换方面受限:

  • 同一个 CNN 层中所有激活单元的感受野大小是相同的。这对于在空间位置上编码语义的高层 CNN 层来说是不可取的。由于不同的位置可能对应不同尺度或形变的物体,自适应地确定尺度或感受野大小对于具有精细定位的视觉识别是所期望的,例如,使用全卷积网络的语义分割[FCN]。
  • 目标检测方法[R-CNN, MultiBox, Fast R-CNN, Faster R-CNN, YOLO, SSD R-FCN]仍然依赖于基于原始边界框的特征提取。这显然是次优的,特别是对于非刚性物体。

以往通过扩充现有数据样本,构建具有足够所需变化的训练数据集来缓解。

Deformable ConvNet 引入了两个新模块来增强神经网络的变换建模能力:

  • 可变形卷积:它在标准卷积中的规则网格采样位置上添加2D 偏移。它实现了采样网格的自由变形。如图 Figure 1 所示。通过额外的卷积层,从前面的特征图中学习偏移。因此,变形以局部、密集和自适应的方式以输入特征为条件。
  • 可变形 RoI 池化:它在之前的 RoI 池化[Fast R-CNN, R-FCN]的常规 bin 分区中的每个 bin 位置添加一个偏移量。类似地,偏移量是从前面的特征图和 RoI 中学习的,从而可以对具有不同形状的物体进行自适应部件定位。

figure1

这两种方法的指导思想为在模块中增加额外偏移量的空间采样位置,并从目标任务中学习偏移量,而无需额外监督。新模块可以很容易地替换现有 CNN 中的普通模块,并且可以通过标准反向传播很容易地进行端到端训练,从而产生可变形卷积网络

Deformable Convolution

CNN 中的特征图和卷积是 3D 的。可变形卷积和 RoI 池化模块都在 2D 空间域上操作。操作在整个通道维度上保持不变。在不失一般性的情况下,为了符号清晰起见,下面以 2D 形式描述模块。 扩展到 3D 非常简单。2D 卷积包括两个步骤:

  1. 在输入特征图 x \mathbf{x} x 上使用规则网格 R \mathcal{R} R 进行采样;
  2. w \mathbf{w} w 加权的采样值求和。

网格 R \mathcal{R} R 定义感受野大小和膨胀。例如,
R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , … , ( 0 , 1 ) , ( 1 , 1 ) } \mathcal{R}=\{(-1, -1), (-1, 0), \ldots, (0,1), (1, 1)\} R={(1,1),(1,0),,(0,1),(1,1)}

定义了一个扩张为 1 1 1 3 × 3 3\times 3 3×3 内核。

对于输出特征图 y \mathbf{y} y 上的每个位置 p 0 \mathbf{p}_0 p0,我们有
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) , \mathbf{y}(\mathbf{p}_0)=\sum_{\mathbf{p}_n\in\mathcal{R}}\mathbf{w}(\mathbf{p}_n)\cdot \mathbf{x}(\mathbf{p}_0+\mathbf{p}_n), y(p0)=pnRw(pn)x(p0+pn),
其中, p n \mathbf{p}_n pn 列举了 R \mathcal{R} R 中的位置。

在可变形卷积中,规则网格 R \mathcal{R} R 增加了偏移量 { Δ p n ∣ n = 1 , . . . , N } \{\Delta \mathbf{p}_n|n=1,...,N\} {Δpnn=1,...,N},其中 N = ∣ R ∣ N=|\mathcal {R}| N=R。标准卷积等式变为
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) . \mathbf{y}(\mathbf{p}_0)=\sum_{\mathbf{p}_n\in\mathcal{R}}\mathbf{w}(\mathbf{p}_n)\cdot \mathbf{x}(\mathbf{p}_0+\mathbf{p}_n+\Delta \mathbf{p}_n). y(p0)=pnRw(pn)x(p0+pn+Δpn).

目前,在不规则的偏移位置 p n + Δ p n \mathbf{p}_n+\Delta \mathbf{p}_n pn+Δpn 上采样。由于偏移 Δ p n \Delta \mathbf{p}_n Δpn 通常是小数,上式通过双线性插值实现为
x ( p ) = ∑ q G ( q , p ) ⋅ x ( q ) , \mathbf{x}(\mathbf{p})=\sum_\mathbf{q} G(\mathbf{q},\mathbf{p})\cdot \mathbf{x}(\mathbf{q}), x(p)=qG(q,p)x(q),

其中 p \mathbf{p} p 表示任意(小数)位置(对于可变形卷积公式, p = p 0 + p n + Δ p n \mathbf{p}=\mathbf{p}_0+\mathbf{p}_n+\Delta \mathbf{p}_n p=p0+pn+Δpn), q \mathbf{q} q 枚举特征图 x \mathbf{x} x 中的所有积分空间位置, G ( ⋅ , ⋅ ) G(\cdot,\cdot) G(,) 是双线性插值核。 请注意 G G G 是二维的。它被分解为两个一维核

G ( q , p ) = g ( q x , p x ) ⋅ g ( q y , p y ) , G(\mathbf{q},\mathbf{p})=g(q_x,p_x)\cdot g(q_y,p_y), G(q,p)=g(qx,px)g(qy,py),
其中 g ( a , b ) = m a x ( 0 , 1 − ∣ a − b ∣ ) g(a,b)=max(0,1-|a-b|) g(a,b)=max(0,1ab)。等式计算快速,因为 G ( q , p ) G(\mathbf{q},\mathbf{p}) G(q,p) 仅对少数 q \mathbf{q} q 为非零。

如图 Figure 2 所示,偏移量是通过在同一输入特征图上应用卷积层获得的。卷积核与当前卷积层具有相同的空间分辨率和扩张(例如,在图 Figure 2 中也是 3 × 3 3\times 3 3×3,扩张为 1)。输出偏移场具有与输入特征图相同的空间分辨率。通道维度 2 N 2N 2N 对应于 N N N 个2D 偏移量。在训练期间,同时学习用于生成输出特征和偏移的卷积核。

在这里插入图片描述

Deformable RoI Pooling

所有基于区域建议的目标检测方法[R-CNN, Fast R-CNN, Faster R-CNN, R-FCN]均使用 RoI 池化。它将任意大小的输入矩形区域转换为固定大小的特征。

RoI Pooling [Fast R-CNN] 给定输入特征图 x \mathbf{x} x 和大小为 w × h w\times h w×h、左上角 p 0 \mathbf{p}_0 p0 的 RoI,RoI 池化将 RoI 划分为 k × k k\times k k×k k k k 是一个自由参数)个 bin 并输出 k × k k\times k k×k 的特征图 y \mathbf{y} y。对于第 ( i , j ) (i,j) (i,j) 个 bin ( 0 ≤ i , j < k 0\le i,j < k 0i,j<k),我们有

y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ( p 0 + p ) / n i j , \mathbf{y}(i,j)=\sum_{\mathbf{p}\in bin(i,j)} \mathbf{x}(\mathbf{p}_0+\mathbf{p})/n_{ij}, y(i,j)=pbin(i,j)x(p0+p)/nij,

其中 n i j n_{ij} nij 是 bin 中的像素数。第 ( i , j ) (i,j) (i,j) 个 bin 范围是 ⌊ i w k ⌋ ≤ p x < ⌈ ( i + 1 ) w k ⌉ \lfloor i \frac{w}{k} \rfloor \le p_x < \lceil (i+1)\frac{w}{k}\rceil ikwpx<⌈(i+1)kw ⌊ j h k ⌋ ≤ p y < ⌈ ( j + 1 ) h k ⌉ \lfloor j \frac{h}{k}\rfloor \le p_y < \lceil (j+1)\frac{h}{k} \rceil jkhpy<⌈(j+1)kh

与卷积类似,在可变形 RoI 池化中,在空间分箱位置上添加偏移 { Δ p i j ∣ 0 ≤ i , j < k } \{\Delta \mathbf{p}_{ij}|0\le i,j < k\} {Δpij∣0i,j<k}。上式变为
y ( i , j ) = ∑ p ∈ b i n ( i , j ) x ( p 0 + p + Δ p i j ) / n i j . \mathbf{y}(i,j)=\sum_{\mathbf{p}\in bin(i,j)} \mathbf{x}(\mathbf{p}_0+\mathbf{p}+\Delta \mathbf{p}_{ij})/n_{ij}. y(i,j)=pbin(i,j)x(p0+p+Δpij)/nij.

通常, Δ p i j \Delta \mathbf{p}_{ij} Δpij 是小数。该式同样通过双线性插值实现。

图 Figure 3 说明了如何获得偏移量。

在这里插入图片描述

首先,RoI 池化 (式 eq.standard_roi_pooling) 生成池化特征图。从映射图中,一个 fc 层生成归一化偏移量 Δ p ^ i j \Delta \widehat{\mathbf{p}}_{ij} Δp ij,然后与 RoI 的宽度和高度按元素乘积转换为式 Eq eq.deformable_roi_pooling 中的偏移量 Δ p i j \Delta \mathbf{p}_{ ij} Δpij
Δ p i j = γ ⋅ Δ p ^ i j ∘ ( w , h ) \Delta \mathbf{p}_{ij} = \gamma \cdot \Delta \widehat{\mathbf{p}}_{ij} \circ (w, h) Δpij=γΔp ij(w,h)
这里 γ \gamma γ 是一个预定义的标量,用于调制偏移量的大小。它根据经验设置为 γ = 0.1 \gamma=0.1 γ=0.1。为使偏移学习不受 RoI 大小影响,偏移归一化是必要的。

Position-Sensitive (PS) RoI Pooling[R-FCN] 是全卷积,与 RoI 池化不同。通过一个 conv 层,首先将每个目标类( C C C 类目标总计为 C + 1 C+1 C+1 个类别)的所有输入特征图转换为 k 2 k^2 k2 个得分图,如图 Figure 4 中的底部分支所示。在不需要区分类的情况下,这样的分数映射表示为 { x i , j } \{\mathbf{x}_{i,j}\} {xi,j},其中 ( i , j ) (i,j) (i,j) 枚举所有 bin。对这些得分图进行池化。第 ( i , j ) (i,j) (i,j) 个 bin 的输出值是通过从对应于该 bin 的一个分数映射 x i , j \mathbf{x}_{i,j} xi,j 求和获得的。简而言之,与 RoI 池化公式的不同之处在于,将一个通用的特征图 x \mathbf{x} x 替换为特殊的正敏感得分图 x i , j \mathbf{x}_{i,j} xi,j
在这里插入图片描述

在可变形 PS RoI 池化中,公式唯一的变化是将 x \mathbf{x} x 也修改为 x i , j \mathbf{x}_{i,j} xi,j。 然而,偏移学习是不同的。它遵循 R-FCN 中的“全卷积”精神,如图 Figure 4 所示。在顶部分支中,一个 conv 层生成全空间分辨率偏移场。对于每个 RoI (对于每个类也是如此),PS RoI 池化应用于这些域上以获得归一化偏移量 Δ p ^ i j \Delta \widehat{\mathbf{p}}_{ij} Δp ij,然后以与上述可变形 RoI 池中相同的方式将其转换为实际偏移量 Δ p i j \Delta \mathbf{p}_{ij} Δpij

Deformable ConvNets

可变形卷积和 RoI 池化模块都具有与其普通版本相同的输入和输出。在训练中,这些添加的用于偏移学习的 conv 和 fc 层用零权重初始化。它们的学习率设置为现有层学习率的 β \beta β 倍(默认情况下为 β = 1 \beta = 1 β=1,Faster R-CNN 中的 fc 层为 β = 0.01 \beta = 0.01 β=0.01)。

特征提取网络使用 Aligned-Inception-ResNet,结构见表 Table 6。当特征维度发生变化时,使用步幅为 2 的 1 × 1 1\times 1 1×1 卷积层。
在这里插入图片描述在这里插入图片描述

Ablation Study

Deformable Convolution

表 Table 1 使用 ResNet-101 特征提取网络评估可变形卷积的效果。当使用更多可变形卷积层时,准确性稳步提高,特别是对于 DeepLab类感知 RPN。当 DeepLab 使用 3 3 3 个可变形层,其他网络使用 6 6 6 个时,改进达到饱和。在剩余的实验中,特征提取网络使用 3 3 3 个。
在这里插入图片描述

作者根据经验观察到,可变形卷积层中学习的偏移量对图像内容具有高度自适应性,如图 Figure 6 和图 Figure 7 所示。为了更好地理解可变形卷积的机制,作者为可变形卷积滤波器定义了一个称为有效膨胀的度量。它是滤波器中所有相邻采样位置对之间距离的平均值。这是对滤波器的感受野大小的粗略测量。
在这里插入图片描述
在 VOC 2007 测试图像上应用具有 3 3 3 个可变形层的 R-FCN 网络(如表 Table 1)。根据真实边界框标注和滤波器中心位置将可变形卷积滤波器分为小、中、大和背景四类。 表 Table 2 报告了有效扩张值的统计数据(平均值和标准差)。
在这里插入图片描述

它清楚地表明:

  • 可变形滤波器的感受野大小与物体大小相关,表明变形是从图像内容中有效学习的;
  • 背景区域上的滤波器尺寸介于中型和大型物体之间,表明识别背景区域需要相对较大的感受野;

这些观察结果在不同层中是一致的。

默认的 ResNet-101 模型对最后三个 3 × 3 3\times 3 3×3 卷积层使用带膨胀 2 2 2 的空洞卷积(参见第 2.3 节)。 我们进一步尝试了膨胀值 4 4 4 6 6 6 8 8 8,并在表 Table 3 中报告了结果。
在这里插入图片描述

它表明:

  • 当使用较大的扩张值时,所有任务的准确性都会增加,这表明默认网络的感受野太小;
  • 最佳扩张值因不同任务而异,例如,DeepLab 为 6 6 6,而 Faster R-CNN 为 4 4 4
  • 可变形卷积具有最佳精度。

这些观察结果验证了滤波器变形自适应学习的有效性和必要性。

Deformable RoI Pooling

它适用于 Faster R-CNN 和 R-FCN。如表 Table 3 所示,单独使用它已经产生了明显的性能增益,尤其是在严格的 mAP@0.7 指标下。当同时使用可变形卷积和 RoI Pooling 时,可以获得显著的精度提升。

Model Complexity and Runtime

表 Table 4 报告了所提出的可变形 ConvNet 及其普通版本的模型复杂度和运行时间。可变形 ConvNet 仅对模型参数和计算量增加了少量开销。这表明显著的性能提升来自于建模几何变换的能力,而不是增加模型参数。
在这里插入图片描述

参考资料:

  • deform_conv2d
  • Deformable Convolutional Networks
  • Deformable ConvNets v2: More Deformable, Better Results
  • msracver/Deformable-ConvNets
  • Question about num_deformable_group #268
  • 【VALSE 前沿技术选介17-02期】可形变的神经网络
  • DCN v2 (Arxiv, 2018)
  • DCN_v2_paper_reading.pdf
  • Deformable Convolutional Networks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络基础

文章目录 一、神经网络基础1.得分函数 f(xi;W,b)1&#xff09;从输入到输出的映射2&#xff09;数学表示3&#xff09;计算方法4&#xff09;多组权重参数构成了决策边界 2.损失函数 L3.前向传播4.Softmax分类器 梯度下降2.反向传播 一、神经网络基础 回归任务&#xff1a;最终…

软件测试技能,JMeter压力测试教程,JDBC配置连接mysql数据库(十)

前言 使用jmeter压测接口的时候&#xff0c;有时候需要批量造数据&#xff0c;需使用jmeter连数据库造对应的测试数据 或者测试结束后&#xff0c;对测试的数据还原&#xff0c;删掉一些垃圾数据&#xff0c;都会用到连接数据库执行sql的操作 一、JDBC 连接配置 添加配置元…

7-WebApis-2

Web APIs - 2 掌握事件绑定处理和事件对象&#xff0c;完成常见网页交互 事件监听事件类型事件对象拓展知识综合案例 事件监听 以前写的代码都是自动执行的&#xff0c;我们希望一段代码在某个特定的时机才去执行&#xff0c;比如 点击按钮可以弹出警示框比如鼠标经过显示下拉…

通过easyui的filebox上传文件

本篇文章重点分享一下怎么通过easyui的filebox实现文件上传的功能&#xff0c;从前端代码到后端接口都会展示给大家。 1、form表单同步上传 传统的文件上传会把<input type"file" />放到一个<form></form>里&#xff0c;设置form表单的提交方式为…

开源代码分享(5)—配电网重构的启发式算法(附matlab代码)

来源于文献IEEE TRANSACTIONS ON POWER SYSTEMS期刊文献的开源代码。 摘要&#xff1a;本文提出了一种两阶段的启发式计算方法&#xff0c;可以在最小的计算时间内重新配置一个径向分布网络。所有的网络交换机在操作的初始阶段都是关闭的&#xff0c;并提出了一个顺序的开关开闸…

基于SSM+jsp的教学质量评价系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Origin如何绘制三维离散点并拟合曲面?

文章目录 0.引言1.准备数据2.三维离散点参数设置并绘图3.拟合曲面参数设置并绘图 0.引言 在数据统计分析中&#xff0c;有时希望知道一个因变量在两个自变量变化情况下的变化情况&#xff0c;这时可以绘制散点图&#xff0c;观察基础情况&#xff0c;进一步可以拟合散点&#x…

腾讯安全吴石:基于威胁情报构建免疫体系,助力企业稳步迈向智能安全新阶段

6月13日&#xff0c;腾讯安全、腾讯研究院联合IDC、《中国信息安全》杂志社、CIO时代、新基建创新研究院等多家权威机构、媒体共同发起“数字安全免疫力研讨论坛”&#xff0c;聚合产学研各界专家学者探讨数字安全建设新范式。论坛上&#xff0c;腾讯安全联合IDC发布“数字安全…

【物联网】使用RabbitMQ作为MQTT服务端并自定义设备连接权限

文章目录 项目背景一、部署RabbiqMQ二、设备连接鉴权1.开启插件2.修改配置3.连接鉴权4.消息鉴权 总结 项目背景 最近公司启动了一个新的物联网项目&#xff0c;使用MQTT协议与设备通信&#xff0c;在比较了各大MQTT服务后&#xff0c;决定选用开源的RabbitMQ搭建我们的服务端。…

最专业的敏捷需求管理工具推荐

为了协助大家找到合适的需求管理工具&#xff0c;我们选择了国内外几款款工具作比对&#xff1a; Leangoo领歌敏捷工具 Jama Software Visure Requirements IBM DOORS Next ReqSuite RM ReQtest Xebrio Orcanos Helix RM SpiraTeam Accompa Innoslate Leangoo领歌…

Python学习——元组

一、元组的定义 这部分就没有增、删、改操作了&#xff0c;是因为元组是一个不可变序列&#xff0c;元组也是Python内置的数据结构之一。 补充&#xff1a;关于可变序列与不可变序列 可变序列是指可以对序列进行增、删、改的操作&#xff0c;对象地址不发生变化。常见的可变序列…

【Jvm】Java类加载机制是什么?

文章目录 一、目标&#xff1a;二、原理 &#xff08;类的加载过程及其最终产品&#xff09;三、过程&#xff08;类的生命周期&#xff09;3.1、加载3.2、校验3.3、准备3.4、解析3.5、初始化 四、类加载器五、双亲委派机制 一、目标&#xff1a; 什么是类的加载&#xff1f;类…

vue3.x+elementPlus+swiper+vuedraggable实现页面装修

前言 该实现代码依赖框架&#xff1a;vue3.xelementPlusswipervuedraggable&#xff0c;做好前期工作&#xff0c;可直接在下面的附件处点击下载链接来下载相关文件&#xff1b;文件中包括搜索/图文广告/滚动消息三个模块代码示例&#xff0c;其他组件实现思路相同&#xff0c…

APT 系列 (一):APT 筑基之反射

什么是反射&#xff1f; 简单来讲&#xff0c;反射就是&#xff1a;已知一个类&#xff0c;可以获取这个类的所有信息 一般情况下&#xff0c;根据面向对象封装原则&#xff0c;Java实体类的属性都是私有的&#xff0c;我们不能获取类中的属性。但我们可以根据反射&#xff0…

问题解决 |关于CUDA的代码错误总结以及解决方法

本博客主要关于常见的CUDA的代码错误总结以及解决方法~ 1.RuntimeError运行错误 1.1.RuntimeError: CUDA error: out of memory CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging cons…

Day09 Python面向对象和异常详解

文章目录 第六章 Python面向对象6.1. 面向对象基础6.1.1. 面向对象与面向过程6.1.2. 类与对象6.1.3. 类的设计与对象的实例化6.1.4. 构造方法6.1.5. 魔术方法6.1.6. 类与类的关系使用到另一个类的对象完成需求使用到另一个类的对象作为属性 6.2. 面向对象进阶6.2.1. 封装6.2.1.…

开启AI原型设计新时代:数字创意的崭新前景

随着人工智能生成内容&#xff08;AIGC&#xff09;相关研究的突破&#xff0c;人类社会正面临一个全新的转折点。诸如多模态、可控扩散模型和大型语言模型等技术正在直接改变创意设计领域的生产过程。 在AIGC领域中&#xff0c;根据输入内容和输出形式的差异&#xff0c;我们…

【MySQl】索引及其B+树

目录 一、索引初识和测试数据的构建 二、磁盘 三、MySQL、OS、磁盘的交互方式&#xff08;InnoDB 存储引擎&#xff09; 四、MySQL中索引和page的理解 1、为什么MySQL和磁盘进行IO交互的时候&#xff0c;要采用page的方案进行交互&#xff0c;而不是采用用多少&#xff0c…

O2O跑腿快递可以解决哪些问题?

各大电商巨头都已经布局了O2O快递&#xff0c;就目前国内的快递环境而言&#xff0c;基本已经形成了四通一达局面&#xff0c;那么O2O同城配送目前有何痛点呢?下面小编就来为大家分析分析&#xff0c;感兴趣的朋友快来一起了解了解吧! 一、O2O快递目前存在哪些痛点? 我们国…

力扣题库刷题笔记14--最长公共前缀

1、题目如下&#xff1a; 2、个人Python代码实现 首先讲一下思路&#xff0c;通俗的来讲&#xff0c;就是依次比较字符串里面所有的字符&#xff0c;如果相同就是公共前缀&#xff0c;如果不同&#xff0c;后面就不用比较了&#xff0c;所以主要就是以下几点&#xff1a; 1、外…