DCN v1阅读笔记

2023-11-22 13:20
文章标签 笔记 阅读 v1 dcn

本文主要是介绍DCN v1阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DCN v1即 Deformable Convolutional Networks,是微软研究研究院发表在 ICCV 2017上的一篇文章。
视觉识别(例如对象检测和语义分割)中的一个关键挑战是如何适应物体尺度、姿态、视角和零件变形中的几何变化或模型几何变换。卷积神经网络(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

这篇关于DCN v1阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410418

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个