YOLOv11改进 - C3k2融合 | C3k2融合CBSA 收缩 - 广播自注意力:轻量级设计实现高效特征压缩,优化处理效率 | NeurIPS 2025

简介: 本文提出收缩-广播自注意力(CBSA),通过选取代表性token进行收缩计算并广播结果,实现高效、可解释的线性复杂度注意力机制。其逻辑透明,统一多种注意力形式,并集成至YOLOv11的C3k2模块,在视觉任务中展现优越性能与速度优势。

前言

本文介绍收缩 - 广播自注意力(CBSA)((Contract-and-Broadcast Self-Attention))机制,并将其集成到YOLOv11中。传统注意力机制存在黑盒难理解、计算复杂度高的问题,CBSA通过算法展开推导出本质上可解释且高效的注意力机制。它先从输入数据中选出少量代表性tokens,接着对代表进行收缩计算,再将结果广播给所有原始数据。该机制计算量线性增长,具有明确数学解释,还能统一多种注意力机制。我们将CBSA代码集成到YOLOv11的C3k2模块中。实验证明,改进后的YOLOv11在视觉任务上有可比性能和优越优势。

文章目录: YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLOv11改进专栏

介绍

image-20251221185702405

摘要

注意力机制在多个领域取得了显著的实证成功,但它们的基础优化目标仍不明确。此外,自注意力的二次复杂度变得越来越难以承受。虽然可解释性和效率是两个相互促进的追求,但先前的工作通常分开研究它们。在本文中,我们提出了一个统一的优化目标,通过算法展开推导出本质上可解释且高效的注意力机制。具体而言,我们构建了所提出目标的一个梯度步骤,其中包含我们的收缩-广播自注意力(CBSA)的一系列前向传递操作,该机制通过收缩输入标记的少量代表来将输入标记压缩到低维结构。这种新颖的机制不仅可以通过固定代表数量来实现线性扩展,还可以在使用不同代表集时涵盖各种注意力机制的实例化。我们进行了广泛的实验,证明了与黑盒注意力机制相比,在视觉任务上具有可比的性能和优越的优势。我们的工作阐明了可解释性和效率的整合,以及注意力机制的统一公式

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

一、核心定位:给注意力机制“拆黑盒、提速度、做统一”

传统注意力机制(比如Transformer里的softmax注意力)有两个大问题:

  1. “黑盒难理解”:模型为啥关注数据的某个部分、背后的决策逻辑是什么,说不清楚;
  2. “计算太笨重”:处理长数据(比如高清图的像素块、长文档的词语)时,要算所有数据点之间的关系,数据越长,计算量呈“平方级”暴涨,实际用起来很卡。

之前的研究要么只解决“理解”,要么只解决“速度”,CBSA则想一次性搞定——既让注意力机制的工作过程“说得通”,又让它“跑得飞快”,甚至还能把不同类型的注意力(比如softmax注意力、线性注意力)统一成一个框架。

二、设计逻辑:“抓少数代表,搞定所有数据”

CBSA的核心思路特别像“老师批改作业”:不用逐题看每个学生的作业,先挑几个有代表性的同学(比如中等水平、能反映全班共性问题的),只批改这几个“代表”的作业,再把批改思路告诉全班,大家各自修正。具体分两步:

1. 第一步:选“数据代表”(代表性 tokens)

从输入数据(比如图片的像素块、文本的词语)里,通过简单计算挑出少量“代表”——这些“代表”不是随机选的,而是能抓住数据核心特征的(类似聚类里的“中心点”,但会动态调整)。\
比如处理一张高清图时,不用关注每一个像素,而是先选出几十个能代表图片关键区域(比如物体边缘、纹理)的“像素代表”。

2. 第二步:“收缩代表+广播结果”

  • 收缩代表:只对这几个“代表”做复杂计算(比如提炼关键信息、优化特征),大幅减少计算量;
  • 广播结果:把“代表”的计算结果,通过简单的映射传递给所有原始数据,让所有数据都能学到“代表”的关键信息。

就像老师把“代表作业”的批改思路告诉全班,每个学生都能根据这个思路修正自己的作业,既省时间,又知道“为啥这么改”。

三、关键优势:又快、又懂、还“万能”

1. 速度快:计算量“线性增长”

传统注意力处理N个数据点,计算量是“N的平方”(数据翻倍,计算量翻4倍);而CBSA只算少量“代表”,计算量和数据量呈“线性增长”(数据翻倍,计算量也只翻倍)。\
实验里提到,处理高清图(比如512×512像素)时,CBSA的训练和推理速度比传统注意力快2倍以上,参数还更少(比如CBT-Small模型只用ViT-S 30%的参数、40%的计算量,就能达到差不多的精度)。

2. 易理解:不是“黑盒”,逻辑透明

CBSA的每一步都有明确的数学解释:选“代表”是为了抓住数据核心,“收缩”是为了优化特征,“广播”是为了传递信息——整个过程像“拆解问题、解决核心、推广结果”,不像传统注意力那样“不知道为啥这么算”。\
比如实验中观察到,CBSA能把杂乱的数据(比如带噪声的点)逐步压缩成规整的“低维结构”(类似把同类数据聚成清晰的簇),这个过程能直观看到,不用“猜模型在想什么”。

3. 万能:能统一所有经典注意力

最厉害的是,CBSA能“变”成其他注意力机制——只要换不同的“代表”选择方式:

  • 选“所有数据当代表”,CBSA就等同于传统的softmax注意力;
  • 选“正交的代表”(比如数据的主方向),CBSA就变成线性注意力;
  • 选“固定方向的代表”,CBSA就变成通道注意力(比如SE、CBAM里的通道优化)。

相当于给不同的注意力机制找了个“统一公式”,能清晰看到它们的本质区别(只是“代表”的选择方式不同)。

核心代码

class CBSA(nn.Module):
    def __init__(self, dim, heads, dim_head):
        super().__init__()
        inner_dim = heads * dim_head
        self.heads = heads
        self.dim_head = dim_head
        self.scale = dim_head ** -0.5

        self.attend = nn.Softmax(dim=-1)
        self.proj = nn.Linear(dim, inner_dim, bias=False)

        self.step_x = nn.Parameter(torch.randn(heads, 1, 1))
        self.step_rep = nn.Parameter(torch.randn(heads, 1, 1))

        self.to_out = nn.Linear(inner_dim, dim)

        self.pool = nn.AdaptiveAvgPool2d(output_size=(8, 8))

        self.qkv = nn.Identity()

    def attention(self, query, key, value):        
        dots = (query @ key.transpose(-1, -2)) * self.scale
        attn = self.attend(dots)
        out = attn @ value
        return out, attn

    def forward(self, x, return_attn=False):
        b, n, c = x.shape
        h = width = int(n ** 0.5)

        w = self.proj(x)
        self.qkv(w)
        rep = self.pool(w[:, :-1, :].reshape(b, h, width, c).permute(0, 3, 1, 2)).reshape(b, c, -1).permute(0, 2, 1)

        w = w.reshape(b, n, self.heads, self.dim_head).permute(0, 2, 1, 3)
        rep = rep.reshape(b, 64, self.heads, self.dim_head).permute(0, 2, 1, 3)

        rep_delta, attn = self.attention(rep, w, w)

        if return_attn:
            return attn.transpose(-1, -2) @ attn

        rep = rep + self.step_rep * rep_delta

        x_delta, _ = self.attention(rep, rep, rep)  
        x_delta = attn.transpose(-1, -2) @ x_delta
        x_delta = self.step_x * x_delta

        x_delta = rearrange(x_delta, 'b h n k -> b n (h k)')
        return self.to_out(x_delta)

结果

image-20251221185840397

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1098 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1772 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
706 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
664 13
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
463 5