首页
/ SSL4MIS:医疗影像分析的半监督学习解决方案

SSL4MIS:医疗影像分析的半监督学习解决方案

2026-04-13 09:23:45作者:丁柯新Fawn

构建项目环境

如何获取项目代码?

获取SSL4MIS项目代码的方式非常简单,只需在终端执行以下命令:

git clone https://gitcode.com/gh_mirrors/ss/SSL4MIS  # 克隆项目仓库到本地

项目工具箱如何组织?

SSL4MIS项目的目录结构就像一个精心整理的工具箱,每个文件夹都有其特定功能:

graph TD
    A[SSL4MIS] --> B[code]
    A --> C[data]
    A --> D[LICENSE]
    A --> E[README.md]
    A --> F[environment.yml]
    B --> G[augmentations]
    B --> H[configs]
    B --> I[dataloaders]
    B --> J[networks]
    B --> K[pretrained_ckpt]
    B --> L[utils]
    C --> M[ACDC]
    C --> N[BraTS2019]

🔧 功能说明

  • code/:核心代码区,包含模型、数据加载和训练脚本
  • data/:数据存储区,存放医疗影像数据集
  • environment.yml:环境配置文件,记录项目依赖

📌 注意事项:项目中没有docs/experiments/目录,相关配置文件位于code/configs/

如何配置运行环境?

项目使用Anaconda环境配置,执行以下命令即可搭建:

conda env create -f environment.yml  # 根据配置文件创建环境
conda activate ssl4mis  # 激活环境(环境名称以实际为准)

小贴士:如果创建环境时遇到网络问题,可以尝试更换conda源为国内镜像

启动训练流程

训练脚本如何选择?

code/目录下提供了多种训练策略的脚本,命名格式为train_<策略名称>_<维度>.py,例如:

  • train_fully_supervised_2D.py:2D全监督训练
  • train_mean_teacher_3D.py:3D_mean teacher半监督训练
  • train_fixmatch_cta.py:基于CTAugment的数据增强训练

🔧 功能说明:脚本名称直观反映了训练策略和数据维度,新手建议从全监督脚本开始尝试

如何执行训练命令?

项目提供了便捷的bash脚本一键启动训练,以ACDC数据集为例:

cd code  # 进入代码目录
bash train_acdc_unet_semi_seg.sh  # 执行ACDC半监督训练脚本

📌 注意事项:运行前需确保data/ACDC/目录下存在正确格式的数据集

训练过程中需要关注哪些指标?

训练过程中主要关注以下指标:

  • Dice系数:衡量分割结果与金标准的相似度,越接近1越好
  • 损失值:包括监督损失和半监督损失,应总体呈下降趋势
  • 准确率:像素级分类准确率,反映整体分割效果

小贴士:建议使用TensorBoard可视化训练过程,需在训练命令中添加--tensorboard参数

配置实践技巧

配置文件在哪里?

项目的配置文件位于code/configs/目录下,目前提供:

swin_tiny_patch4_window7_224_lite.yaml

🔧 功能说明:该文件配置了Swin Transformer模型的参数,包括输入尺寸、通道数和注意力机制设置

默认参数与推荐设置有何区别?

以关键参数为例进行对比:

参数 默认值 推荐设置 适用场景
batch_size 8 4 显存不足时
learning_rate 0.001 0.0005 训练不稳定时
epochs 100 200 小数据集

📌 注意事项:修改配置后需确保与训练脚本中的参数没有冲突

如何定制自己的实验参数?

创建新的配置文件步骤:

  1. 复制swin_tiny_patch4_window7_224_lite.yaml
  2. 重命名为<自定义名称>.yaml
  3. 修改以下关键参数:
    data_path: "../data/ACDC"  # 数据集路径
    model_name: "swin_unet"    # 模型名称
    batch_size: 4              # 批次大小
    lr: 0.0005                 # 学习率
    
  4. 在训练脚本中引用新配置:--config configs/<自定义名称>.yaml

常见问题解决

问题1:运行时提示"CUDA out of memory"

解决方案

  • 减小batch_size参数,从默认8改为4或2
  • 使用--gradient_accumulation_steps参数累积梯度
  • 降低输入图像分辨率,在数据加载器中调整resize参数

问题2:训练损失不下降

解决方案

  • 检查学习率是否过高,尝试降低10倍
  • 确认数据预处理是否正确,特别是标签格式
  • 检查是否使用了正确的损失函数,医疗影像分割推荐使用Dice损失

问题3:测试时输出全为背景

解决方案

  • 检查模型权重是否正确加载,确认--pretrained路径正确
  • 验证测试集数据格式与训练集一致
  • 检查阈值设置是否合理,可尝试降低分割阈值

模型与网络架构

有哪些可用的网络模型?

code/networks/目录提供了多种分割网络:

  • unet.py:经典U-Net架构,适用于2D医疗影像分割
  • unet_3D.py:3D版本U-Net,处理体积医学图像
  • swin_transformer_unet_skip_expand_decoder_sys.py:基于Transformer的U-Net变体,具有更强的上下文捕捉能力
  • attention_unet.py:加入注意力机制的U-Net,提升小目标分割效果

🔧 功能说明:网络工厂文件net_factory.pynet_factory_3d.py提供了统一的模型创建接口

如何选择适合的网络?

网络类型 优势 适用场景
2D U-Net 速度快,显存占用低 二维切片数据,如X光片
3D U-Net 保留空间信息 volumetric数据,如CT/MRI
Swin Transformer 长距离依赖建模 复杂结构分割

小贴士:对于新手上手,建议从2D U-Net开始,熟悉后再尝试Transformer模型

数据准备指南

数据文件夹应该如何组织?

项目支持ACDC和BraTS2019两个数据集,标准结构如下:

data/
├── ACDC/
│   ├── test.list      # 测试集文件列表
│   ├── train.list     # 训练集文件列表
│   └── val.list       # 验证集文件列表
└── BraTS2019/
    ├── test.txt       # 测试集文件列表
    ├── train.txt      # 训练集文件列表
    └── val.txt        # 验证集文件列表

📌 注意事项:列表文件中需包含图像和标签的完整路径

如何准备自己的数据集?

  1. 按照ACDC数据集的格式组织数据
  2. 创建训练、验证、测试集的列表文件
  3. 在配置文件中修改data_path指向新数据集
  4. 根据数据特点调整dataloaders/dataset.py中的预处理代码

小贴士:医疗数据通常需要进行归一化处理,可在dataset.py中添加z-scoremin-max归一化

评估与测试

如何评估模型性能?

使用测试脚本进行模型评估:

cd code
python test_3D.py --model_path pretrained_ckpt/best_model.pth  # 3D模型测试
# 或
python test_2D_fully.py --model_path pretrained_ckpt/best_model.pth  # 2D模型测试

评估结果将包括Dice系数、交并比(IoU)和豪斯多夫距离等指标

测试结果如何可视化?

测试脚本会生成分割结果图像,默认保存在results/目录下(需手动创建)。可通过修改test_3D_util.pytest_urpc_util.py中的可视化参数调整输出格式。

📌 注意事项:可视化可能会增加内存占用,建议先在小批量数据上测试

登录后查看全文
热门项目推荐
相关项目推荐