资讯动态

基于 MMSegmentation 的眼底视网膜血管分割实践:RITE 数据集的 UNet 训练与推理全流程

发布时间:2026/9/16 12:46:24 来源:尧图企业网站定制
基于 MMSegmentation 的眼底视网膜血管分割实践RITE 数据集的 UNet 训练与推理全流程【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation导读RITERetinal Images vessel Tree Extraction视网膜图像血管树提取是医学影像分割领域用于动静脉分类与血管分割研究的标准基准数据集之一。本文以 MMSegmentation 仓库中 projects/medical/2d_image/fundus_photography/rite 项目为依托系统讲解 RITE 数据集的构成与统计信息、数据预处理与划分方法、UNet 模型的配置解析以及基于mim的一键训练与测试命令。读完本文你将能够在本仓库的 medical 项目框架下独立完成 RITE 数据集从下载、格式化、划分到训练、评估的完整闭环。数据集背景RITE 与 DRIVE 的血缘关系RITE 是一个支持视网膜眼底图像fundus photography上动脉/静脉分割或分类对比研究的数据库。它并非一个完全独立采集的数据集而是建立在公开的 DRIVEDigital Retinal Images for Vessel Extraction数据库基础之上RITE 包含40 组图像与 DRIVE 保持一致地平均划分为训练子集与测试子集各 20 组两个子集分别由 DRIVE 的对应子集构建而来每一组数据包含一张眼底照片fundus photograph和一份血管参考标准vessel reference standard其中眼底照片直接继承自 DRIVE训练集的血管参考标准是 DRIVE 中1st_manual的修改版本测试集的血管参考标准则采用 DRIVE 的2nd_manual。这样的设计使得 RITE 既继承了 DRIVE 在血管分割任务上的成熟标注体系又针对动静脉分离任务做了专门的标注修正适合作为低对比度彩色视网膜图像中血管结构提取方法的比较基准。该数据集原始论文为 Hu 等人发表于 MICCAI 2013 的《Automated Separation of Binary Overlapping Trees in Low-Contrast Color Retinal Images》引用格式可直接参考 rite 目录下的 README.md 中的Dataset Citation一节。数据统计信息类别分布与标注划分本项目的 RITE 数据以二分类语义分割任务形式组织类别为background背景与vessel血管。根据 rite 目录下的 README.md 中Statistic Information的统计表数据集名称解剖区域任务类型模态类别数训练/验证/测试图像数训练/验证/测试标注发布年份许可证Ritehead_and_necksegmentationfundus_photography220/-/20yes/-/yes2013CC-BY-NC 4.0类别名训练集数量训练集像素占比验证集数量验证集像素占比测试集数量测试集像素占比background2091.61--2091.58vessel208.39--208.42上表中的Pct表示该类像素占全部像素的百分比。可以看出这是一个典型的类别极度不均衡问题血管像素仅占全部像素的 8.4% 左右背景像素占比超过 91%。这意味着在训练与评估时不能仅依赖像素级准确率而应关注 mIoU、mDice 等对前景小目标更敏感的分割指标——这也是本项目配置中同时启用mIoU与mDice两个评估指标的原因。环境准备与依赖版本在开始数据处理与训练之前需要确保环境中已安装以下依赖以 rite 目录下的 README.md 的Prerequisites为准Python v3.8PyTorch v1.10.0pillow (PIL) v9.3.0scikit-learn (sklearn) v1.2.0[MIM] v0.3.4[MMCV] v2.0.0rc4[MMEngine] v0.2.0 或更高版本[MMSegmentation] v1.0.0rc5其中 scikit-learn 是数据划分脚本 split_seg_dataset.py 中train_test_split的运行时依赖pillow 则是 prepare_dataset.py 图像格式转换的基础库。所有后续命令都依赖正确的PYTHONPATH配置使其指向项目目录Python 才能定位到datasets.rite_dataset等模块。在rite/根目录下执行以下命令将当前目录加入PYTHONPATHexport PYTHONPATHpwd:$PYTHONPATH数据集准备从原始下载到标准目录结构RITE 的原始数据需要从数据托管平台下载并解压到data/路径下。整体流程分为两步先格式化数据再划分数据集。第一步运行 prepare_dataset.py 格式化数据在rite/目录下执行python tools/prepare_dataset.py该脚本由 tools/prepare_dataset.py 实现核心逻辑如下源数据路径假设为data/AV_groundTruth/下training/与test/两个子集每个子集内images/存放.tif格式的眼底原图vessel/存放血管标注convert_pics_into_pngs将.tif原图统一转换为.png格式灰度图像会被显式转换为RGB三通道以匹配 UNet 骨干网络in_channels3的输入要求convert_label_pics_into_pngs将标注图像按映射字典{0: 0, 255: 1}转换为二值标签原图中值为 0 的像素映射为背景label 0值为 255 的血管像素映射为前景label 1输出为 8 位无符号整型的 PNG 掩码转换完成后数据被组织为images/train/、images/test/、masks/train/、masks/test/四个目录。第二步运行 split_seg_dataset.py 生成划分文件接着运行python ../../tools/split_seg_dataset.py该脚本位于 projects/medical/2d_image/tools/split_seg_dataset.py用于生成train.txt、val.txt和test.txt若data/masks/test/目录存在官方提供了测试集标注则直接从images/test/生成test.txt若data/masks/val/目录存在则从images/val/生成val.txt若官方验证集与测试集的标注都无法获取脚本会退化为随机划分策略从训练集images/train/中按test_size0.2、random_state0随机切分出 80% 作为训练集、20% 作为验证集分别写入train.txt与val.txt从而保证训练-验证流程可复现生成的txt文件记录的是去除后缀的相对路径如images/train/xxx后续 DataLoader 会结合ann_file与data_prefix还原完整图像路径。最终目录结构完成上述两步后rite/下的目录结构应与 rite 目录下的 README.md 中描述一致mmsegmentation ├── mmseg ├── projects │ ├── medical │ │ ├── 2d_image │ │ │ ├── fundus_photography │ │ │ │ ├── rite │ │ │ │ │ ├── configs │ │ │ │ │ ├── datasets │ │ │ │ │ ├── tools │ │ │ │ │ ├── data │ │ │ │ │ │ ├── train.txt │ │ │ │ │ │ ├── val.txt │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── train │ │ │ │ │ │ │ │ ├── xxx.png │ │ │ │ │ │ │ │ ├── ... │ │ │ │ │ │ │ │ └── xxx.png │ │ │ │ │ │ ├── masks │ │ │ │ │ │ │ ├── train │ │ │ │ │ │ │ │ ├── xxx.png │ │ │ │ │ │ │ │ ├── ... │ │ │ │ │ │ │ │ └── xxx.png数据集模块RITEDataset 的实现要点数据集的类定义位于 datasets/rite_dataset.py它继承了 MMSegmentation 的BaseSegDataset并通过DATASETS.register_module()注册到全局注册表中因此可以在配置文件中直接以typeRITEDataset引用METAINFO dict(classes(background, vessel))声明了二分类的类别名与统计表中的类别顺序一致构造参数默认img_suffix.png、seg_map_suffix.png与预处理脚本输出的 PNG 格式对应reduce_zero_label固定为False即标签 0背景作为正常类别参与训练不会被屏蔽为忽略标签。这一点对于二分类任务至关重要——由于背景像素占比超过 91%任何将背景类忽略的做法都会直接破坏类别统计与损失计算使用该数据集时需要在配置中通过custom_imports dict(importsdatasets.rite_dataset)显式导入这也是 medical 系列项目统一采用的注册方式。训练配置解析UNet FCN 解码头的组合项目在 configs/ 目录下提供了 5 个配置文件其中 rite_512x512.py 是数据与评测相关的公共配置其余 4 个文件为基于不同学习率与损失函数设定的完整训练配置。公共数据配置 rite_512x512.pydataset_type RITEDataset 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) ]关键点说明所有图像统一缩放到512×512keep_ratioFalse表示直接拉伸而不保持宽高比保证批次内张量形状一致训练管线包含RandomFlip0.5 概率随机翻转与PhotoMetricDistortion亮度、对比度、饱和度等光度扰动这两项是眼底图像这种光照差异较大的医学影像上常用的数据增强手段测试管线则不含任何随机增强DataLoader 配置中训练集batch_size16、使用InfiniteSampler并开启 shuffle验证/测试集batch_size1、使用DefaultSampler不 shuffle且test_dataloader val_dataloader直接复用验证加载器评估器统一为IoUMetric指标为[mIoU, mDice]其中 mDice 对应医学分割中常用的 Dice 系数能更敏感地反映血管这类小目标的预测质量。完整训练配置以 0.0001 学习率为例以 fcn-unet-s5-d16_unet_1xb16-0.0001-20k_rite-512x512.py 为例_base_ [ mmseg::_base_/models/fcn_unet_s5-d16.py, ./rite_512x512.py, mmseg::_base_/default_runtime.py, mmseg::_base_/schedules/schedule_20k.py ] custom_imports dict(importsdatasets.rite_dataset) img_scale (512, 512) data_preprocessor dict(sizeimg_scale) 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)各字段的作用如下_base_通过mmseg::前缀引用仓库核心基础配置模型骨架 configs/base/models/fcn_unet_s5-d16.py、20k 迭代训练计划schedule_20k.py以及默认运行环境default_runtime.pycustom_imports负责注册自定义数据集类data_preprocessor统一输入尺寸为 512×512optimizer将学习率设置为 0.0001其余超参继承基础配置model中decode_head的num_classes覆盖为 2与 RITE 的二分类一致auxiliary_headNone显式关闭辅助头基础模型默认带辅助头test_cfg通过_delete_True将测试模式从基础配置的modeslide, crop_size256, stride170覆盖为modewhole即整图推理避免滑窗带来的边界拼接问题vis_backends None关闭可视化后端适合无 GUI 的纯训练/评估环境。基础模型骨架UNet 五阶段编解码结构由 configs/base/models/fcn_unet_s5-d16.py 可见本项目使用的骨干网络为 5 阶段 UNetbackbonedict( typeUNet, in_channels3, base_channels64, num_stages5, strides(1, 1, 1, 1, 1), enc_num_convs(2, 2, 2, 2, 2), dec_num_convs(2, 2, 2, 2), downsamples(True, True, True, True), enc_dilations(1, 1, 1, 1, 1), dec_dilations(1, 1, 1, 1), ... upsample_cfgdict(typeInterpConv), norm_evalFalse)输入为 3 通道 RGB 眼底图基础通道数 64共 5 个下采样阶段每个阶段编码/解码侧各含 2 个卷积归一化使用SyncBN上采样使用InterpConv解码头为FCNHeadin_channels64, in_index4即取 UNet 最深层特征直接做逐像素分类基础配置中默认的auxiliary_head为第 3 层in_index3的 FCNHead损失权重 0.4配合主头的交叉熵损失权重 1.0构成深度监督RITE 配置中将其关闭以简化训练。四个实验配置的学习率对比除 0.0001 外项目还提供了三组对照配置便于研究学习率对训练的影响fcn-unet-s5-d16_unet_1xb16-0.001-20k_rite-512x512.py学习率 0.001其余与 0.0001 版本相同fcn-unet-s5-d16_unet_1xb16-0.01-20k_rite-512x512.py学习率 0.01fcn-unet-s5-d16_unet_1xb16-0.01lr-sigmoid-20k_rite-512x512.py学习率 0.01同时将解码头改为二值分割常用的单通道 sigmoid 输出model dict( data_preprocessordata_preprocessor, decode_headdict( num_classes2, loss_decodedict(use_sigmoidTrue), out_channels1), auxiliary_headNone, test_cfgdict(modewhole, _delete_True))该配置中out_channels1且loss_decodedict(use_sigmoidTrue)即把任务视为单通道的二分类问题输出层只有一个通道配合 sigmoid 交叉熵损失将血管分割建模为前景概率图是血管这类二值掩码任务中常见且有效的设定。训练命令在rite/目录下且已正确配置PYTHONPATH使用 MIM 在单机单卡上训练模型mim train mmseg ./configs/${CONFIG_FILE}其中${CONFIG_FILE}替换为上述任一配置文件例如mim train mmseg ./configs/fcn-unet-s5-d16_unet_1xb16-0.0001-20k_rite-512x512.py训练计划为 20k 迭代schedule_20k.py训练过程中会依据配置中的IoUMetricmIoU 与 mDice在测试集上周期性评估。测试命令在rite/目录下使用 MIM 加载训练好的权重进行测试mim test mmseg ./configs/${CONFIG_FILE} --checkpoint ${CHECKPOINT_PATH}例如mim test mmseg ./configs/fcn-unet-s5-d16_unet_1xb16-0.0001-20k_rite-512x512.py --checkpoint /path/to/checkpoint.pth测试同样在测试集test_dataloader复用val_dataloader读取test.txt上进行输出mIoU与mDice两项指标。由于类别分布极不均衡背景占比约 91.6%建议以mDice 作为血管分割质量的主要参考指标它比 mIoU 对小目标前景的惩罚更温和也更能体现血管结构提取的实际效果。小结RITE 项目是 MMSegmentationprojects/medical医学影像分割生态中一个完整且极具代表性的案例它串起了医学分割项目落地所需的全部环节开源基准数据集基于 DRIVE 构建的动静脉/血管标注、二值像素占比极不均衡的类别设定背景 91.6% vs 血管 8.4%、脚本化的数据格式化与划分工具、基于 UNetFCNHead 的 512×512 训练配置以及面向二分类血管分割的 sigmoid 输出变体。读者既可以将其作为学习 MMSegmentation 自定义医学数据集的模板也可以直接修改_base_引用与数据路径迁移到 DRIVE、CHASE 等其他眼底血管数据集上开展实验。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价