Transformer 架构凭借自注意力机制对全局依赖的建模能力,已广泛应用于计算机视觉(如图像分类、物理模拟)领域,但标准 Transformer 的自注意力存在平方级时间与内存复杂度(随输入网格点或 Token 数量的平方增长),在处理高分辨率图像(如大尺寸目标检测、精细分割)或大规模物理网格(如流体模拟)时,会面临计算成本过高、内存占用过大的问题,难以满足实际任务对效率的需求。
为解决这一痛点,现有方案常以牺牲信息完整性换取效率:例如基于窗口的局部注意力(如 Swin Transformer)通过限制交互范围降低复杂度,却易丢失长距离依赖;基于下采样或 Patch 划分的方法(如 ViT)虽提升效率,却会损失细粒度细节;低秩近似、稀疏注意力等方案则常伴随表达能力下降。在此背景下,MANO(Multipole Attention Neural Operator)借鉴n 体数值模拟中的快速多极子法(FMM) 思想,旨在兼顾线性复杂度、全局感受野与细细节保留,为高分辨率视觉任务和物理模拟提供高效解决方案。
1.MANO原理
MANO 的核心原理是将自注意力的 “全局网格点交互” 转化为基于距离的多尺度交互问题,核心逻辑源于 n 体系统 “近场精细计算、远场聚合近似” 的高效策略:
注意力的 n 体交互建模:将输入特征图的每个网格点看作 “粒子”,自注意力中 Query 与 Key 的交互视为粒子间的相互作用 —— 传统自注意力的高复杂度,本质是对所有粒子对逐一计算交互关系,导致效率低下;
多尺度分层交互:根据网格点间的距离动态划分交互范围:在细粒度尺度(近场),对局部网格点进行全分辨率的注意力计算,重点保留目标边缘、纹理等细细节;在粗粒度尺度(远场),通过下采样将分散的网格点聚合为 “多极子”,以低分辨率近似计算长距离交互,避免冗余计算;
线性复杂度保障:每个尺度的注意力计算都基于窗口化操作,复杂度随输入网格点数量线性增长;同时粗粒度尺度的网格点数量会随下采样指数减少,最终整体复杂度保持线性;此外,通过跨尺度特征融合(上采样后汇总),确保全局上下文信息不丢失,兼顾效率与表达能力。
MANO 的结构以多尺度分层处理 + 跨尺度特征融合为核心,整体分为三个关键模块:
1. 多尺度下采样模块:以原始高分辨率输入特征图为起点,通过共享的卷积核(如 2×2 大小、步长为 2 的卷积)生成多个不同分辨率的特征层。比如原始特征图是高 × 宽为 256×256,经过一次下采样后变为 128×128,再下采样一次变为 64×64,以此类推形成多个层级。所有层级共用同一套卷积核,确保不同尺度的特征映射规则一致,避免因尺度差异导致的信息失真。
2. 分层注意力计算模块:在每个分辨率层级,将该层级的特征图划分为可重叠的滑动窗口,通过同一套逐点计算操作生成 Query、Key、Value 三类特征。在每个窗口内部,计算局部注意力关系,得到该层级的注意力输出结果 —— 细尺度层级的窗口聚焦局部细节交互,粗尺度层级的窗口则侧重建模全局范围的依赖关系。
3. 跨尺度特征融合模块:对每个层级的注意力输出结果,通过转置卷积(与下采样所用的卷积核匹配)将其上采样回原始输入的分辨率。最后将所有层级上采样后的特征进行汇总求和,得到同时融合 “局部细细节” 与 “全局上下文” 的最终输出特征。
2. MANO习作思路
在目标检测中的优点
在目标检测任务中,MANO 的多尺度分层结构能同时满足 “小目标细细节捕捉” 与 “大目标全局建模” 的核心需求:细尺度注意力可精准提取小目标的边缘、纹理等判别性特征,避免因下采样导致小目标信息被压缩甚至湮灭;粗尺度注意力能聚合长距离依赖,帮助模型理解大目标的整体结构(如车辆的车身比例、行人的肢体姿态)以及目标与背景的空间关系,减少复杂场景下的误检与漏检;同时线性复杂度使其能处理高分辨率输入,进一步提升小目标的检出率,且不会显著增加推理延迟,兼顾检测精度与效率。
在分割中的优点
在语义分割任务中,MANO 的跨尺度融合机制可有效解决 “边界模糊” 与 “类别一致性” 两大关键问题:细尺度注意力能保留像素级的边缘细节(如道路与人行道的边界、物体的轮廓),避免分割结果出现 “块效应”(即同一类别像素被分割成离散块);粗尺度注意力可传递全局类别信息(如 “天空” 在图像顶部的全局分布、“草地” 的连续区域特征),确保同一类别的像素能被一致预测;此外,线性复杂度使其能高效处理高分辨率分割图像,无需对输入进行过度下采样,在保留小尺寸前景物体(如细小植物、局部纹理)细节的同时,降低内存占用,提升推理效率。
3. YOLO与MANO的结合
将 MANO 融入 YOLO 系列模型,可弥补 YOLO 传统 CNN backbone 全局上下文建模能力不足的缺陷:一方面,其细尺度注意力能增强 YOLO 对小目标、密集目标的特征提取能力,改善这类目标检测精度偏低的问题;另一方面,线性复杂度设计不会显著增加 YOLO 的推理延迟,保障模型在自动驾驶、视频监控等实时检测场景中的实用性,同时全局上下文建模还能减少 YOLO 在复杂背景下的误检。
4.MANO代码部分
YOLO11|YOLO12|改进| 多极注意力神经算子MANO 通过多尺度分层注意力机制,以线性复杂度实现全局感知与局部细节的高效融合_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. MANO到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
import torch
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO("/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/models/11/yolo11_MANO.yaml")\
# .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data="/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/datasets/VOC_my.yaml",
epochs=300,
imgsz=640,
batch=4,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
amp = False
)
1万+

被折叠的 条评论
为什么被折叠?



