1. 工程简介 🚀
本工程基于 Ultralytics 框架扩展,面向语义分割与 YOLO 系列模型改进实验。核心特点是通过切换yaml配置文件,即可快速完成不同网络结构的训练、对比与验证,无需为每个模型单独编写训练脚本。
当前已支持的主要模型家族 🧩
- 语义分割模型:
UNet、UNet++、DeepLabV3+、DPT、FPN、PSPNet、MAnet、PAN、Linknet、UPerNet、Segformer - YOLO 系列模型:
YOLOv8、YOLOv10、YOLO11、YOLO12、YOLO26
2. 本工程的优势 ✨
只需替换ultralytics/cfg/models/...下的模型yaml,就可以在相同数据集、相同训练入口、相同评估流程下完成不同结构的对比实验。
本框架最大的特点,是支持通过切换 YAML 快速完成不同结构的对比实验。
3. 模块信息卡片 🧾
| 项目 | 内容 |
|---|---|
| YAML 文件 | yolo11/yolo11-CASAB-3.yaml |
| 模块名称 | CASAB |
| 模型系列 | YOLO11 |
| 变体编号 | 方案3 |
| 原始代码位置 | ultralytics/nn/extra_modules/attention/CASAB.py |
| 当前接入思路 | 在P4、P3、回流P4、P5多个关键节点连续插入CASAB |
4. 论文介绍 📚
4.1 文章地址 🔗
https://openaccess.thecvf.com/content/CVPR2025/papers/Wazir_Rethinking_Decoder_Design_Improving_Biomarker_Segmentation_Using_Depth-to-Space_Restoration_and_CVPR_2025_paper.pdf
4.2 论文简介 🧠
📌 对应论文:Rethinking Decoder Design: Improving Biomarker Segmentation Using Depth-to-Space Restoration and Residual Linear Attention。
这篇论文强调,分割网络的上限并不只取决于编码器强不强,解码阶段如何恢复空间结构、如何整合不同层语义、如何突出关键区域,同样会直接影响最终分割质量。作者因此把研究重点放在解码器重构上,希望在细节恢复和上下文融合之间找到更高效的平衡。
论文通过改进空间恢复方式,并结合更有效的注意力机制,提升了局部结构表达、边界质量和多尺度信息利用效率。它并不是单独做一个注意力块,而是从整个解码器信息流角度重新思考特征恢复问题。
⚠️ 说明:当前工程中的CASAB是从这类设计中抽取出的联合注意力子模块,并非整篇论文完整解码器的逐层还原。对于本工程而言,更重要的是把这种模块化注意力接入 YOLO,再通过切换 YAML 快速比较“单层接入”和“多层接入”的实验效果。
4.3 模块核心思想 ✨
CASAB可以在多个尺度节点重复使用,对不同阶段的特征分别做通道与空间双重筛选。- 当它被布置到整条多尺度传播链路中时,更适合观察累计增强效果。
- 在本工程里,这种设计非常适合做结构消融和接入位置对比。
5. 改进步骤 🛠️
步骤1:定位并加入原始模块代码 📦
这一步先确认CASAB的原始实现位置,再把对应代码加入当前工程,作为后续模块导入、tasks.py注册和 YAML 调用的基础。
- 原始代码位置:
ultralytics/nn/extra_modules/attention/CASAB.py - 当前模块类别:
attention - 本步骤作用:将
CASAB联合注意力模块加入注意力模块目录,供 YOLO11 语义分割结构直接调用
importos,sys sys.path.append(os.path.dirname(os.path.abspath(__file__))+'/../../../..')importwarnings warnings.filterwarnings('ignore')fromcalflopsimportcalculate_flopsimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFfromultralytics.nn.modules.convimportConv,DSConvclassCASAB(nn.Module):def__init__(self,in_channels,reduction_ratio=16):super(CASAB,self).__init__()self.global_avg_pool=nn.AdaptiveAvgPool2d(1)self.global_max_pool=nn.AdaptiveMaxPool2d(1)self.fc1=nn.Linear(in_channels,in_channels//reduction_ratio)self.fc2=nn.Linear(in_channels//reduction_ratio,in_channels)self.spatial_conv=nn.Conv2d(4,1,kernel_size=7,padding=3,groups=1)self.swish=nn.SiLU()self.sigmoid=nn.Sigmoid()self.feature_refine=DSConv(in_channels,in_channels,act=nn.LeakyReLU)defchannel_attention(self,x):b,c,h,w=x.size()gap=self.global_avg_pool(x).view(b,c)gmp=self.global_max_pool(x).view(b,c)combined=gap+gmp channel_att=self.fc1(combined)channel_att=self.swish(channel_att)channel_att=self.fc2(channel_att)channel_att=self.sigmoid(channel_att)channel_att=channel_att.view(b,c,1,1)returnx*channel_attdefspatial_attention(self,x):mean_pool=torch.mean(x,dim=1,keepdim=True)max_pool,_=torch.max(x,dim=1,keepdim=True)min_pool,_=torch.min(x,dim=1,keepdim=True)sum_pool=torch.sum(x,dim=1,keepdim=True)pooled_features=torch.cat([mean_pool,max_pool,min_pool,sum_pool],dim=1)spatial_att=self.spatial_conv(pooled_features)spatial_att=self.swish(spatial_att)spatial_att=self.sigmoid(spatial_att)returnx*spatial_attdefforward(self,x):x_refined=self.feature_refine(x)x_channel=self.channel_attention(x_refined)x_spatial=self.spatial_attention(x_refined)output=x_channel+x_spatialreturnoutputif__name__=='__main__':RED,GREEN,BLUE,YELLOW,ORANGE,RESET="\033[91m","\033[92m","\033[94m","\033[93m","\033[38;5;208m","\033[0m"device=torch.device('cuda')iftorch.cuda.is_available()elsetorch.device('cpu')batch_size,channel,height,width=1,16,32,32inputs=torch.randn((batch_size,channel,height,width)).to(device)module=CASAB(channel).to(device)outputs=module(inputs)print(GREEN+f'inputs.size:{inputs.size()}outputs.size:{outputs.size()}'+RESET)print(ORANGE)flops,macs,_=calculate_flops(model=module,input_shape=(batch_size,channel,height,width),output_as_string=True,output_precision=4,print_detailed=True,)print(RESET)步骤2:在聚合导出文件中导入模块 🧩
需要在ultralytics/nn/extra_modules/__init__.py中补充导入,让后续模块注册和 YAML 解析都能正确识别CASAB。
from.attention.CASABimportCASAB步骤3:在ultralytics/nn/tasks.py中注册模块 ⚙️
需要把该模块加入注意力模块注册集合,这样parse_model()在解析 YAML 时,才能正确实例化CASAB。
attention_modules=frozenset({extra_modules.ACA,extra_modules.ACAB,extra_modules.CoordAtt,extra_modules.CASAB,extra_modules.ContrastDrivenFeatureAggregation,extra_modules.DeformableLKA,extra_modules.DHPF,extra_modules.EMA,extra_modules.FSA,extra_modules.KSFA,extra_modules.LSKBlock,extra_modules.MCA,extra_modules.MLCA,extra_modules.MultiSEAM,extra_modules.SimAM,})步骤4:新增或修改 YAML 配置文件 📄
当前方案对应的 YAML 位于ultralytics/cfg/models/improve/attention/yolo11/目录下。方案3的特点,是在P4、P3、回流P4与P5多个节点都插入CASAB,属于更激进的多层注入方式,适合验证该联合注意力在整条多尺度传播链上的累计增强作用。
# Ultralytics AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLO11 object detection model with P3/8 - P5/32 outputs# Model docs: https://docs.ultralytics.com/models/yolo11# Task docs: https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesscales:# model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 181 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss:[0.50,0.50,1024]# summary: 181 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm:[0.50,1.00,512]# summary: 231 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl:[1.00,1.00,512]# summary: 357 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx:[1.00,1.50,512]# summary: 357 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]# 2-P2/4-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]# 4-P3/8-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]# 6-P4/16-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,2,C3k2,[1024,True]]# 8-P5/32-[-1,1,SPPF,[1024,5]]# 9-P5/32-[-1,2,C2PSA,[1024]]# 10-P5/32# YOLO11n headhead:-[-1,1,nn.Upsample,[None,2,"nearest"]]# 11-P4/16-[[-1,6],1,Concat,[1]]# 12-P4/16-[-1,1,CASAB,[]]# 13-P4/16-[-1,2,C3k2,[512,False]]# 14-P4/16-[-1,1,nn.Upsample,[None,2,"nearest"]]# 15-P3/8-[[-1,4],1,Concat,[1]]# 16-P3/8-[-1,1,CASAB,[]]# 17-P3/8-[-1,2,C3k2,[256,False]]# 18-P3/8-[-1,1,Conv,[256,3,2]]# 19-P4/16-[[-1,14],1,Concat,[1]]# 20-P4/16-[-1,1,CASAB,[]]# 21-P4/16-[-1,2,C3k2,[512,False]]# 22-P4/16-[-1,1,Conv,[512,3,2]]# 23-P5/32-[[-1,10],1,Concat,[1]]# 24-P5/32-[-1,1,CASAB,[]]# 25-P5/32-[-1,2,C3k2,[1024,True]]# 26-P5/32-[[18,22,26],1,SemanticSegmentHead,[nc]]# SemanticSegmentHead(P3, P4, P5)步骤5:开始训练 🚀
# -*- coding: utf-8 -*-""" @Auth :AICurator @File :train.py """importwarnings warnings.filterwarnings('ignore')fromultralyticsimportYOLOif__name__=='__main__':model=YOLO(model=r'G:\improve\segment\ultralytics-main\ultralytics\cfg\models\improve\attention\yolo11\yolo11-CASAB-3.yaml')# model.load('')model.train(data=r'dataset\data.yaml',imgsz=640,epochs=50,batch=4,workers=0,device='0',optimizer='SGD',close_mosaic=10,resume=False,project='runs/train',name='exp',single_cls=False,cache=False,)6. 总结 🎯
这份文档对应的是yolo11-CASAB-3这套配置,重点是通过多层多点插入CASAB,系统评估该联合注意力模块对多尺度特征传播链路的增强作用。你可以直接切换 YAML,把它和方案1、方案2放到同一训练入口下做结构消融与横向对比。