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
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数据集
- 从Synapse官网注册并下载数据集
- 将数据解压到
./data/synapse/目录 - 运行预处理脚本:
python ./utils/preprocess_synapse_data.py
或者,您可以直接下载预处理好的数据并解压到./data/synapse/目录。
下载预训练模型
从Google Drive或PVT 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内存不足的问题,可以尝试以下方法:
- 减小批处理大小:
python train_synapse.py --batch_size 1 ...
- 减小输入图像尺寸:
python train_synapse.py --img_size 128 ...
- 使用梯度累积:
# 在训练脚本中修改
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()
训练速度优化
- 使用多GPU训练:
python train_synapse.py --n_gpu 2 ...
- 使用混合精度训练:
# 在训练脚本中添加
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
下一步
祝您使用愉快!如有问题,请查看GitHub仓库的Issues部分或提交新的Issue。