English | 简体中文
这里我们对参数配置、训练、评估、部署等进行了详细的介绍。
配置文件的结构如下所示:
├── _base_ # 一级基础配置,后面所有的二级配置都需要继承它,你可以在这里设置自定义的数据路径,确保它有足够的空间来存储数据。
│ └── global_configs.yml
├── lung_coronavirus # 每个数据集/器官有个独立的文件夹,这里是 COVID-19 CT scans 数据集的路径。
│ ├── lung_coronavirus.yml # 二级配置,继承一级配置,关于损失、数据、优化器等配置在这里。
│ ├── README.md
│ └── vnet_lung_coronavirus_128_128_128_15k.yml # 三级配置,关于模型的配置,不同的模型可以轻松拥有相同的二级配置。
└── schedulers # 用于规划两阶段的配置,暂时还没有使用它。
└── two_stage_coarseseg_fineseg.yml
我们使用数据准备脚本来进行一键自动化的数据下载、预处理变换、和数据集切分。只需要运行下面的脚本就可以一键准备好数据:
python tools/prepare_lung_coronavirus.py # 以 CONVID-19 CT scans 为例。
准备好配置之后,只需要一键运行 run-vnet.sh 就可以进行训练和评估。让我们看看这个脚本中的命令是什么样子的:
# 设置使用的单卡 GPU id
export CUDA_VISIBLE_DEVICES=0
# 设置配置文件名称和保存路径
yml=vnet_lung_coronavirus_128_128_128_15k
save_dir=saved_model/${yml}
mkdir save_dir
# 训练模型
python3 train.py --config configs/lung_coronavirus/${yml}.yml \
--save_dir $save_dir \
--save_interval 500 --log_iters 100 \
--num_workers 6 --do_eval --use_vdl \
--keep_checkpoint_max 5 --seed 0 >> $save_dir/train.log
# 评估模型
python3 val.py --config configs/lung_coronavirus/${yml}.yml \
--save_dir $save_dir/best_model --model_path $save_dir/best_model/model.pdparams
得到训练好的模型之后,我们可以将它导出为静态图来进行推理加速,下面的步骤就可以进行导出和部署,详细的教程则可以参考这里:
cd MedicalSeg/
# 用训练好的模型进行静态图导出
python export.py --config configs/lung_coronavirus/vnet_lung_coronavirus_128_128_128_15k.yml --model_path /path/to/your/trained/model
# 使用 Paddle Inference 进行推理
python deploy/python/infer.py \
--config /path/to/model/deploy.yaml \
--image_path /path/to/image/path/or/dir/
--benchmark True # 在安装了 AutoLog 之后,打开benchmark可以看到推理速度等信息,安装方法可以见 ../deploy/python/README.md
如果有“Finish” 输出,说明导出成功,并且可以进行推理加速。
如果你想在自己的数据集上训练,你需要增加一个数据集代码, 一个 数据预处理代码, 一个和这个数据集相关的配置目录, 一份 训练脚本。下面我们分步骤来看这些部分都需要增加什么:
首先,我们如下图所示,增加一个和你的数据集相关的配置目录:
├── _base_
│ └── global_configs.yml
├── lung_coronavirus
│ ├── lung_coronavirus.yml
│ ├── README.md
│ └── vnet_lung_coronavirus_128_128_128_15k.yml
所有数据需要经过预处理转换成 numpy 数据并进行数据集划分,参考这个数据预处理代码:
├── lung_coronavirus_phase0 # 预处理后的文件路径
│ ├── images
│ │ ├── imagexx.npy
│ │ ├── ...
│ ├── labels
│ │ ├── labelxx.npy
│ │ ├── ...
│ ├── train_list.txt # 训练数据,格式: /path/to/img_name_xxx.npy /path/to/label_names_xxx.npy
│ └── val_list.txt # 评估数据,格式: img_name_xxx.npy label_names_xxx.npy
所有的数据集都继承了 MedicalDataset 基类,并通过上一步生成的 train_list.txt 和 val_list.txt 来获取数据。代码示例在这里。
训练脚本能自动化训练推理过程,我们提供了一个训练脚本示例 用于参考,只需要复制,并按照需要修改就可以进行一键训练推理:
# 设置使用的单卡 GPU id
export CUDA_VISIBLE_DEVICES=3
# 设置配置文件名称和保存路径
config_name=vnet_lung_coronavirus_128_128_128_15k
yml=lung_coronavirus/${config_name}
save_dir_all=saved_model
save_dir=saved_model/${config_name}
mkdir -p $save_dir
# 模型训练
python3 train.py --config configs/${yml}.yml \
--save_dir $save_dir \
--save_interval 500 --log_iters 100 \
--num_workers 6 --do_eval --use_vdl \
--keep_checkpoint_max 5 --seed 0 >> $save_dir/train.log
# 模型评估
python3 val.py --config configs/${yml}.yml \
--save_dir $save_dir/best_model --model_path $save_dir/best_model/model.pdparams \
# 模型导出
python export.py --config configs/${yml}.yml \
--model_path $save_dir/best_model/model.pdparams
# 模型预测
python deploy/python/infer.py --config output/deploy.yaml --image_path data/lung_coronavirus/lung_coronavirus_phase0/images/coronacases_org_007.npy --benchmark True