【RT-DETR有效改进】Best Paper | DAttention (DAT)可变形注意力机制和动态采样点

一、本文介绍

本文给大家带来的是RT-DETR改进DAT(Vision Transformer with Deformable Attention)的教程,其发布于2022年CVPR2022上同时被评选为Best Paper由此可以证明其是一种十分有效的改进机制,其主要的核心思想是引入可变形注意力机制和动态采样点(听着是不是和可变形动态卷积DCN挺相似)。本文的讲解主要包含三方面:DAT的网络结构思想、DAttention的代码复现,如何添加DAttention到你的结构中实现涨点,本文改进是基于ResNet18、ResNet34、ResNet50、ResNet101,文章中均以提供,本专栏的改进内容全网独一份深度改进RT-DETR非那种无效Neck部分改进,同时本文的改进也支持主干上的即插即用,本文内容也支持PP-HGNetV2版本的修改。

专栏目录: RT-DETR改进有效系列目录 | 包含卷积、主干、RepC3、注意力机制、Neck上百种创新机制

专栏链接:RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR      

二、DAT的网络结构思想

论文地址: DAT论文地址

官方地址:官方代码的地址


2.1 DAT的主要思想和改进

DAT(Vision Transformer with Deformable Attention)是一种引入了可变形注意力机制的视觉Transformer,DAT的核心思想主要包括以下几个方面:

  1. 可变形注意力(Deformable Attention):传统的Transformer使用标准的自注意力机制,这种机制会处理图像中的所有像素,导致计算量很大。而DAT引入了可变形注意力机制,它只关注图像中的一小部分关键区域。这种方法可以显著减少计算量,同时保持良好的性能。

  2. 动态采样点:在可变形注意力机制中,DAT动态地选择采样点,而不是固定地处理整个图像。这种动态选择机制使得模型可以更加集中地关注于那些对当前任务最重要的区域。

  3. 即插即用:DAT的设计允许它适应不同的图像大小和内容,使其在多种视觉任务中都能有效工作,如图像分类、对象检测等。

总结:DAT通过引入可变形注意力机制,改进了视觉Transformer的效率和性能,使其在处理复杂的视觉任务时更加高效和准确。


2.2 DAT的网络结构图 

(a) 展示了可变形注意力的信息流。左侧部分,一组参考点均匀地放置在特征图上,这些点的偏移量是由查询通过偏移网络学习得到的。然后,如右侧所示,根据变形点从采样特征中投影出变形的键和值。相对位置偏差也通过变形点计算,增强了输出转换特征的多头注意力。为了清晰展示,图中仅显示了4个参考点,但在实际实现中实际上有更多的点。

(b) 展示了偏移生成网络的详细结构,每层输入和输出特征图的大小都有标注(这个Offset network在网络的代码中需要控制可添加可不添加)。

通过上面的方式产生多种参考点分布在图像上,从而提高检测的效率,最终的效果图如下->


2.3 DAT和其他机制的对比

DAT与其他视觉Transformer模型和CNN模型中的DCN(可变形卷积网络)的对比图如下,突出了它们处理查询的不同方法(图片展示的很直观,不给大家描述过程了)


三、DAT即插即用的代码块

下面的代码是DAT的网络结构代码,官方的代码中存在许多bug而且参数都未定义,这里我替大家都行了修改而且在使用时无需手动添加任何参数(但是本文的方法需要按照有参的注意力机制添加但是只是不需要进行传入参数在yaml文件中,ya'm),我都设置了通过模型进行了自动计算,使用方法看章节四。

import numpy as np
import torch
import torch.nn as nn
import einops
from timm.models.layers import trunc_normal_

__all__ = ['DAttentionBaseline', 'BasicBlock_DAT', 'BottleNeck_DAT']


class LayerNormProxy(nn.Module):

    def __init__(self, dim):
        super().__init__()
        self.norm = nn.LayerNorm(dim)

    def forward(self, x):
        x = einops.rearrange(x, 'b c h w -> b h w c')
        x = self.norm(x)
        return einops.rearrange(x, 'b h w c -> b c h w')


class DAttentionBaseline(nn.Module):

    def __init__(
            self, q_size=(224, 224), kv_size=(224, 224), n_heads=8, n_head_channels=32, n_groups=1,
            attn_drop=0.0, proj_drop=0.0, stride=1,
            offset_range_factor=-1, use_pe=True, dwc_pe=True,
            no_off=False, fixed_pe=False, ksize=9, log_cpb=False
    ):

        super().__init__()
        n_head_channels = int(q_size / 8)
        q_size = (q_size, q_size)

        self.dwc_pe = dwc_pe
        self.n_head_channels = n_head_channels
        self.scale = self.n_head_channels ** -0.5
        self.n_heads = n_heads
        self.q_h, self.q_w = q_size
        # self.kv_h, self.kv_w = kv_size
        self.kv_h, self.kv_w = self.q_h // stride, self.q_w // stride
        self.nc = n_head_channels * n_heads
        self.n_groups = n_groups
        self.n_group_channels = self.nc // self.n_groups
        self.n_group_heads = 
"Dattention" 并不是一个标准的信息技术术语,在提供的资料中也没有直接提及这个词语。可能是指 "attention" 机制在深度学习自然语言处理中的应用,特别是在涉及递归神经网络 (RNN) 变压器模型 (Transformer models) 的背景下。 Attention 机制是一种模拟人类注意力选择能力的方法,使机器能够在处理序列信息时聚焦于最相关的部分。例如,在翻译句子的时候,不是平均地对待每一个单词,而是可以更加关注那些对于生成目标语句更重要的元素。这种机制极大地提高了许多 NLP 任务的效果。 如果确实指的是 attention 技术,则其定义、用途及潜在问题如下: **Definition 定义** Attention 是一种算法组件,用于帮助模型确定输入数据的不同部分的重要性权重。这使得模型可以在执行特定任务时集中精力于最重要的特征上。 **Usage 用法** - **自然语言处理**: Attention 被广泛应用于文本摘要、问答系统、情感分析等领域。 - **图像识别**: 可以用来突出图片的关键区域。 - **语音识别**: 帮助捕捉音频信号的重要片段。 **Issues 问题** - **计算成本高**: 大规模数据集上的复杂矩阵运算可能导致较高的训练时间硬件要求。 - **解释性差**: 尽管性能优越,但有时候难以直观理解为什么某些部分被赋予更高的关注度。 - **过拟合风险**: 如果不正确设置超参数或者正则化不足,可能会导致模型过度适应训练数据而泛化能力下降。 为了确保准确无误,请确认是否有关于 "Dattention" 特定背景下的含义或者是拼写错误。如果有更多具体细节或其他相关关键词,可以帮助更精确地定位所需信息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Snu77

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

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

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

打赏作者

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

抵扣说明:

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

余额充值