随着计算机视觉向多模态融合方向发展,红外 - 可见光融合、医疗多模态融合等场景日益普及,其核心需求是整合不同模态的独特价值 —— 例如部分模态擅长捕捉全局结构,部分模态专注于局部细节或特定物理属性。然而,传统特征融合面临两大关键瓶颈:一方面,早期方法多依赖直接拼接、元素相加或浅层卷积交互,仅能实现模态特征的表面融合,无法深入挖掘模态内特征的内在关联性,导致单一模态的关键信息在融合中被稀释或扭曲;另一方面,传统方法过度侧重模态间的相关性挖掘,忽视了模态间差异所蕴含的互补价值,使得融合特征难以充分吸收不同模态的独特优势。此外,下游视觉任务(如目标检测、语义分割)对特征的完整性、区分度要求不断提升,传统融合模块输出的特征表达力不足,成为制约任务性能突破的关键短板。在此背景下,DAFM 应运而生,旨在通过创新的注意力机制设计,实现模态内特征规整与模态间信息互补的双重优化。
1.DAAFM原理
DAFM 的核心原理是 “双聚合注意力协同优化”:一是通过自注意力机制(SAB)聚焦模态内部,对单一模态的特征进行精细化提炼,强化特征在空间、语义上的一致性,确保模态自身的关键信息(如目标结构、细节纹理)不被丢失或干扰;二是通过交叉注意力交互块(CAIB)搭建模态间的信息桥梁,专门挖掘不同模态间的互补关系,且创新性采用负 softmax(softmin)机制替代传统 softmax,通过聚焦模态间的差异点,最大化提取彼此的独特信息,避免仅依赖相关性导致的信息冗余;最终通过可学习权重动态平衡两种注意力的输出,实现模态内连贯性与模态间互补性的精准权衡,生成兼具完整性和辨识度的融合特征。

DAFM 的结构围绕 “特征预处理 - 双注意力计算 - 特征融合输出” 的逻辑层层递进:首先,通过 1×1 卷积层对输入的两种模态特征进行维度转换,生成符合注意力计算要求的 QKV(Query、Key、Value)三元组,完成特征适配;其次,并行部署两大核心计算单元 —— 自注意力块(SAB)负责对每种模态的 QKV 进行内部交互,优化模态内特征;交叉注意力交互块(CAIB)则以一种模态的 Query 与另一种模态的 Key、Value 进行跨模态计算,实现模态间信息交互;最后,通过 1×1 卷积层对两种注意力的输出进行维度调整,结合可学习参数 α 和 β 对其进行加权融合,再经 3×3 卷积完成特征降维和整合,输出可直接用于下游任务的融合特征图。
2.DAAFM习作思路
(一)目标检测场景
DAFM 通过自注意力机制强化了单一模态内目标特征的完整性和连贯性,确保目标的核心结构(如轮廓、关键部件)在融合过程中不被破坏,为目标定位提供稳定支撑;同时,交叉注意力机制充分挖掘不同模态中与目标相关的互补信息(如外观特征与语义特征、全局特征与局部特征),让检测模型能更全面地感知目标属性,有效提升对复杂场景下模糊、遮挡、小尺寸目标的识别能力,降低漏检和误检概率。
(二)图像分割场景
自注意力机制使 DAFM 能够保持模态内特征的空间关联性,助力分割模型精准捕捉不同类别对象的边界轮廓和区域完整性,避免出现分割区域碎片化;交叉注意力则能深度整合不同模态中关于场景结构、细节纹理的互补信息,增强类别特征的区分度,让分割模型更清晰地分辨相似类别对象,提升分割结果的精细度和语义一致性,减少类别混淆现象。
3. YOLO与DAAFM的结合
将 DAFM 嵌入 YOLO 模型,可让其高效融合多模态特征,强化目标与背景的对比度,显著提升对小目标、远距离目标及复杂背景下目标的检测灵敏度;同时,DAFM 输出的融合特征兼具稳定性和辨识度,能增强 YOLO 对光照变化、天气干扰等复杂环境的适应性,让模型在各类实际场景中保持更稳定、可靠的检测性能。
4.DAAFM代码部分
YOLO11|YOLO12|改进| 细节保留上下文融合模块DPCF,通过动态门控保留小目标、遮挡目标的细节,显著提升这类难点目标的检测精度。_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. DAAFM引入到YOLOv12中
第一: 先新建一个change_model,将下面的核心代码复制到下面这个路径当中,如下图如所示。E:\Part_time_job_orders\YOLO_NEW\YOLOv12\ultralytics\v12_changemodel。
第二:在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/tgf/tgf/yolo/model/YOLO12_All/ultralytics/cfg/models/12/yolo12_DAAFM.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 = True
)
9215

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



