一、摘要

尽管卷积神经网络(CNN)在视觉识别任务上取得巨大成功,但其固有的固定几何结构(固定卷积采样网格、固定池化窗口、固定 RoI 划分)严重限制了对未知几何变换(尺度、姿态、形变、视角变化)的建模能力。
本文提出可变形卷积网络(Deformable ConvNets),通过两个轻量级模块——可变形卷积(Deformable Convolution)与可变形 RoI 池化(Deformable RoI Pooling)——在无额外监督的前提下,为卷积/池化的空间采样位置施加可学习的偏移量,使网络可自适应地、密集地、端到端地建模复杂几何变换。
实验表明,Deformable ConvNets 在 PASCAL VOC 语义分割、Cityscapes 语义分割、PASCAL VOC 与 COCO 目标检测任务上均取得显著增益:

  • 在 ResNet-101 主干上,DeepLab VOC mIoU 从 69.7 提升到 75.2;

  • COCO R-FCN mAP@[0.5:0.95] 从 30.8 提升到 34.5;

  • 仅增加 <1% 参数与 <5% 计算量。

二、先前背景

在视觉识别中,如何适应几何变化或建模物体尺度、姿态、视角和部件变形等几何变换是核心挑战。

近年来,卷积神经网络(CNNs)在图像分类、语义分割和目标检测等视觉识别任务中取得显著成功。但其几何变换建模能力主要依赖大量数据增强、大模型容量以及一些简单的手工设计模块(如用于小平移不变性的最大池化),仍存在一些缺陷。

类别具体内容
传统方法

1. 构建具有足够所需变化的训练数据集:通过仿射变换等数据增强方式实现,虽能从数据中学习鲁棒表示,但需付出高昂训练成本和复杂模型参数的代价

2. 手工不变特征:SIFT、HOG、ORB 等依赖先验参数化变换,难以应对复杂或非参数化形变。

基于 CNN 的方法

AlexNet、VGG、ResNet 等通过堆叠卷积、池化获得层级特征。

但所有采样位置固定,依然依赖原始边界框的特征提取,这并非最优,尤其面对非刚性物体

CNN 的局限

卷积核采样网格固定(如 3×3 网格),池化窗口固定(如 2×2),RoI 池化将任意形状区域强行划分为 k×k 固定 bin,无法适应物体尺度、姿态、部件形变

 相关的改进尝试:

方法名称核心思想与本文的差异
Spatial Transformer Networks (STN)通过全局参数化(仿射/薄板样条)对整张特征图做一次性 warping全局变换,无法对不同空间位置分别建模
Active Convolution在卷积核采样点上增加可学习偏移,但偏移量为静态参数(训练完成后固定),且所有位置共享偏移量不随输入变化,缺乏内容自适应性
Atrous / Dilated Convolution通过固定膨胀率(dilation)扩大感受野采样模式人工设定
Deformable Part Models (DPM)部件形变建模物体(如 HOG+DPM)浅层模型,表达能力有限
Spatial Pyramid Pooling (SPP)手工设计多尺度、多区域池化区域划分人工设定
Transformation-Invariant Features设计对特定变换不变的特征(如 SIFT、ORB、TI-pooling、Harmonic Networks 等)变换类型需先验已知

上述 6 类方法均试图解决 CNN 的几何不变性,但要么全局/手工/静态,要么局限于已知变换
本文的可变形卷积/可变形 RoI 池化首次实现了局部、密集、可学习、端到端的几何建模,可直接替换现有模块,无需额外监督。

三、先前存在的问题

问题类别具体描述
固定几何结构卷积核采样点集合 R 始终为规则网格,无法适应局部几何变化。
全局参数化限制STN 仅支持全局、单一变换,无法对不同空间位置施加不同形变。
手工规则空洞卷积的膨胀率需预先设定,且在所有位置共享
非刚性对齐缺失RoI Pooling 将任意形状物体强行划分为 k×k 固定 bin,导致特征与部件错位。
端到端学习缺失传统可变形部件模型(DPM)需启发式训练,无法与 CNN 联合优化。

四、本文技术

4.1 可变形卷积(Deformable Convolution)

  • 输入:特征图 \boldsymbol{x} \in \mathbb{R}^{C \times H \times W}

  • 标准卷积
    2D 卷积包含两步,一是在输入特征图 x 上使用规则网格 R 采样,二是对采样值与权重 w 加权求和。对于输出特征图 y 上的每个位置p_0,公式为:

    \mathbf{y}(\mathbf{p}_0) = \underset{\mathbf{p}_n \in \mathcal{R}}{\sum_{} }\mathbf{w}(\mathbf{p}_n) \cdot \mathbf{x}(\mathbf{p}_0 + \mathbf{p}_n)

    其中 R 为规则网格(如 \mathcal{R}=\{(-1,-1),(-1,0), ...,(0,1),(1,1)\}定义了一个 3×3、 dilation 为 1 的核。)

  • 可变形卷积

    \mathbf{y}(\mathbf{p}_0) = \underset{\mathbf{p}_n \in \mathcal{R}}{\sum_{} } \mathbf{w}(\mathbf{p}_n) \cdot \mathbf{x}(\mathbf{p}_0 + \mathbf{p}_n + \Delta \mathbf{p}_n)
    • 为规则网格 R 增加偏移量\{\Delta p_n | n=1,...,N\},偏移量由附加卷积层生成:

      $\displaystyle \mathrm{offset} = \mathrm{Conv}_{3 \times 3}(\mathbf{x}) \in \mathbb{R}^{2N \times H \times W}, \quad N = |\mathcal{R}|$
    • 分数坐标处理:由于偏移量\Delta p_n通常为分数,通过双线性插值实现:

      x(p)=\underset{q}{\sum} G(q, p) \cdot x(q)
      其中,p为任意(分数)位置(如式中的p_0 + p_n+\Delta p_n),q枚举特征图 x 中的所有整数空间位置,G(\cdot, \cdot)为双线性插值核,且可分离为两个一维核:

      G(\mathbf{q}, \mathbf{p}) = g(q_x, p_x) \cdot g(q_y, p_y), \quad g(a, b) = \max(0, 1 - |a - b|)

      后者的本质是 “线性权重”—— 两个坐标的距离越近,权重越大

关于偏移量获取:通过对同一输入特征图应用卷积层获得偏移量,该卷积核与当前卷积层具有相同的空间分辨率和 dilation,输出偏移场与输入特征图空间分辨率相同,通道维度为 2N(对应 N 个 2D 偏移)

  • 偏移量并非手动设计,而是通过一个额外的卷积层从输入特征图中学习得到(对应图 2 中 “conv offset field” 模块)。
  • 这个用于生成偏移量的卷积核,与当前可变形卷积层的卷积核具有相同的空间分辨率(如 3×3)和 dilation 系数(如 dilation=1)。例如,若当前可变形卷积使用 3×3 kernel、dilation=1,则生成偏移量的卷积层也采用 3×3 kernel、dilation=1。
  • 这一设计确保偏移量的学习与特征提取的 “感受野范围” 匹配,使偏移量能精准捕捉局部几何变形。

关于枚举q:实际上,为了提高计算效率,q枚举的通常仅仅是其整数邻域的空间位置,而不是所有整数空间位置。例如,假设在输入特征图上,需要计算非整数位置p = (1.2, 2.7)的特征值x(p)

  1. 确定周围 4 个整数点:q_1=(1,2)q_2=(1,3)q_3=(2,2)q_4=(2,3)
  2. 计算 x 方向权重:
    • g(q_{x}=1, p_x=1.2) = 1 - |1 - 1.2| = 0.8
    • g(q_{x}=2, p_x=1.2) = 1 - |2 - 1.2| = 0.2
  3. 计算 y 方向权重:
    • g(q_{y}=2, p_y=2.7) = 1 - |2 - 2.7| = 0.3
    • g(q_{y}=3, p_y=2.7) = 1 - |3 - 2.7| = 0.7
  4. 计算二维权重:
    • G(q_1, p) = 0.8 \times 0.3 = 0.24
    • G(q_2, p) = 0.8 \times 0.7 = 0.56
    • G(q_3, p) = 0.2 \times 0.3 = 0.06
    • G(q_4, p) = 0.2 \times 0.7 = 0.14
  5. 最终插值结果:x(p) = 0.24x(1,2) + 0.56x(1,3) + 0.06x(2,2) + 0.14x(2,3)

4.2 可变形 RoI 池化(Deformable RoI Pooling)

  • 输入:特征图 x、RoI 参数 (\mathbf{p}_0, w, h)

  • 标准 RoI 池化

    y(i, j) = \frac{1}{n_{ij}} \underset{\mathbf{p} \in \mathrm{bin}(i,j)}{\sum_{} }\mathbf{x}(\mathbf{p}_0 + \mathbf{p})
    • bin(i,j)为第(i,j)个 bin 在输入特征图 x 上对应的像素集合
      对于第(i,j)个 bin:该 bin 的范围为:
      \left\lfloor \frac{i \cdot w}{k} \right\rfloor \leq p_x < \left\lceil \frac{(i + 1) \cdot w}{k} \right\rceil   和   \left\lfloor \frac{j \cdot h}{k} \right\rfloor \leq p_y < \left\lceil \frac{(j + 1) \cdot h}{k} \right\rceil

    • P₀ 是 RoI 的左上角坐标(原点在特征图左上角)。

    • p相对坐标,表示在 RoI 内部的位置(从 (0, 0)(w-1, h-1))。

    • n_{ij}为 bin 中的像素数量。

    • RoI 池化将其分为k\times k个 bin,输出k\times k特征图

      • 假设:RoI 宽 w=5,高 h=3,划分为 2×2 bins。则:

      • Bin(0,0) 的 x 范围:[0, 2),y 范围:[0, 1)

      • Bin(1,1) 的 x 范围:[2, 5),y 范围:[1, 3)

  • 可变形 RoI 池化

    y(i, j) = \frac{1}{n_{ij}}\underset{\mathbf{p} \in \mathrm{bin}(i,j)}{\sum_{} } \mathbf{x}(\mathbf{p}_0 + \mathbf{p} + \Delta \mathbf{p}_{ij})
    • 先通过标准 RoI 池化,把任意 RoI 变成k\times k特征图。

    • k\times k特征图 拉平 → 全连接层 → 输出k\times k\times2 个归一化偏移 \Delta \hat{\mathbf{p}}_{ij}(2代表x和y);
    • 归一化偏移映射到实际像素偏移\gamma = 0.1\Delta \mathbf{p}_{ij} = \gamma \cdot \Delta \hat{\mathbf{p}}_{ij} \odot (w, h)
    • 每个 bin 的位置平移 \Delta \mathbf{p}_{ij} 后,用双线性插值取像素值,再做平均池化得到 y(i, j)。

4.3 位置敏感可变形 RoI 池化(Deformable PS RoI pooling)

  • 标准 PS RoI 池化

    • 目的:把任意 RoI 变成固定 k\times k特征,同时保持“位置敏感”——每个 bin 只响应特定空间位置

    • 基本步骤:

      • 用 1×1 卷积 把特征图变成k^2(C+1)张 位置敏感得分图 

      • 对 每个 bin(i,j),只在 对应的那张得分图 X_{i,j,c} 上做 平均池化,得到该 bin 的值。

  • 可变形 PS RoI 池化
    • 基本步骤
      • 用 1×1 卷积 把特征图变成k^2(C+1)张 位置敏感得分图 
      • 使用全卷积生成全分辨率偏移场,如使用3\times 3卷积会变成2k^2(C+1)
      • 从偏移场提取 RoI 对应的 归一化偏移

      • 还原实际偏移并采样

可变形PS Rol池化与可变形 RoI 池化类似,但输入替换为特定的位置敏感得分图x_{i,j}。偏移学习遵循全卷积思想,通过卷积层生成全空间分辨率偏移场,对每个 RoI(及每个类别)应用 PS RoI 池化获得归一化偏移,再转换为实际偏移。

简单说,可变形 PS RoI Pooling =
“先全卷积生成 k²(C+1) 张位置敏感得分图 + 2k²(C+1) 张全图偏移场,再用 PS Pooling 把每个 RoI 对应的偏移裁剪出来,还原后做可变形采样”
既保留 位置敏感 又实现 部件级自适应对齐,全程 全卷积,无需逐 RoI 跑 fc。

4.4 可变形卷积网络构建

可变形卷积和 RoI 池化模块与对应普通版本的输入输出相同,可直接替换。训练时,用于偏移学习的新增卷积和全连接层初始化为零权重,学习率设为现有层的 β 倍(默认 β=1,Faster R-CNN 中的全连接层 β=0.01),通过上述插值操作的反向传播进行训练,形成可变形卷积网络(deformable ConvNets)。

在特征提取方面,采用 ResNet-101 和改进的 Aligned-Inception-ResNet 架构,移除平均池化和全连接层,添加 1×1 卷积降低通道维度至 1024,调整最后卷积块的步长和 dilation 以提高特征图分辨率,并在最后几个卷积层( kernel size>1)应用可变形卷积(实验发现 3 层为不同任务的良好权衡)。

在分割和检测网络方面,基于特征提取网络的输出特征图构建任务特定网络,如 DeepLab 用于语义分割,Category-Aware RPN、Faster R-CNN 和 R-FCN 用于目标检测,且 Faster R-CNN 和 R-FCN 中的 RoI 池化层可替换为可变形 RoI 池化。

五、创新点

创新维度具体贡献
可变形卷积首次在卷积内部引入逐位置可学习的偏移量,实现局部、密集、内容自适应的几何变换建模,且端到端训练。
可变形 RoI 池化首次在 RoI 池化中引入逐 bin 可学习的偏移量,实现部件级自适应对齐,显著提升非刚性物体检测。
轻量级仅增加 2N 个通道(卷积)或 2k² 个通道(PS RoI),参数增量 <1%,计算量增量 <5%。
通用性可直接替换现有 CNN 中的标准卷积/RoI 池化,无需改动网络整体结构。
首次验证首次在密集预测任务(语义分割、目标检测)上验证可学习密集几何变换的有效性。

六、本文技术的潜在问题

问题类别具体描述

偏移量学习

稳定性

偏移量初始化为 0,若学习率设置不当,可能导致训练初期梯度消失或爆炸
计算开销虽然整体开销小,但在极端大分辨率输入(如 4K)下,2N 额外通道仍会带来显存压力。
可解释性偏移量分布缺乏显式约束,可能学习到不符合物理意义的采样模式(如采样到图像外)。
任务依赖性偏移量完全由目标任务驱动,对新任务或跨域场景可能需重新训练
稀疏监督风险在目标检测中,若标注框质量差,偏移量可能学到噪声,导致性能下降。
小目标和细节处理能力有限虽然可变形卷积能自适应调整感受野,但在处理小目标或精细结构时,偏移量的学习可能受限于特征图分辨率和感受野大小,导致定位精度不足。

七、未来可改善的方向

方向类别具体建议
增强对小目标和细节的处理

结合特征金字塔网络等技术,提高小目标和精细结构区域的特征图分辨率;设计针对小目标的专用可变形卷积模块,调整感受野大小和偏移量学习策略,提升定位精度。

跨域泛化引入元学习或域自适应,使偏移量快速适应新任务或新场景。
结构搜索用 NAS(Neural Architecture Search)自动搜索最佳偏移量生成网络结构
多模态融合将偏移量与深度、光流、边缘等额外模态联合学习,提升几何建模能力。
更大尺度将可变形思想扩展到 3D 卷积、Transformer 自注意力机制,处理视频或点云。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts在前后端分离项目中的实践与应用

目录 一、ECharts简介 二、后端数据接口设计 三、数据结构设计 1. 柱状图数据结构 2. 饼图数据结构 四、后端实现要点 五、前端ECharts配置解析 1. 柱状图配置 2. 饼图配置 六、最佳实践建议 七、总结 一、ECharts简介 ECharts是百度开源的一个基于JavaScript的可视…

SQL 四大语言分类详解:DDL、DML、DCL、DQL

SQL&#xff08;结构化查询语言&#xff09;通常被分为四种主要类型&#xff0c;每种类型负责不同的数据库操作。下面我将详细介绍这四类SQL语言的语法和用途。一、DDL (Data Definition Language) 数据定义语言功能&#xff1a;定义和管理数据库对象结构&#xff08;表、视图、…

ESP-idf框架下的HTTP服务器\HTML 485温湿度采集并长传

项目描述:本项目采用485采集温湿度以及电压电流等,485模块分别为下图,串口转485模块采用自动收发模块,ESP32工作在AP热点模式,通过手机连接esp32的热点来和esp进行数据通讯,使用esp32作为HTTP服务器缺陷:项目的最终HTML页面代码可发给AI让其写注释#include "freertos/Free…

雅江工程解锁墨脱秘境:基础条件全展示(区位、地震、景点、天气)

目录 前言 一、区位信息 1、空间位置 2、区位介绍 二、地震信息 1、历史地震信息 2、5.0级以上大地震 三、景点信息 1、景点列表分布 2、4A级以上景点 四、天气信息 1、天气实况 2、天气应对挑战 五、总结 前言 相信最近大家对雅江电站的超级大工程项目应该有所耳…

​​机器学习贝叶斯算法

​​一、引言​​在当今机器学习领域&#xff0c;贝叶斯算法犹如一颗璀璨的明星。你是否想过&#xff0c;垃圾邮件过滤系统是如何准确判断一封邮件是否为垃圾邮件的呢&#xff1f;这背后可能就有贝叶斯算法的功劳。今天&#xff0c;我们就一同走进贝叶斯算法的世界&#xff0c;…

Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)

以【5 Stage pipeline CPU】搜索图片&#xff0c;选取5幅有代表性的图列举如下&#xff0c;并结合Chisel代码进行理解和点评。 图1&#xff1a;原文链接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 点评&#xff1a;黑色的部分…

Docker容器中文PDF生成解决方案

在Docker容器中生成包含中文内容的PDF文件时&#xff0c;经常遇到中文字符显示为方块或乱码的问题。本文将详细介绍如何在Docker环境中配置中文字体支持&#xff0c;实现完美的中文PDF生成。 问题现象 当使用wkhtmltopdf、Puppeteer或其他PDF生成工具时&#xff1a; 中文字符…

2.java集合,线程面试题(已实践,目前已找到工作)

1线程的创建方式 继承Thread类实现Runnable接口实现Callable接口 2.这三种方式在项目中的使用有哪些&#xff0c;一般都是怎么用的 继承thread类实现线程的方式通过实现run方法来实现线程&#xff0c;通过run进行线程的启用实现runnable方法实现run方法&#xff0c;然后通过thr…

站在前端的角度,看鸿蒙页面布局

从Web前端转向鸿蒙&#xff08;HarmonyOS&#xff09;开发时&#xff0c;理解其页面布局的相似与差异是快速上手的核心。鸿蒙的ArkUI框架在布局理念上与Web前端有诸多相通之处&#xff0c;但也存在关键区别。以下从五个维度系统分析&#xff1a; &#x1f4e6; 一、盒子模型&a…

JavaWeb遗传算法、TSP、模拟退火、ACO算法等实战应用

Java Web中实现遗传算法的应用 以下是关于Java Web中实现遗传算法的应用场景和实例的整理,涵盖不同领域的解决方案和实现方法: 遗传算法基础结构 在Java Web中实现遗传算法通常需要以下核心组件: 种群初始化:随机生成初始解集。 适应度函数:评估个体优劣。 选择操作:轮…

【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南

一、项目背景与需求 视频介绍 【图像算法 - 09】基于深度学习的烟雾检测&#xff1a;从算法原理到工程实现&#xff0c;完整实战指南今天我们使用深度学习来训练一个烟雾明火检测系统。这次我们使用了大概一万五千张图片的数据集训练了这次的基于深度学习的烟雾明火检测模型&a…

间接制冷技术概念及特征

1、基本概念 (1)间接制冷技术即二次制冷技术。常规做法:二次冷却液储液罐增加放置于制冷系统管路,促使冷量再快捷的传递给载冷剂,继而载冷剂冷量促使冷库达到制冷效果。间接制冷技术:通过常压的二次冷却介质进行大循环传送冷量,在直接制冷剂不易应用的位置或者不可运用直…

Antlr学习笔记 01、maven配置Antlr4插件案例Demo

文章目录前言源码插件描述pom引入插件案例&#xff1a;实现hello 标识符 案例1、引入Antlr4的pom运行依赖2、定义语义语法&#xff0c;配置.g4文件实现java代码3、编写完之后&#xff0c;执行命令实现编译4、编写单测测试使用参考文章资料获取前言 博主介绍&#xff1a;✌目前…

PostGIS面试题及详细答案120道之 (101-110 )

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

第十七天:原码、反码、补码与位运算

原码、反码、补码与位运算 一、原码、反码、补码 1、原码 定义&#xff1a;原码是一种简单的机器数表示法。对于一个有符号整数&#xff0c;最高位为符号位&#xff0c; 0 表示正数&#xff0c; 1 表示负数&#xff0c;其余位表示数值的绝对值。示例&#xff1a;以 8 位二进制…

一次完整的 Docker 启动失败排错之旅:从 `start-limit` 到 `network not found

一次完整的 Docker 启动失败排错之旅&#xff1a;从 start-limit 到 network not found 你是否也曾自信地敲下 sudo systemctl start docker&#xff0c;却只得到一个冰冷的 failed&#xff1f;这是一个开发者和运维工程师都可能遇到的场景。本文将通过一个真实的排错案例&…

Tdengine 时序库年月日小时分组汇总问题

年月分组select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分组select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

数据结构(01)—— 数据结构的基本概念

408前置学习C语言基础也可以看如下专栏&#xff1a;打怪升级之路——C语言之路_ankleless的博客-CSDN博客 目录 1. 基本概念 1.1 数据 1.2 数据元素 1.3 数据项 1.4 组合项 1.5 数据对象 1.6 数据类型 2. 数据结构 2.1 逻辑结构 2.2 存储结构 2.3 数据的运算 在学…

什么是模型并行?

模型并行c 简单来说&#xff0c;就是把一个模型拆开来放到多个 GPU 上&#xff0c;一起训练&#xff0c;从而化解“显存塞不下模型”的问题!更多专业课程内容可以听取工信部电子标准院《人工智能大模型应用工程师》课程获得详解&#xff01;

跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.

遇到的问题&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…