在深度学习用于图像相关任务(如目标检测、图像分割)的过程中,传统 Transformer 的全局自注意力机制虽能有效捕捉长距离语义依赖,但面临高计算复杂度的问题,尤其在处理高分辨率图像时难以平衡性能与效率;而 Swin Transformer 的移位窗口自注意力虽通过局部窗口计算降低了复杂度,却在一定程度上限制了感受野间的交互,无法充分利用全局信息。此外,轴向自注意力受限于顺序计算机制和窗口大小,交叉注意力则因窗口重叠在特定场景表现不佳。为解决这些矛盾,Cross-Shaped Window Self-Attention(交叉形窗口自注意力)被提出,旨在兼顾计算效率与感受野交互能力,满足高分辨率图像任务对全局信息捕捉和低计算成本的双重需求。
1.CSWSA原理
Cross-Shaped Window Self-Attention 的核心原理是将自注意力计算分解为水平条纹和垂直条纹两个并行维度,通过分区域并行处理实现全局信息捕捉与计算复杂度降低的平衡。首先,将输入特征图按水平和垂直方向划分为非重叠的条纹区域,每个条纹区域内独立计算自注意力;接着,将多头注意力机制的所有注意力头分为两组,一组专注于水平条纹的自注意力学习,另一组专注于垂直条纹的自注意力学习,两组计算过程并行执行;最后,将水平和垂直条纹自注意力的输出沿通道维度拼接,并通过线性变换融合不同注意力头的信息,形成最终的自注意力输出,既保留了各条纹内的局部细节,又通过条纹划分与并行计算覆盖了全局语义关联,同时避免了全局自注意力的高计算开销。

Cross-Shaped Window Self-Attention 的结构围绕 “条纹划分 - 并行计算 - 特征融合” 展开,具体包含三个关键部分:
条纹划分模块:根据输入特征图的分辨率和预设条纹宽度(sw),将特征图分别划分为水平方向的 M 个非重叠条纹(每个条纹尺寸为 sw×W×C)和垂直方向的 S 个非重叠条纹(每个条纹尺寸为 H×sw×C),条纹宽度可根据分辨率动态调整(高分辨率用小 sw,低分辨率用大 sw),确保不同尺度特征图的适配性;
并行自注意力计算模块:将 N 个注意力头平均分为两组,第一组对水平条纹逐一计算自注意力(通过 Query、Key、Value 矩阵变换与 Softmax 归一化实现),得到水平自注意力输出(H-Attention);第二组对垂直条纹执行相同的自注意力计算流程,得到垂直自注意力输出(V-Attention),两组计算并行进行以提升效率;
特征融合模块:将水平和垂直自注意力输出沿通道维度拼接,再通过一个权重矩阵(Wo)进行线性变换,学习不同注意力头间的关联关系,最终输出融合全局水平与垂直语义信息的特征图,为后续任务提供全面的特征表示。
2. CSWSA习作思路
在目标检测中的优点
Cross-Shaped Window Self-Attention 在目标检测中,通过水平与垂直条纹的并行自注意力计算,既能高效捕捉目标在图像中的全局位置关联(如目标与背景的空间关系、多目标间的相对分布),避免传统局部注意力因窗口限制导致的目标信息割裂;又能通过动态调整条纹宽度适配不同尺度的目标(小条纹捕捉小目标细节,大条纹覆盖大目标全局),同时并行计算机制大幅降低了高分辨率图像检测的计算成本,解决了传统 Transformer 检测模型中 “全局信息捕捉” 与 “实时检测效率” 的矛盾,提升检测精度的同时保障推理速度。
在分割中的优点
在图像分割任务中,Cross-Shaped Window Self-Attention 通过水平与垂直条纹的全面覆盖,可充分捕捉分割目标(如医学图像中的器官、皮肤病变区域)的边缘轮廓和内部结构细节,避免轴向自注意力顺序计算导致的细节丢失;其并行计算特性降低了高分辨率分割图像(如 512×512 的 CT/MRI 图像)的计算复杂度,满足分割任务对精细度和效率的需求;同时,条纹划分与动态宽度调整能适配不同大小的分割目标(如小器官胆囊、大器官肝脏),结合后续特征融合,有效提升分割边界的准确性和目标区域的完整性,解决传统分割模型中 “小目标漏分”“边界模糊” 的问题。
3. YOLO与CSWSA的结合
将 Cross-Shaped Window Self-Attention 融入 YOLO 模型,一方面可通过水平与垂直条纹的并行自注意力,增强 YOLO 对多尺度目标(尤其是小目标)的全局特征捕捉能力,改善传统 YOLO 因依赖局部卷积导致的小目标漏检、遮挡目标误检问题;另一方面,其低计算复杂度特性与 YOLO 的实时检测需求适配,在提升检测精度的同时,避免引入过多计算开销,保障 YOLO 在终端设备上的实时推理性能。
4.CSWSA代码部分
YOLO11|YOLO12|改进| 交叉形窗口自注意力Cross-Shaped Window Self-Attention 提升对多尺度目标和复杂结构的特征表示_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. CSWSA到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_Cross_Shape_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 = False
)
3万+

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



