You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.9 KiB

EMCAD快速入门指南

本指南将帮助您快速开始使用EMCAD进行医学图像分割。

准备工作

1. 环境设置

首先,确保您的系统已安装以下软件:

  • Python 3.8或更高版本
  • CUDA 11.3如果使用GPU
  • Git

2. 克隆项目

git clone https://github.com/SLDGroup/EMCAD.git
cd EMCAD

3. 创建虚拟环境

conda create -n emcadenv python=3.8
conda activate emcadenv

4. 安装依赖

pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html
pip install -r requirements.txt

# 或者使用Makefile安装
make install

数据准备

Synapse数据集

  1. Synapse官网注册并下载数据集
  2. 将数据解压到./data/synapse/目录
  3. 运行预处理脚本:
python ./utils/preprocess_synapse_data.py

或者,您可以直接下载预处理好的数据并解压到./data/synapse/目录。

下载预训练模型

Google DrivePVT GitHub下载预训练的PVTv2模型并放入./pretrained_pth/pvt/文件夹。

训练模型

使用以下命令在Synapse数据集上训练EMCAD模型

# 使用配置文件训练
python -m emcad.scripts.train --config configs/default.yaml

# 或者使用Makefile训练
make train

# 或者使用传统脚本(保留向后兼容性)
python train_synapse.py --root_path ./data/Synapse/train_npz --volume_path ./data/Synapse/test_vol_h5 --encoder pvt_v2_b2 --batch_size 2 --max_epochs 50 --max_iterations 2000

训练参数说明

  • --config: 配置文件路径
  • --root_path: 训练数据路径(传统脚本)
  • --volume_path: 验证数据路径(传统脚本)
  • --encoder: 骨干网络类型如pvt_v2_b2
  • --batch_size: 批处理大小
  • --max_epochs: 最大训练轮数
  • --max_iterations: 最大迭代次数

训练过程中,模型权重和日志将保存在配置文件中指定的目录下。

测试模型

使用以下命令测试训练好的模型:

# 使用配置文件测试
python -m emcad.scripts.test --config configs/default.yaml --model_path path/to/model.pth

# 或者使用Makefile测试
make test-model

# 或者使用传统脚本(保留向后兼容性)
python test_synapse.py --volume_path ./data/synapse/test_vol_h5 --encoder pvt_v2_b2

测试结果将保存在配置文件中指定的输出目录下。

自定义数据集

要在自己的数据集上使用EMCAD请按照以下步骤操作

1. 准备数据

将您的数据组织成以下结构:

your_data/
├── train/
│   ├── case1.nii.gz
│   ├── case1_label.nii.gz
│   ├── case2.nii.gz
│   └── case2_label.nii.gz
└── test/
    ├── case3.nii.gz
    ├── case3_label.nii.gz
    ├── case4.nii.gz
    └── case4_label.nii.gz

2. 创建数据集类

参考utils/dataset_synapse.py,创建您自己的数据集类:

class YourDataset(Dataset):
    def __init__(self, base_dir, split, transform=None):
        # 初始化代码

    def __len__(self):
        # 返回数据集大小

    def __getitem__(self, idx):
        # 加载并返回数据和标签

3. 修改训练脚本

修改train_synapse.py,使用您的数据集类:

from utils.your_dataset import YourDataset

# 替换数据集加载部分
db_train = YourDataset(base_dir=args.root_path, split="train", transform=transforms.Compose([RandomGenerator(output_size=[args.img_size, args.img_size])]))

4. 运行训练

使用您的数据路径运行训练:

python train_synapse.py --root_path ./your_data/train --volume_path ./your_data/test --encoder pvt_v2_b2 --num_classes YOUR_NUM_CLASSES

调整模型架构

您可以通过以下参数调整模型架构:

  • --expansion_factor: MSCB块中的扩展因子默认为2
  • --kernel_sizes: MSDC块中的多尺度卷积核大小默认为[1, 3, 5]
  • --lgag_ks: LGAG中的卷积核大小默认为3
  • --activation_mscb: MSCB中使用的激活函数默认为relu6
  • --no_dw_parallel: 禁用深度并行卷积
  • --concatenation: 在MSDC块中连接特征图而不是相加

例如:

python train_synapse.py --root_path ./data/Synapse/train_npz --volume_path ./data/Synapse/test_vol_h5 --encoder pvt_v2_b2 --expansion_factor 3 --kernel_sizes 1 3 5 7 --lgag_ks 5

性能优化

GPU内存优化

如果遇到GPU内存不足的问题可以尝试以下方法

  1. 减小批处理大小:
python train_synapse.py --batch_size 1 ...
  1. 减小输入图像尺寸:
python train_synapse.py --img_size 128 ...
  1. 使用梯度累积:
# 在训练脚本中修改
accumulation_steps = 4  # 根据内存情况调整

for i_batch, sampled_batch in enumerate(trainloader):
    # ... 前向传播和损失计算 ...
    loss = loss / accumulation_steps
    loss.backward()

    if (i_batch + 1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

训练速度优化

  1. 使用多GPU训练
python train_synapse.py --n_gpu 2 ...
  1. 使用混合精度训练:
# 在训练脚本中添加
from torch.cuda.amp import GradScaler, autocast

scaler = GradScaler()

# 在训练循环中
with autocast():
    outputs = model(image_batch)
    loss = ce_loss(outputs, label_batch) + dice_loss(outputs, label_batch)

scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()

常见问题

Q: 训练过程中出现CUDA内存不足错误怎么办

A: 尝试减小批处理大小或输入图像尺寸,或者使用梯度累积技术。

Q: 如何在CPU上运行EMCAD

A: 将训练脚本中的device = torch.device("cuda" if torch.cuda.is_available() else "cpu")修改为device = torch.device("cpu"),但请注意训练速度会显著降低。

Q: 如何保存和加载模型?

A: 模型会自动保存在./model_pth/目录下。要加载预训练模型,可以使用:

model = EMCADNet(args)
model.load_state_dict(torch.load('path/to/model.pth'))

Q: 如何可视化训练过程?

A: 训练日志保存在./model_pth/目录下的log.txt文件中。您也可以使用TensorBoard查看训练曲线

tensorboard --logdir ./model_pth/log

下一步

  • 阅读完整文档了解更多细节
  • 查看API文档了解函数和类的详细说明
  • 尝试在自己的数据集上应用EMCAD
  • 调整模型架构以适应特定需求

祝您使用愉快如有问题请查看GitHub仓库的Issues部分或提交新的Issue。