尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MMSegmentation 医学影像项目实战:基于 2-PM Vessel 双光子显微镜脑血管数据集的分割训练指南

MMSegmentation 医学影像项目实战:基于 2-PM Vessel 双光子显微镜脑血管数据集的分割训练指南 MMSegmentation 医学影像项目实战基于 2-PM Vessel 双光子显微镜脑血管数据集的分割训练指南【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation导读本文以 MMSegmentation 仓库中的 2pm_vessel 项目 为核心系统讲解如何基于开源2-PM Vessel Dataset双光子显微镜脑部血管数据集完成从数据集准备、格式转换、样本划分到 UNet 模型训练与测试的完整流程。读完本文你将掌握医学显微图像数据集在 MMSegmentationprojects/体系下的接入方式、mim命令行训练测试方法以及 FCN-UNet 配置文件中关键参数学习率、损失函数、测试模式的调优语义。一、2-PM Vessel 数据集背景1.1 数据集来源与用途2-PM Vessel Dataset是一个开源的体视脑部血管数据集由 Sunnybrook Research Institute多伦多大学附属机构的 Focused Ultrasound Lab 通过**双光子显微镜two-photon microscopy**采集标注工作由 Alison Burgess、Charissa Poon 与 Marc Santos 完成。该数据集主要用于脑血管与肿瘤血管的语义分割研究。整个数据集共包含12 个体积堆栈volumetric stacks覆盖小鼠脑部血管与肿瘤血管图像。1.2 数据集统计信息原文档给出了官方数据集的整体统计Dataset NameAnatomical RegionTask TypeModalityNum. ClassesTrain/Val/Test ImagesTrain/Val/Test LabeledRelease DateLicense2pm_vesselvesselsegmentationmicroscopy_images2216/-/-yes/-/-2021CC0 1.0数据集共2 个类别background背景与vessel血管。官方训练集中各类别的像素占比为Class NameNum. TrainPct. Trainbackground21685.78vessel18014.22注Pct表示该类像素占全部像素的百分比。可以看到血管类像素占比仅约 14.22%属于典型的类别不平衡的医学影像分割任务。1.3 数据集引用使用该数据集进行学术研究时建议引用以下文献article{teikari2016deep, title{Deep learning convolutional networks for multiphoton microscopy vasculature segmentation}, author{Teikari, Petteri and Santos, Marc and Poon, Charissa and Hynynen, Kullervo}, journal{arXiv preprint arXiv:1606.02382}, year{2016} }二、环境准备与前提条件2.1 依赖版本要求原文档明确列出的运行环境如下依赖版本要求Pythonv3.8PyTorchv1.10.0pillow (PIL)v9.3.0scikit-learn (sklearn)v1.2.0MIMv0.3.4MMCVv2.0.0rc4MMEnginev0.2.0 或更高MMSegmentationv1.0.0rc5其中scikit-learn被数据集划分脚本 split_seg_dataset.py 使用from sklearn.model_selection import train_test_split用于在无官方验证集/测试集标注时随机划分训练集tifffile则被 prepare_dataset.py 用来读取多切片.tif格式的原始数据。2.2 配置 PYTHONPATH所有后续命令都依赖正确的PYTHONPATH指向项目目录以便 Python 定位到自定义模块如datasets.2pm-vessel_dataset。在2pm_vessel/根目录下执行export PYTHONPATHpwd:$PYTHONPATH三、数据集准备下载、格式转换与样本划分3.1 下载原始数据原文档提供两种方式既可以手动从 OpenDataLab 下载后解压到data/也可以使用opendatalab命令行工具直接拉取mkdir data cd data pip install opendatalab odl get 2-PM_Vessel_Dataset cd ..3.2 格式转换脚本 prepare_dataset.py下载完成后运行格式转换脚本python tools/prepare_dataset.py从 prepare_dataset.py 源码可以看到其核心逻辑读取原始目录data/2-PM_Vessel_Dataset/raw/vesselNN_dataset/denoised图像与.../labels标签使用tifffile读取多切片.tif文件并断言图像与标签形状一致images.shape labels.shapelabels.ndim 3关键细节单个.tif文件包含多个 z 轴切片脚本将每个切片单独保存为 PNG命名格式为{name}_{索引}.png索引右对齐补零 3 位如xxx_000.png标签归一化label labels[i] // 255将 [0, 255] 的标签值映射为二值 0/1图像转 RGB 保存Image.fromarray(image).convert(RGB).save(...)输出目录为data/images/train/与data/masks/train/。转换后的标准目录结构如下mmsegmentation ├── mmseg ├── projects │ ├── medical │ │ ├── 2d_image │ │ │ ├── microscopy_images │ │ │ │ ├── 2pm_vessel │ │ │ │ │ ├── configs │ │ │ │ │ ├── datasets │ │ │ │ │ ├── tools │ │ │ │ │ ├── data │ │ │ │ │ │ ├── train.txt │ │ │ │ │ │ ├── val.txt │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── train │ │ │ │ │ │ │ │ ├── xxx.png │ │ │ │ │ │ │ │ ├── ... │ │ │ │ │ │ │ │ └── xxx.png │ │ │ │ │ │ ├── masks │ │ │ │ │ │ │ ├── train │ │ │ │ │ │ │ │ ├── xxx.png │ │ │ │ │ │ │ │ ├── ... │ │ │ │ │ │ │ │ └── xxx.png3.3 样本划分脚本 split_seg_dataset.py随后运行项目共享的划分脚本生成train.txt/val.txt/test.txtpython ../../tools/split_seg_dataset.py结合 split_seg_dataset.py 源码脚本行为如下若data/masks/val与data/masks/test存在即官方提供了验证集/测试集标注则直接生成对应的val.txt/test.txt若两者标注均无法获取则从训练集中按test_size0.2, random_state0随机划分出训练集与验证集train_test_split并生成train.txt/val.txt生成的 txt 文件每行记录相对路径形如images/train/xxx.png去掉了扩展名供数据集类拼接使用。由于 2-PM Vessel 官方只提供了训练集标注见统计表 Train/Val/Test Labeled: yes/-/-实际使用的是随机划分路径。划分后的类别统计如下注该表格为项目自行划分的结果Class NameNum. TrainPct. TrainNum. ValPct. Valbackground17285.884485.4vessel14214.123814.6四、自定义数据集类TwoPMVesselDataset4.1 数据集类实现项目通过 datasets/2pm-vessel_dataset.py 将 2-PM Vessel 接入 MMSegmentation 的BaseSegDataset体系from mmseg.datasets import BaseSegDataset from mmseg.registry import DATASETS DATASETS.register_module() class TwoPMVesselDataset(BaseSegDataset): METAINFO dict(classes(background, vessel)) def __init__(self, img_suffix.png, seg_map_suffix.png, reduce_zero_labelFalse, **kwargs) - None: super().__init__( img_suffiximg_suffix, seg_map_suffixseg_map_suffix, reduce_zero_labelreduce_zero_label, **kwargs)实现要点通过DATASETS.register_module()注册到全局注册表使配置文件中typeTwoPMVesselDataset能够被正确实例化METAINFO声明类别为(background, vessel)共 2 类img_suffix与seg_map_suffix固定为.pngreduce_zero_label固定为False——即背景0是有效类别不会被忽略。4.2 数据加载配置2pm-vessel_512x512.py 定义了数据侧公共配置dataset_type TwoPMVesselDataset data_root data/ img_scale (512, 512) train_pipeline [ dict(typeLoadImageFromFile), dict(typeLoadAnnotations), dict(typeResize, scaleimg_scale, keep_ratioFalse), dict(typeRandomFlip, prob0.5), dict(typePhotoMetricDistortion), dict(typePackSegInputs) ] test_pipeline [ dict(typeLoadImageFromFile), dict(typeResize, scaleimg_scale, keep_ratioFalse), dict(typeLoadAnnotations), dict(typePackSegInputs) ] train_dataloader dict( batch_size16, num_workers4, persistent_workersTrue, samplerdict(typeInfiniteSampler, shuffleTrue), datasetdict( typedataset_type, data_rootdata_root, ann_filetrain.txt, data_prefixdict(img_pathimages/, seg_map_pathmasks/), pipelinetrain_pipeline)) val_dataloader dict( batch_size1, num_workers4, persistent_workersTrue, samplerdict(typeDefaultSampler, shuffleFalse), datasetdict( typedataset_type, data_rootdata_root, ann_fileval.txt, data_prefixdict(img_pathimages/, seg_map_pathmasks/), pipelinetest_pipeline)) test_dataloader val_dataloader val_evaluator dict(typeIoUMetric, iou_metrics[mIoU, mDice]) test_evaluator dict(typeIoUMetric, iou_metrics[mIoU, mDice])关键设计说明图像统一缩放到 512×512keep_ratioFalse表示不保持宽高比直接拉伸这是后续所有训练配置的公共输入尺寸训练增强包含随机水平翻转概率 0.5与PhotoMetricDistortion光度扰动用于缓解小数据量下的过拟合验证/测试使用DefaultSampler不 shuffle且不施加随机增强评估指标为 mIoU 与 mDice其中 Dice 指标与血管分割任务高度契合——血管像素占比低Dice 比 IoU 更能反映小目标分割质量训练 batch_size16配合 1 张 GPU 的1xb16命名验证 batch_size1。五、模型配置FCN-UNet 训练方案5.1 继承的公共配置训练配置通过_base_机制组合了四个基础配置_base_ [ mmseg::_base_/models/fcn_unet_s5-d16.py, ./2pm-vessel_512x512.py, mmseg::_base_/default_runtime.py, mmseg::_base_/schedules/schedule_20k.py ] custom_imports dict(importsdatasets.2pm-vessel_dataset)模型骨架 fcn_unet_s5-d16.pyUNet 编码器 FCN 解码头。UNet 为 5 阶段num_stages5、基础通道数 64解码头为FCNHeadin_channels64, in_index4默认带一个辅助头auxiliary_headin_index3损失权重 0.4训练计划 schedule_20k.py迭代式训练 20000 iters优化器为 SGDmomentum0.9, weight_decay0.0005学习率调度为PolyLRpower0.9, eta_min1e-4每 2000 iters 验证一次并保存 checkpoint日志每 50 iters 输出一次custom_imports用于导入项目自定义数据集模块这是projects/目录接入核心库注册机制的桥梁。5.2 三种学习率实验配置项目提供了3 个仅学习率不同的对比配置0.0001/0.001/0.01用于探究 UNet 在该数据集上的最优学习率例如# fcn-unet-s5-d16_unet_1xb16-0.0001-20k_2pm-vessel-512x512.py optimizer dict(lr0.0001) optim_wrapper dict(optimizeroptimizer) model dict( data_preprocessordata_preprocessor, decode_headdict(num_classes2), auxiliary_headNone, test_cfgdict(modewhole, _delete_True)) vis_backends None visualizer dict(vis_backendsvis_backends)三个文件 0.0001、0.001、0.01 的差异仅在optimizer dict(lr...)一行。配置中的关键覆写点decode_headdict(num_classes2)将解码头类别数设为 2background vesselauxiliary_headNone关闭 UNet 的辅助头基类中默认启用且损失权重 0.4只保留主解码头的交叉熵损失test_cfgdict(modewhole, _delete_True)测试模式由基类的modeslide滑窗crop_size256, stride170切换为整图推理_delete_True用于删除被继承的slide相关键。对于 512×512 的输入整图推理可避免滑窗拼接带来的边界伪影vis_backends None关闭可视化后端训练时不再输出分割结果可视化图适合纯指标训练场景。5.3 基于 Sigmoid 的变体配置除标准交叉熵配置外项目还提供了一个二分类特殊变体 fcn-unet-s5-d16_unet_1xb16-0.01lr-sigmoid-20k_bactteria-detection-512x512.pymodel dict( data_preprocessordata_preprocessor, decode_headdict( num_classes2, loss_decodedict(use_sigmoidTrue), out_channels1), auxiliary_headNone, test_cfgdict(modewhole, _delete_True))该配置将交叉熵损失切换为Sigmoid 二分类模式use_sigmoidTrue并将解码头输出通道数设为 1out_channels1配合 512×512 输入与 0.01 学习率。需要注意的是此配置文件名沿用了bactteria-detection的命名与同目录下 bactteria_detection 项目模板一致实际在 2-PM Vessel 数据上使用时可理解为以单通道 Sigmoid 输出做前景/背景二分类的替代训练方案供研究者对比不同损失形式的分割效果。六、训练与测试命令6.1 训练在单机单卡上以默认配置训练模型mim train mmseg ./configs/${CONFIG_FILE}例如mim train mmseg ./configs/fcn-unet-s5-d16_unet_1xb16-0.0001-20k_2pm-vessel-512x512.pymim会依据配置中的_base_继承链自动完成环境准备、数据集校验与训练循环日志与 checkpoint 默认输出到工作目录。6.2 测试在单机单卡上测试模型mim test mmseg ./configs/${CONFIG_FILE} --checkpoint ${CHECKPOINT_PATH}例如mim test mmseg ./configs/fcn-unet-s5-d16_unet_1xb16-0.0001-20k_2pm-vessel-512x512.py --checkpoint work_dirs/fcn-unet-s5-d16_unet_1xb16-0.0001-20k_2pm-vessel-512x512/iter_20000.pth测试将输出验证集上的mIoU 与 mDice两项指标由val_evaluator/test_evaluator中iou_metrics[mIoU, mDice]决定可据此横向对比三个学习率配置的血管分割性能。说明原文档中训练/测试正确性的结果表格仍处于待完善状态Checklist 中 Training-time correctness 与 Test-time correctness 尚未勾选因此本仓库暂未提供该数据集的官方复现指标读者可自行训练后记录结果。七、项目落地状态与扩展建议从 README 的 Checklist 可见2pm_vessel项目已完成Milestone 1代码完成、基础 docstring、完整 README可作为projects/下的独立医学影像分割基准。尚未完成的部分包括单元测试、Metafile 以及移入核心包等后续里程碑。若要在其他双光子/显微血管数据集上复用它可参考以下扩展路径参照 2pm-vessel_dataset.py 新建数据集类仅需修改METAINFO的类别列表复用 prepare_dataset.py 的多切片.tif→ PNG 转换逻辑修改 2pm-vessel_512x512.py 中的data_root、ann_file与img_scale即可迁移到新的数据集目录。结语2-PM Vessel 项目是 MMSegmentationprojects/medical生态中一个完整的医学影像分割示例它串起了多切片显微图像格式转换 → 样本划分 → 自定义数据集注册 → FCN-UNet 配置覆写 → mim 训练测试的整条链路。对于希望将私有显微/病理图像接入 MMSegmentation 的开发者2pm_vessel目录下的datasets/、tools/与configs/三件套提供了可直接照搬的最小可运行模板。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表