资讯动态

基于 PaddleSeg MedicalSeg 的 COVID-19 肺部 CT 三维分割实战:VNet 全流程指南

发布时间:2026/9/25 12:36:32 来源:尧图企业网站定制
人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载导读本文围绕 PaddleSeg 仓库中contrib/MedicalSeg/configs/lung_coronavirus/目录所对应的COVID-19 CT scans三维医学影像分割任务展开完整讲解该数据集在 MedicalSeg 3D 医疗分割方案中的配置体系、数据准备、模型训练与部署全流程。通过本文你将掌握VNet 在 128×128×128 体素分辨率下达到 97.04% Dice 的官方基线配置如何复现、三级 YAML 配置文件的继承关系与每个参数的真实含义以及如何利用仓库源码数据集类、变换组件、VNet 网络实现快速迁移到自己的肺部分割数据上。数据集概览COVID-19 CT scanscontrib/MedicalSeg/configs/lung_coronavirus/README.md明确指出该任务使用的数据集为COVID-19 CT scans包含20 例确诊 COVID-19 患者的肺部 CT 扫描以及由专家标注的肺部与感染区域分割掩膜segmentations。这是 MedicalSeg 方案中用于演示 3D 医学图像分割全流程的代表性小样本数据集——数据量小、标注权威非常适合验证模型训练管线是否打通。数据集的标注信息在 数据准备脚本 中有明确定义共 3 个类别即{0: background, 1: left lung, 2: right lung}背景、左肺、右肺模态为 CT。原始数据由20_ncov_scan.zip原始扫描、lung_mask.zip肺掩膜、infection_mask.zip感染掩膜、lung_infection.zip等压缩包组成脚本会自动完成下载、解压与预处理。官方性能基准VNet 双学习率配置原文档给出了 VNet 模型在该数据集上的官方评测结果Dice 指标。下表为仓库 README 中的完整基准数据评测分辨率为 128×128×128训练迭代数为 15000BackboneResolutionlrTraining ItersDice-128x128x1280.0011500097.04%-128x128x1280.00031500092.70%可以看到学习率 0.001配合多项式衰减PolynomialDecay可以获得97.04%的 Dice而将学习率降至0.0003后为92.70%这说明在 20 例小样本上合适的学习率调度对最终分割精度影响显著。原文档还提供了两个实验对应的预训练模型权重、训练日志train.log与 VisualDL 可视化面板链接供复现对比使用链接见原 README。此外原文档在 Unet 一节标注为To be continue即 3D U-Net 在该数据集上的官方基线尚未发布当前可复现的官方基线以 VNet 为主但仓库代码层面已具备完整的 3D U-Net 支持见 models 目录包含 unetr.py、swinunet.py、transunet.py、nnunet.py 等后续可直接替换模型配置自行训练评测。配置文件体系三级 YAML 继承结构contrib/MedicalSeg/configs/lung_coronavirus/目录下共有两个配置文件加上一级基础配置构成典型的三级配置继承结构contrib/MedicalSeg/configs/ ├── _base_ │ └── global_configs.yml # 一级全局基础配置 └── lung_coronavirus ├── lung_coronavirus.yml # 二级数据、优化器、调度器、损失 └── vnet_lung_coronavirus_128_128_128_15k.yml # 三级模型配置这一设计让数据集/任务与模型解耦同一份二级配置可以搭配任意模型的三级配置方便横向对比不同网络在相同数据、相同优化策略下的表现。一级配置global_configs.ymlglobal_configs.yml 内容极简data_root: data/它定义了所有相对数据路径的基准目录。二级、三级配置中出现的dataset_root: lung_coronavirus/lung_coronavirus_phase0、result_dir: lung_coronavirus/lung_coronavirus_phase1等路径均相对于该data_root解析即实际指向data/lung_coronavirus/...。二级配置lung_coronavirus.ymllung_coronavirus.yml 通过_base_: ../_base_/global_configs.yml继承一级配置并定义了训练的超参数骨架_base_: ../_base_/global_configs.yml batch_size: 6 iters: 15000 train_dataset: type: LungCoronavirus dataset_root: lung_coronavirus/lung_coronavirus_phase0 result_dir: lung_coronavirus/lung_coronavirus_phase1 transforms: - type: RandomResizedCrop3D size: 128 scale: [0.8, 1.2] - type: RandomRotation3D degrees: 90 - type: RandomFlip3D mode: train num_classes: 3 val_dataset: type: LungCoronavirus dataset_root: lung_coronavirus/lung_coronavirus_phase0 result_dir: lung_coronavirus/lung_coronavirus_phase1 num_classes: 3 transforms: [] mode: val dataset_json_path: data/lung_coronavirus/lung_coronavirus_raw/dataset.json optimizer: type: sgd momentum: 0.9 weight_decay: 1.0e-4 lr_scheduler: type: PolynomialDecay decay_steps: 15000 learning_rate: 0.001 end_lr: 0 power: 0.9 loss: types: - type: MixedLoss losses: - type: CrossEntropyLoss weight: Null - type: DiceLoss coef: [1, 1] coef: [1]各关键字段含义如下结合 config.py 中的解析逻辑batch_size / iters单卡批大小 6总训练步数 15000与 README 性能表中的 Training Iters 一一对应。train_dataset / val_datasettype: LungCoronavirus由 数据集注册表 提供mode决定读取train_list.txt还是val_list.txt见 MedicalDataset 基类num_classes: 3与标注类别 {背景, 左肺, 右肺} 一致。训练集在线增强依次执行RandomResizedCrop3D随机裁剪后缩放到 128³、RandomRotation3D±90° 随机旋转、RandomFlip3D随机翻转验证集transforms: []不做任何增强。optimizerSGD momentum 0.9 weight_decay 1e-4这是 MedicalSeg 配置文件中支持的优化器形式。lr_schedulerPolynomialDecay 多项式衰减初始学习率 0.001decay_steps与iters对齐为 15000end_lr: 0表示最终衰减到 0power: 0.9为多项式指数——这正是 README 中 lr0.001 行 97.04% Dice 对应的一档配置。lossMixedLoss组合CrossEntropyLoss权重 Null即默认类别权重与DiceLoss两者系数coef: [1, 1]等权相加外层coef: [1]对应模型的单输出。Dice 损失实现见 dice_loss.py其compute_per_channel_dice按通道类别分别计算 Dice 系数。三级配置vnet_lung_coronavirus_128_128_128_15k.yml模型配置文件 只关心模型本身通过_base_: lung_coronavirus.yml继承上述全部超参数_base_: lung_coronavirus.yml model: type: VNet elu: False in_channels: 1 num_classes: 3 pretrained: https://bj.bcebos.com/paddleseg/dygraph/lung_coronavirus/vnet_lung_coronavirus_128_128_128_15k/pretrain/model.pdparamstype: VNet对应 vnet.py 中manager.MODELS.add_component注册的VNet类。elu: False控制网络激活函数。源码中LUConv、InputTransition等模块均通过nn.ELU() if elu else nn.PReLU(...)二选一即关闭 ELU 时使用 PReLU。in_channels: 1单通道 CT 体数据输入预处理脚本会对原始 NIfTI 做 HU 归一化见下文。num_classes: 3输出三通道概率图背景/左肺/右肺。pretrained指向 Paddle 托管的官方预训练权重init_weight()通过utils.load_entire_model加载。文件名vnet_lung_coronavirus_128_128_128_15k即VNet 肺部新冠数据 128³ 分辨率 15k 迭代的语义化命名与性能表完全对应。数据准备一键预处理脚本MedicalSeg 为 COVID-19 CT scans 提供了专用的自动数据准备脚本 prepare_lung_coronavirus.py在contrib/MedicalSeg目录下运行python tools/prepare_lung_coronavirus.py该脚本继承自Prep基类自动完成三件事见文件头部注释与__main__部分下载与解压按内置 URL 字典下载20_ncov_scan.zip、lung_mask.zip、infection_mask.zip、lung_infection.zip四个压缩包并解压到data/lung_coronavirus/lung_coronavirus_raw/预处理并保存为 numpy 数组对图像执行HUnormHU 值归一化与resample(new_shape[128,128,128], order1)重采样对标签执行resample(..., order0)最近邻避免类别插值污染输出到lung_coronavirus_phase0/images/与lung_coronavirus_phase0/labels/生成数据集清单generate_txt(train_split0.75)按 75%/25% 划分训练与验证集产出train_list.txt与val_list.txt每行格式为图像.npy 标签.npy供 MedicalDataset 逐行解析加载。预处理后的目录结构如下data/lung_coronavirus/ ├── lung_coronavirus_raw/ # 原始 NIfTI 数据 │ ├── 20_ncov_scan/ │ ├── infection_mask/ │ ├── lung_infection/ │ ├── lung_mask/ │ └── dataset.json # 模态、类别、许可等元信息 └── lung_coronavirus_phase0/ # 预处理后的 numpy 数据 ├── images/*.npy ├── labels/*.npy ├── train_list.txt └── val_list.txtdataset.json中还写入了模态(CT,)、类别标签1: left lung, 2: right lung及数据许可Coronacases CC BY NC 3.0、Radiopedia CC BY NC SA 3.0、Annotations CC BY 4.0。训练、评估与部署run-vnet.sh 一键全流程仓库提供了从训练到部署的端到端脚本 run-vnet.sh其核心内容与 README_CN.md 中的教程一致# 设置使用的单卡 GPU id export CUDA_VISIBLE_DEVICES3 # 设置配置文件名称和保存路径 config_namevnet_lung_coronavirus_128_128_128_15k ymllung_coronavirus/${config_name} save_dirsaved_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 # Paddle Inference 推理 python deploy/python/infer.py \ --config output/deploy.yaml \ --image_path data/lung_coronavirus/lung_coronavirus_phase0/images/coronacases_org_007.npy \ --benchmark True各命令行参数说明train.py--save_interval 500每 500 步保存一次 checkpoint--log_iters 100每 100 步打印日志--num_workers 6数据加载进程数--do_eval训练中周期性评估--use_vdl开启 VisualDL 记录--keep_checkpoint_max 5最多保留 5 个 checkpoint--seed 0固定随机种子保证可复现性。val.py用--model_path指定的权重在验证集上计算 Dice 等指标。export.py将动态图模型导出为静态图成功后控制台输出 Finish随后可用deploy/python/infer.py对任意.npy体数据做推理加速--benchmark True在安装 AutoLog 后输出推理耗时等信息。训练、评估脚本位于 medicalseg/core/包含train.py、val.py、infer.py三个核心模块。源码级解析VNet 网络结构与数据流VNet 三维编码-解码结构VNet 实现 基于 V-Net 论文Milletari et al., 3DV 2016并借鉴 MedicalZooPytorch 移植而来整体为带跳跃连接的编码-解码结构由五个核心模块组成InputTransition将单通道输入经 5×5×5 卷积扩到 16 通道并将输入按通道重复平铺后与原卷积输出相加残差连接再经 BN 与激活ELU 或 PReLU。DownTransition下采样编码路径逐级将通道数翻倍16→32→64→128→256使用 stride(2,2,2) 的 3D 卷积降采样并在深层128、256 通道处开启 Dropout3D每个阶段内部做残差相加后激活。UpTransition上采样解码路径用Conv3DTranspose上采样将上采样结果与对应编码层的跳跃连接paddle.concat融合再经若干卷积层与残差相加。OutputTransition最终以 5×5×5 卷积将 32 通道映射到num_classes3再经 1×1 卷积输出 logits。前向数据流源码注释中给出了每级的张量形状线索为输入 (1, 1, 128, 128, 128) → in_tr → down_tr32 → down_tr64 → down_tr128 → down_tr256 → 对称上采样 up_tr256/up_tr128/up_tr64/up_tr32 → out_tr输出 (1, 3, 128, 128, 128)。网络底部test()方法还内置了 32³ 随机输入的前向自检可用于验证模型构建是否正确。LungCoronavirus 数据集类lung_coronavirus.py 中的LungCoronavirus类通过manager.DATASETS.add_component注册直接继承MedicalDataset基类只需透传dataset_root、result_dir、transforms、num_classes、mode、ignore_index、dataset_json_path等参数。基类负责读取train_list.txt/val_list.txt、按repeat_times默认 10扩充训练清单、经Compose变换管线加载np.load后的图像与标签详见 dataset.py。由于训练集只有 20 例扫描repeat_times10与在线增强共同保障了训练样本的多样性。三维数据增强变换transform.py 中三个核心变换与配置严格对应RandomResizedCrop3D先随机裁剪一个与原图体积比在scale[0.8, 1.2]范围内的立方体再重采样到size128源码还支持ratio边长抖动、interpolation、pre_crop滑窗模式、nonzero_mask仅在标签非 0 区域裁剪等高级选项。RandomRotation3Ddegrees90表示从 (-90, 90) 均匀采样旋转角并在rotate_planes[[0,1],[0,2],[1,2]]三个旋转平面中随机选一个执行图像与标签使用相同参数同步旋转。RandomFlip3D默认以 0.5 概率沿随机轴flip_axis[0,1,2]翻转图像与标签。此外Compose在管线末尾对数据做归一化若未指定use_std则将图像除以自身最大值im / im.max()并将isnhwd置为 True 时在最前补一维通道得到 (1, 128, 128, 128) 的输入张量与in_channels: 1匹配。快速验证与迁移到自有数据仓库的 TIPCTraining and Inference Pipeline Certification配置 lung_coronavirus_test.yml 提供了一个迷你版验证方案iters: 20、使用mini_lung_coronavirus小数据集、pretrained: Null可在几分钟内验证训练、评估、推理整条管线的正确性适合在完整 15k 训练前做环境自检。若要将这套方案迁移到自己的 3D 医疗数据上仓库给出的标准做法是依葫芦画瓢四件套见 README_CN.md新增配置目录仿照contrib/MedicalSeg/configs/lung_coronavirus/创建二级数据/优化/损失与三级模型配置新增预处理脚本仿照 tools/prepare_lung_coronavirus.py 实现数据下载、重采样、归一化与 train/val 清单生成新增数据集类仿照 medicalseg/datasets/lung_coronavirus.py 继承MedicalDataset并注册新增训练脚本复制 run-vnet.sh 修改配置名与路径即可一键完成训练-评估-导出-推理。小结COVID-19 CT scans 是 MedicalSeg 中最具代表性的小样本 3D 分割任务20 例专家标注的肺部 CT 通过三级配置体系全局基础配置 → 任务配置 → 模型配置与 VNet 编码-解码网络组合可在 128³ 分辨率、15k 迭代下达到 97.04% 的 Dice。整个流程覆盖一键数据准备、在线三维增强、混合损失训练、静态图导出与 Paddle Inference 部署是一套可以直接照搬复现、并在此基础上替换模型nnUNet、nnFormer、SwinUNet、TransUNet、UNETR 等或迁移到自有数据的完整参考实现。原文档中 U-Net 一节的 To be continue 也意味着该基准仍留有拓展空间仓库代码已为其备好全部基础设施。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐基于 MMSegmentation 的 Covid-19 CT Chest X-ray 肺部分割实战指南数据集构建、UNet 训练与推理全流程基于 MMSegmentation 的 Covid 19 CT Chest X ray 肺部分割实战指南数据集构建、UNet 训练与推理全流程 本指南以 MM人工智能深度学习计算机视觉Element Plus 提交信息规范实战指南Commit Message 格式、模板与自动化校验Element Plus 提交信息规范实战指南Commit Message 格式、模板与自动化校验 导读 本文基于 Element Plus 官方贡献文档《C人工智能计算机视觉预训练5分钟搞定CT肺部分割lungmask实战全解析还在为复杂的医学影像分割任务而头疼吗CT肺部自动分割作为医学影像分析的关键环节传统方法往往耗时耗力。今天介绍的 lungmask 工具通过深度学习技术让这人工智能计算机视觉深度学习医疗健康上一篇网盘直链下载助手一键获取9大网盘真实下载地址彻底告别下载限速烦恼下一篇EdgeRemover终极指南如何彻底卸载Microsoft Edge的3种简单方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑