DCNv4来袭,更快收敛、更高速度、更高性能!

本文首发于AIWalker,谢谢关注~

https://arxiv.org/pdf/2401.06197.pdf
https://github.com/OpenGVLab/DCNv4

本文介绍了一种高效和有效的算子DCNv 4,它是专为广泛的视觉应用而设计的。与其前身DCNv 3相比,DCNv 4有两个关键增强功能:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCNv 4实现了三倍以上的前向速度

在各种任务中,包括图像分类、实例和语义分割,特别是图像生成中,DCNv 4表现出卓越的性能。当集成到潜在扩散模型中的U-Net等生成模型中时,DCNv 4的性能优于其基线,强调了其增强生成模型的潜力。在实际应用中,在InternImage模型中使用DCNv 4替换DCNv 3创建FlashInternImage,可以在不进行进一步修改的情况下将速度提高高达80%,并进一步提高性能。DCNv 4的速度和效率的进步,以及其在各种视觉任务中的强大性能,显示出其作为未来视觉模型基础构建块的潜力。

本文方案

重思考DCNv3的动态属性

给定输入 x ∈ R H × W × C \mathbf{x} \in \mathbb{R}^{H \times W \times C} xRH×W×C,带K个点的DCNv3算子可以描述如下:

y g = ∑ k = 1 K m g k x g ( p 0 + p k + Δ p g k ) \mathbf{y}_g = \sum_{k=1}^K \mathbf{m}_{gk} \mathbf{x}_g(p_0 + p_k + \Delta p_{gk}) \\ yg=k=1Kmgkxg(p0+pk+Δpgk)

y = c o n c a t ( [ y 1 , y 2 , ⋯   , y G ] , a x i s = 1 ) \mathbf{y} = concat([\mathbf{y}_1, \mathbf{y}_2, \cdots, \mathbf{y}_G], axis=1) y=concat([y1,y2,,yG],axis=1)

注: m g k \mathbf{m}_{gk} mgk表示空域聚合权值, p k p_k pk表示预定义采样点, Δ p g k \Delta p_{gk} Δpgk表示每个采样点的偏移。

DCNv3可视作卷积与注意力的组合,它一方面以滑动窗口形式对输入进行处理,遵循卷积的计算流程,另一方面采样偏移与空域聚合权值又与输入相关,达成了类似注意力的动态属性。

从图示可以看到,卷积与DCNv3的一个关键差异在于:DCNv3对空域聚合权值进行softmax规范化,这种处理延续了自注意力机制的点乘处理。相反,卷积并未对其权值进行规范处理且表现良好。

s o f t m a x ( 1 d Q K T ) V softmax(\frac{1}{\sqrt{d}} QK^T)V softmax(d 1QKT)V

为什么自注意力需要softmax呢?从其定义出发(见上式),如果没有softmax, K T V K^TV KTV先进行计算,进而退化为在相同的注意力窗口内对所有query执行线性投影,进而会出现显著的性能下降。

但是,对于卷积与DCNv3而言,每个点有其自身的聚合窗口,且聚合窗口内信息存在差异性,即没有"key"的概念,上述退化问题就不再存在,也就是说:规范化操作并非必需

作者基于ConvNeXt进行了上述论证,见上表。可以看到:当引入softmax后,模型出现了明显的性能下降。也就是说,对于滑动窗口类算子(如卷积、DCN),无界限聚合权值可以提供更强的表达能力

基于上述发现,作者移除了DCNv3中的softmax规范化,将调制因子的范围从[0,1]变为无界限动态权值。通过这种简单的调整,DCNv4取得了更快的收敛速度

加速DCN

理论上,DCN应当具有比其他大窗口稠密算子(如 7 × 7 7 \times 7 7×7深度卷积、稠密注意力)更快的处理速度,但事实并非如此,见前述Fig1a。针对此,作者首先对GPU进行了理论分析并发现:不同的内存读取方式会导致极大的访存消耗。基于此,作者进一步对通过节省额外内存指令显著改善了DCN访的处理速度,将稀疏运算的速度优势变成了现实。

假设输入与输出尺寸均为 ( H , W , C ) (H,W,C) (H,W,C),DCNv3计算量为 36 H W C 36HWC 36HWC FLOPs(注: 3 × 3 3\times 3 3×3窗口,因子4用于补偿双线性插值),MAC为 2 H W C + 27 H W G 2HWC + 27HWG 2HWC+27HWG G = C / 16 G=C/16 G=C/16 M A C = 3.7 H W C MAC=3.7HWC MAC=3.7HWC),这是理想情况。

为估计最大访存需求,我们考虑一个没有告诉缓存的情况:每个输出需要fresh内存读取,包含36个读取、27个偏移/聚合权值、一个写操作,即 M A C = 64 H W C MAC=64HWC MAC=64HWC大约是理想情况的17倍

在实际执行时,现在的DCN内核计算起来更加轻量级,因为对所有的 D ′ D^{'} D通道只需要执行一次双线性插值,从而节省了大量的时间。而大部分工作负载是从不同通道读取输入信息。当内存排布给是为NHWC时,所有的 D ′ D^{'} D是连续的,我们可以利用向量加载(比如,一次指令读取4个32位浮点数,而不是通过四个指令读取四次,进而减少了指令数与每个线性执行时间)。我们将类似的技术应用于GPU写入处理以减少访存时间提升带宽利用。此外,fp16/bf16数据格式可以进一步改善访存效率

DCN模块微观改造

在引入上述优化后,在DCNv3模块还有以下两点可以进一步优化:

  • 移除softmax后,调制因子变成了动态聚合权值,那么用于计算偏移与动态权值的线性层就可以合成一个,这可以进一步减少网络碎片化,进而消除额外负载,提升运行效率;
  • 在原始DCNv3模块中,复杂子网络( 3 × 3 3\times 3 3×3深度卷积+LN+GELU+线性层)用于计算偏移与动态权值。参考Xception设计,作者移除了LN-GELU仅采用原始分离卷积结构,进一步减少了运行耗时。作者进一步发现:如果延迟优先级非常高,甚至可以移除深度卷积且仅造成轻微性能牺牲。

本文实验

上表为ImageNet分类任务上不同方案性能对比,可以看到:

  • 加持DCNv4后,FlashInternImage大幅改善了InternImage的吞吐量约50%~80%,同时性能轻微提升;
  • FlashInternImage在推理速度上媲美ConvNeXt,但精度更高,达成更优速度-精度均衡。

上左表为COCO分割任务上不同方案性能对比,可以看到:FlashInternImage在所有模型尺寸上均表现出了优异的性能。

上右表给出了ADE20K任务上不同方案性能对比,可以看到:FlashInternImage去的了更快速度、更高性能。

推荐阅读

  1. CVPR2023 InternImage已开源 | 注入新机制,探索视觉大模型,达成COCO新纪录65.4mAP!
  2. CVPR2022 | RepLKNet: 大核卷积+结构重参数让CNN再次伟大
  3. CNN的反击!InceptionNeXt: 当 Inception 遇上 ConvNeXt
  4. Conv2Former | 超简Transformer风格ConvNet,比ConvNeXt还秀,媲美VAN
  5. 超过ConvNeXt,CSWin等!上海交大提出Transformer架构新SOTA:SeTformer!
  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIWalker-Happy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值