Deformable Convolution 可变形卷积

可变形卷积是一种改进的标准卷积方法,它允许卷积核根据输入数据动态调整其形状,从而更好地提取特征。该方法提高了模型对不同尺度和形变物体的适应能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  可变形卷积概念出自2017年论文:Deformable Convolutional Networks

在这里插入图片描述

  顾名思义,可变形卷积的是相对于标准卷积的概念而来。
在这里插入图片描述
(a) 一个经典的 3 × 3 3 \times3 3×3 卷积,每一个卷积输入的都是绿色的部分。
(b) Deformable Convolution,虽然也是做这九个点的卷积,但是这个卷积具体采在这个像素的位置是可以变化的,所以叫做 deformable。 那么变形的量是通过学习根据输入数据得出的。其中图 c 和 d 是两种特殊的情况。

为什么要可变形卷积?

  我们知道卷积核的目的是为了提取输入物的特征。我们传统的卷积核通常是固定尺寸、固定大小的(例如3x3,5x5,7x7.)。这种卷积核存在的最大问题就是,对于未知的变化适应性差,泛化能力不强。

  卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸。网络内部缺乏能够解决这个问题的模块,这会产生显著的问题,例如,同一 CNN 层的激活单元的感受野尺寸都相同,这对于编码位置信息的浅层神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。

解决上述问题最直观的想法就是,我们的卷积核可以根据实际情况调整本身的形状,更好的提取输入的特征。

在这里插入图片描述

可形变卷积采样点可视化:经过三层 3x3 卷积后的采样点分布。

在这里插入图片描述

可变形卷积理论?

(1)首先声明一点,在可变形卷积中,可变形卷积操作和池化操作都是2维的,都是在同一 channel 上进行的,常规的卷积操作主要可以分为两部分:(1)在输入的 feature map 上使用规则网格 R \mathcal{R} R 进行采样;(2)进行加权运算, R \mathcal{R} R 定义了感受野的大小和扩张

对于在输出的 feature map 上的每个位置 p 0 \mathbf{p}_0 p0,通过下列式子进行计算:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , ⋯   , ( 0 , 1 ) , ( 1 , 1 ) } 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) \\ \mathcal{R} = \{(-1, -1),(-1,0), \cdots, (0,1),(1,1)\} y(p0)=pnRw(pn)x(p0+pn)R={(1,1),(1,0),,(0,1),(1,1)}
其中, p n \mathbf{p}_n pn 是对 R \mathcal{R} R 中所列位置的枚举,它就是相对于 p 0 \mathbf{p}_0 p0 这个像素点距离这个 kernel 中心的偏移,权重为 w ( ⋅ ) \mathbf{w}(\cdot) w()
对于普通的卷积,对于计算点 y ( p 0 ) y(\mathbf{p}_0) y(p0) 的特征值,它就是使用了 y ( p 0 ) y(\mathbf{p}_0) y(p0) 及其周边像素的一个加权和。

如果我们使用 3 × 3 3\times3 3×3的卷积,如下图所示:

在这里插入图片描述

5 × 5 5 \times 5 5×5 的卷积如下图所示:
在这里插入图片描述

(2) Deformable Convolution:

可变形卷积的操作是不同的,在可变形网络的操作中,常规的规则网格 R \mathcal{R} R 通过增加一个偏移量进行扩张,同样的位置 p 0 \mathbf{p}_0 p0 变为:
y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) 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 \Delta \mathbf{p}_n Δpn 通常是小数,因此我们通过双线性插值法进行实现,公式为:
x ( p ) = ∑ q G ( q , p ) ⋅ x ( q ) , p = p 0 + p n + Δ p n , G ( q , p ) = g ( q x , p x ) ⋅ g ( q y , p y ) , g ( a , b ) = max ⁡ ( 0 , 1 − ∥ a − b ∥ ) . \mathbf{x}(\mathbf{p}) = \sum_{\mathbf{q}} G(\mathbf{q}, \mathbf{p}) \cdot \mathbf{x}(\mathbf{q}), \mathbf{p} = \mathbf{p}_0 + \mathbf{p}_n + \Delta \mathbf{p}_n,\\ G(\mathbf{q}, \mathbf{p}) = g(\mathbf{q}_x, \mathbf{p}_x) \cdot g(\mathbf{q}_y, \mathbf{p}_y) , \\ g(a, b) = \max(0, 1 - \| a -b\|). x(p)=qG(q,p)x(q),p=p0+pn+Δpn,G(q,p)=g(qx,px)g(qy,py),g(a,b)=max(0,1ab).

拓展:双线性插值
首先看,双线性插值的作用,对图像进行缩放。假设原图像大小为 m × n m \times n m×n,目标图像的大小为 a × b a \times b a×b,那么两幅图像的边长比为 m / a , n / b m/a,n/b m/a,n/b。注意,通常这个比例不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值。比如,对应的坐标为(2.5,4.5),那么最近的像素是(2,4)(2,5)(3,4)(3,5)
若图像为灰度图像,那么 ( i , j ) (i,j) (i,j) 的灰度值可以通过以下公式计算:
f ( i , j ) = w 1 ∗ p 1 + w 2 ∗ p 2 + w 3 ∗ p 3 + w 4 ∗ p 4 f(i, j) = w1*p1 + w2*p2 + w3*p3 + w4*p4 f(i,j)=w1p1+w2p2+w3p3+w4p4
其中, p i , i = 1 , 2 , 3 , 4 p_i, i=1,2,3,4 pi,i=1,2,3,4 为最近的四个像素点, w i , i = 1 , 2 , 3 , 4 w_i, i=1,2,3,4 wi,i=1,2,3,4为各点相应权值。


可变形卷积结构形式?

注意:这里有一个非常非常非常容易混淆的点,所谓的deformable,到底deformable在哪?很多人可能以为deformable conv学习的是可变形的kernel,其实不是不是不是!本文并不是对kernel学习offset而是对feature的每个位置学习一个offset。
在这里插入图片描述

各部分维度如下:
input feature map:(batch, H, W, C)
output feature map: (batch, H, W, N)
offset field: (batch, H, W, 2N)

  offset field 通过在原图上进行标准卷积操作得到,通道数为2N表示N个2维的偏置量 ( Δ \Delta Δx , Δ \Delta Δ y) ,N 表示卷积核的个数即输出特征层的通道数。

  形变卷积过程可以描述为:首先在输入feature map上进行标准卷积得到N个2维的偏置量 ( Δ \Delta Δx , Δ \Delta Δy),然后分别对输入feature map上各个点的值进行修正(设 feature map为 P,即 P(x, y)= P(x + Δ \Delta Δx , y + Δ \Delta Δy) ,当 x + Δ \Delta Δ 为小数时,使用双线性插值计算 P( x + Δ \Delta Δx ,y + Δ \Delta Δy) )。形成 N个 feature map,然后使用 N 个卷积核一一对应进行卷积得到输出。

公式:
在这里插入图片描述
在这里插入图片描述

### 可变形卷积 V4 实现与教程 #### 背景介绍 可变形卷积网络(Deformable ConvNets)通过引入额外的偏移量来增强标准卷积操作的能力,从而允许更灵活的感受野形状。这一系列的工作已经经历了多个版本的发展,在不同阶段提出了不同的改进措施。 #### 版本演进概述 最新版的可变形卷积V4进一步优化了模型结构和训练方法,提高了特征提取效率以及目标检测性能。然而需要注意的是,当前主流讨论较多的是Deformable DETR (DDETR),它被认为是继DCN v3之后的重要进展之一[^1]。 #### 论文资源 对于最新的研究动态,建议关注以下两篇重要文献: - Deformable DETR: 这篇文章介绍了如何将自注意力机制融入到可变形卷积中,实现了端到端的目标检测框架。 - Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection: 尽管不是直接针对DCN v4的研究,但对于理解现代目标检测中的损失函数设计具有重要意义。 #### 开源实现 目前并没有官方发布的名为 "deformable conv v4" 的具体版本标签。但是可以参考以下几个项目获取最前沿的技术实现: - **Detectron2**: Facebook AI Research 提供的一个通用计算机视觉库,支持多种先进的算法,包括但不限于各种形态的可变形卷积变体。 ```bash git clone https://github.com/facebookresearch/detectron2.git cd detectron2 python setup.py install ``` - **MMDetection**: OpenMMLab开发的一套模块化目标检测工具箱,集成了大量优秀的研究成果,其中也包含了对可变形卷积的支持。 ```bash pip install mmdet ``` #### 教程推荐 为了更好地理解和应用这些技术,可以从下面几个方面入手学习: - 阅读原始论文并尝试复现实验结果; - 查看上述开源项目的文档说明和技术博客文章; - 利用在线课程平台如Coursera、Udacity等寻找专门讲解此类主题的内容;
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值