可变形卷积(Deformable Convolution)是什么?

ops/2024/10/9 15:25:36/

为什么使用可变形卷积:

  1. 自适应感受野:可变形卷积允许网络动态调整其感受野的大小和形状,使其能够更好地适应不同尺度和形状的图像特征。
  2. 处理几何变形:对于包含复杂几何结构的图像,可变形卷积能更好地捕捉和处理这些变形。【特别是在一个风格迁移上面,例如字体生成,他其实就是一种几何变形,可变形卷积对于几何变形非常适用】
  3. 增强特征提取:通过学习最优的采样位置,可变形卷积可以提取更有意义和更具代表性的特征。

 

普通卷积

普通卷积(dilation=1)

普通卷积就是特征图与卷积核的权重W相乘再求和

  • y(p0​) 表示输出特征图在位置 p0​ 的值。
  • 𝑥(𝑝0+𝑝𝑛)表示输入特征图在位置 pn​ 的值。
  • 𝑤(𝑝𝑛)表示卷积核在位置 𝑝𝑛 的权重。
  • 𝑅 是卷积核的感受野,表示卷积核覆盖的区域

空洞卷积(dilation>1)

空洞卷积相当于pn不再是一个一个的变化,而是根据dilation进行变化

可变形卷积

可变形卷积的思想:

常规卷积的卷积核为固定的大小与形状,对于形状规则的物体可能会有更好的效果,那如果遇到形变比较复杂的物体呢?

一般来讲,可采用的做法有:丰富数据集、引入更多复杂形变的样本,使用各种数据增强和tricks,人工设计一些手工特征和算法等等,那么是否可以采用更加灵活的卷积核呢?于是可变形卷积--Deformable Conv出现了。

b,c,d是变形后的图像的feature坐标
可变形卷积可以更好的捕获需要关注的点

整体步骤:

  1. 学习△pn(offset坐标)
  2. 将原图像中的每个特征的坐标与△pn相加,得到offset后的特征应该在的位置
  3. 由于得到的新位置是float,所以需要双线性插值得到真正的最后坐标
  4. 与卷积核W相乘,然后相加

这里有一个非常非常非常容易混淆的点,所谓的deformable,到底deformable在哪?很多人可能以为deformable conv学习的是可变形的kernel,其实不是!可变形卷积并不是对kernel学习offset而是对feature的每个位置学习一个offset,然后将这个offset后的feature再与固定的kernel相乘相加。

△ Pn(feature偏移量)怎么学?

将input feature map输入进一个普通卷积,这个普通卷积学习input feature的每个位置的offset:

  • in-channel = 输入图像的 channel
  • out-channel = 2 * kernel-size * kernel-size【这里的out_channel是为了生成偏移的坐标,每个偏移的坐标有x、y 两个坐标值】
  • stride / padding是由P0决定的

需要学习多少参数?

由于在可变形卷积中,卷积核不再是固定,而是可以根据输入特征图的内容进行调整。这种调整是通过学习每个位置的偏移量来实现的。对于一个K*K的卷积核:

  • 需要学习K*K个位置的偏移。
  • 每个位置有两个方向的偏移(x和y)。

因此,每个卷积核总共需要学习2*K*K个偏移参数。

对于dilation=1的情况,因为图像的大小是H*W,所以一共要学习2*K*K*H*W个参数。

https://zhuanlan.zhihu.com/p/62661196

可变形卷积(Deformable Conv)原理解析与torch代码实现-CSDN博客

论文及代码详解——可变形卷积(DCNv1)_可变形卷积v1-CSDN博客

Deformable Convolution |可变形卷积_哔哩哔哩_bilibili


http://www.ppmy.cn/ops/121385.html

相关文章

【JavaEE初阶】网络原理

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 ⽹络互连 IP地址 端口号 协议 协议分层 优势 TCP/IP 五层网络模型 数据在网络通信中的整体流程 封装和分用 封装 分用 ⽹络互连 随着时代的发展,越来越需…

【分布式微服务云原生】8分钟掌握微服务通信的艺术:Dubbo与OpenFeign全面解析

摘要: 在构建微服务架构时,服务间的通信机制是核心要素之一。Dubbo和OpenFeign是两个非常流行的服务调用框架,它们各有千秋,适用于不同的场景。本文将深入探讨Dubbo和OpenFeign的主要特点、使用场景以及它们之间的差异&#xff0c…

C++11--智能指针

引入 为什么需要智能指针? 在介绍异常时,遇到以下场景,处理异常就会比较棘手: void Func() {int* arr1 new int[10];int* arr2 new int[20];int* arr3 new int[30];// ...delete[] arr1;delete[] arr2;delete[] arr3; }这里…

C# 无边框窗体,加阴影效果、多组件拖动、改变大小等功能完美实现优化版效果体验

一、预览效果 国庆节第一天,祝祖国繁荣昌盛! 1.1 效果图 (WinForm无边框窗体,F11可全屏) 拖动窗体时半透明效果(拖动时参考窗体后面释放位置) 说明:本功能的实现基于网友的原型完善而来,更多代码可以参考他的文章 h

Linux 下 poll 详解

在Linux系统编程中,poll 是一个强大的多路复用(I/O 多路复用)函数,用于同时监控多个文件描述符的事件,特别是在处理网络套接字或其他I/O设备时。相比于select,poll 支持监控更多的文件描述符,并…

【EO-1(Earth Observing-1)卫星】

EO-1(Earth Observing-1)卫星是美国国家航空航天局(NASA)新千年计划(New Millennium Program,NMP)地球探测部分中的第一颗对地观测卫星。以下是对EO-1卫星的详细介绍: 一、发射与服…

【华为HCIP实战课程四】OSPF邻居关系排错时间和区域问题,网络工程师

一、OSPF邻居关系排错 1、MA网络(默认的以太网、FR和ATM)要求掩码一致 2、相邻OSPF设备RID相同不能建立邻居-----上节已经详细演示说明 3、同一链路必须相同区域 4、Hello和死亡时间匹配 5、MTU检测 6、认证 7、Flag位的一致性 8、华为设备上网络类型不一致 二、同一…

【深度学习】05-RNN循环神经网络-02- RNN循环神经网络的发展历史与演化趋势/LSTM/GRU/Transformer

RNN网络的发展历史与演化趋势 RNN(Recurrent Neural Network,循环神经网络)是一类用于处理序列数据的神经网络,特别擅长捕捉数据的时间或上下文依赖性。在其发展的过程中,不断出现各种改进和变体,以解决不…