在医学图像分割领域,传统CNN方法虽然能有效捕捉局部特征,但难以建模长距离依赖关系;而标准Transformer的全局自注意力机制虽然能捕获全局上下文,却面临计算复杂度高的问题。Swin Transformer通过局部窗口注意力降低了计算量,但窗口间交互有限。针对这些挑战,CSWin-SA创新性地提出了十字形窗口自注意力机制,在保持计算效率的同时增强了感受野交互能力。
1.CSWin-SA原理
CSWin-SA的核心创新是将多头注意力分成两组并行计算:一组处理水平条纹区域,另一组处理垂直条纹区域。具体实现上,输入特征X∈ℝ^(H×W×C)被均匀分割为:
- 水平条纹:M=H/sw个非重叠条纹,每个高度为sw
- 垂直条纹:S=W/sw个非重叠条纹,每个宽度为sw
其中可调节的sw参数(条纹宽度)能平衡计算复杂度和模型能力:高分辨率阶段用较小sw,低分辨率阶段用较大sw。
CSWin Transformer Block由以下组件构成:
- LayerNorm:输入特征归一化
- CSWin自注意力模块:
- 多头分组:将N个头均分为两组
- 水平组计算:H-Attention = Softmax(Q_hK_h^T/√d)V_h
- 垂直组计算:V-Attention = Softmax(Q_vK_v^T/√d)V_v
- 输出拼接:Output = Concat([H-Attention, V-Attention])
- MLP:两层感知机
- 残差连接:每个模块都包含跨层连接
CSWin-SA的核心创新是将多头注意力分成两组并行计算:一组处理水平条纹区域,另一组处理垂直条纹区域。具体实现上,输入特征X∈ℝ^(H×W×C)被均匀分割为:
- 水平条纹:M=H/sw个非重叠条纹,每个高度为sw
- 垂直条纹:S=W/sw个非重叠条纹,每个宽度为sw
其中可调节的sw参数(条纹宽度)能平衡计算复杂度和模型能力:高分辨率阶段用较小sw,低分辨率阶段用较大sw。
CSWin Transformer Block由以下组件构成:
- LayerNorm:输入特征归一化
- CSWin自注意力模块:
- 多头分组:将N个头均分为两组
- 水平组计算:H-Attention = Softmax(Q_hK_h^T/√d)V_h
- 垂直组计算:V-Attention = Softmax(Q_vK_v^T/√d)V_v
- 输出拼接:Output = Concat([H-Attention, V-Attention])
- MLP:两层感知机
- 残差连接:每个模块都包含跨层连接

2.CSWin-SA习作思路
CSA-ConvBlock在目标检测中的优点
在目标检测任务中,CSWin-SA的十字形注意力模式能同时捕获水平方向的物体边界特征和垂直方向的空间层级关系,这对定位不同长宽比的物体特别有效。相比传统窗口注意力,其条纹设计在计算量相近的情况下显著扩大了有效感受野,有利于检测小目标和密集排列物体。
CSA-ConvBlock在图像分割中的优点
对于图像分割,CSWin-SA通过并行处理水平和垂直条纹,既能保持边缘细节的精确度,又能建模器官间的全局空间关系。这种双向注意力机制特别适合医学图像中常见的管状结构(如血管)和复杂形状器官的分割,在保持计算效率的同时提升了边界分割的准确性。
3. YOLO与CSWin-SA的结合
将CSWin-SA融入YOLO框架可以增强其对不规则形状目标的检测能力,特别是改善小目标检测性能。十字形注意力机制与YOLO的多尺度预测天然契合,能在不显著增加计算负担的情况下提升检测精度。此外,CSWin-SA的参数效率使其非常适合实时目标检测场景。
4.CSWin-SA代码部分
YOLO11|YOLO12|改进| 交叉形窗口自注意力Cross-Shaped Window Self-Attention 提升对多尺度目标和复杂结构的特征表示_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. CSWin-SA引入到YOLOv12中
第一: 先新建一个v12_changemodel,将下面的核心代码复制到下面这个路径当中,如下图如所示。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_Cross_Shaped_Window_SelfAttention.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
)

42

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



