现有深度学习模型在处理复杂场景图像时的技术瓶颈。在 CNN 模型中,其依赖局部感受野的特性导致特征提取存在局限性,难以有效筛选通道维度的有用信息,也无法精准定位空间维度的关键区域,容易产生特征冗余;而 Transformer 模型虽擅长捕捉长程依赖,但在局部特征建模上存在不足,且面临通道与空间特征协同优化的难题。随着目标检测、分割等任务对精度要求的提升,复杂场景下的多尺度目标、模糊边界、背景噪声干扰等问题愈发突出,单一维度的注意力机制已无法满足需求 —— 仅关注通道会忽略空间上的关键区域,仅聚焦空间则会遗漏通道间的特征优先级差异,导致模型难以精准捕捉核心特征,影响任务性能。在此背景下,CASAB 应运而生,旨在通过通道与空间双维度的注意力协同,解决特征筛选不全面、关键信息捕捉不精准的问题,为后续任务提供更高效的特征表达。


1. CASAB原理
CASAB 通过融合通道注意力与空间注意力机制,双维度优化特征表达。通道维度上,结合全局平均池化与全局最大池化捕捉特征整体上下文与关键激活信息,经全连接层与激活函数生成通道注意力权重,实现对重要特征通道的强化与冗余通道的抑制;空间维度上,通过均值、最大、最小及求和四种池化操作全面捕捉空间特征的分布、强度等信息,经深度卷积与激活函数生成空间注意力图,精准定位有价值的空间区域,最终通过元素相加融合两维度注意力输出,实现特征的精准筛选与增强。

CASAB 整体分为特征预处理、通道注意力模块(CAM)、空间注意力模块(SAM)及特征融合四部分。首先对输入特征图进行初步精炼;随后 CAM 模块通过 GAP、GMP 提取通道统计信息,经 FC 层与 Swish、Sigmoid 激活生成通道权重;SAM 模块对输入特征图执行多类型池化并拼接,通过 7x7 深度卷积、Swish 激活与 1x1 卷积生成空间权重;最后将 CAM 与 SAM 的输出进行元素 - wise 加法,得到最终优化后的特征图。
2. CASAB习作思路
在目标检测任务中:CASAB 在目标检测中,能通过通道注意力精准筛选与目标识别相关的特征通道,减少背景噪声带来的特征干扰,同时借助空间注意力快速聚焦图像中可能存在目标的区域,提升目标定位的精准度,尤其在处理多尺度目标时,可自适应强化不同尺度目标的特征表达,帮助模型更高效地区分目标与背景,提升检测的召回率与精确率。
在目标检测任务中:CASAB 的通道注意力可强化与分割目标边界、细节相关的特征通道,空间注意力能精准捕捉目标的边缘与内部结构信息,双维度协同作用下,有效解决分割中目标边界模糊、多尺度目标特征不一致的问题,同时减少无关区域特征的干扰,让模型生成更细腻、精准的分割结果。
3. YOLO与CASAB的结合
将 CASAB 融入 YOLO 模型,可增强网络对小目标、遮挡目标的特征提取能力,提升目标定位与分类的精准度;同时能自适应筛选关键特征,减少冗余计算,在保证检测性能的前提下优化模型推理效率。
4.CASAB代码部分
YOLO11|YOLO12|改进| 通道与空间注意力模块CASAB ,通过双维度注意力机制自适应强化关键特征、抑制冗余信息,提升模型对重要特征的捕捉与利用能力_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何根据自己的数据集选择最优的模块提升精度_哔哩哔哩_bilibili
用一篇论文教您如何使用YOLOv11改进模块写一篇1、2区论文_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve
5. CASAB到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_CASA.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
)
163

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



