医学图像多器官分割数据集
数据集概述
本数据集为医学图像语义分割数据集,包含来自18 个病例的共2,211 张切片图像及其对应的分割掩码,适用于多器官/多结构自动分割任务的训练与评估。
原图:
掩码图像:
掩码图像RGB格式:
基本信息
| 属性 | 值 |
|---|---|
| 总图像数 | 2,211 张 |
| 病例数 | 18 个 |
| 图像分辨率 | 512 × 512 像素 |
| 图像格式 | PNG |
| 图像类型 | 灰度图(8-bit,单通道) |
| 分割类别数 | 8 类(含背景) |
| 训练集 | 1,658 张(75%) |
| 测试集 | 553 张(25%) |
目录结构
data/ ├── images/ # 原始灰度图像(2,211 张) ├── masks/ # 标签掩码 - 索引格式(2,211 张,单通道,像素值 0-7) ├── masks_rgb/ # 标签掩码 - RGB 可视化格式(2,211 张,三通道彩色图) ├── color_map.txt # 类别颜色映射表 ├── train.txt # 训练集文件列表 ├── test.txt # 测试集文件列表文件命名规范
文件命名格式为:case{病例编号}_slice{切片编号}.png
- 病例编号:4 位数字(如
0005、0040) - 切片编号:3 位数字(如
000、142)
示例:case0006_slice109.png表示第 6 号病例的第 109 张切片。
病例分布
| 病例 | 切片数 | 病例 | 切片数 |
|---|---|---|---|
| case0005 | 117 | case0026 | 131 |
| case0006 | 131 | case0027 | 88 |
| case0007 | 163 | case0028 | 89 |
| case0009 | 149 | case0030 | 153 |
| case0010 | 148 | case0031 | 93 |
| case0021 | 143 | case0033 | 104 |
| case0023 | 96 | case0034 | 98 |
| case0024 | 124 | case0037 | 99 |
| — | — | case0039 | 90 |
| — | — | case0040 | 195 |
分割标签与颜色映射
数据集包含 8 个分割类别,标签定义及颜色映射如下:
| 标签值 | 颜色 | RGB 值 | 说明 |
|---|---|---|---|
| 0 | ⬛ 黑色 | (0, 0, 0) | 背景 |
| 1 | ⬜ 白色 | (255, 255, 255) | 类别 1 |
| 2 | 🟥 红色 | (0, 0, 255) | 类别 2 |
| 3 | 🟩 绿色 | (0, 255, 0) | 类别 3 |
| 4 | 🟦 蓝色 | (255, 0, 0) | 类别 4 |
| 5 | 🟨 黄色 | (0, 255, 255) | 类别 5 |
| 6 | 🟪 紫色 | (255, 0, 255) | 类别 6 |
| 7 | 🩵 青色 | (255, 255, 0) | 类别 7 |
注意:
color_map.txt中的 RGB 值采用 OpenCV 的 BGR 格式。
掩码文件格式
数据集提供两种掩码格式:
masks/— 索引格式
- 格式:单通道灰度图(Mode:
L) - 像素值:0–7,对应上表中的标签值
- 用途:直接用于模型训练,可作为交叉熵损失等标准分割损失的输入
masks_rgb/— RGB 可视化格式
- 格式:三通道彩色图(Mode:
RGB) - 像素值:按颜色映射表着色
- 用途:可视化展示、结果对比、论文插图
数据集划分
数据集已预先划分好训练集与测试集:
- train.txt:1,658 个文件名,每行一个,用于模型训练
- test.txt:553 个文件名,每行一个,用于模型评估
文件列表中的文件名为images/目录下的文件名,对应的掩码文件在masks/和masks_rgb/目录中具有相同的文件名。
类别分布(不均衡)
各标签在掩码中的像素占比存在明显不均衡:
| 标签 | 近似像素占比 |
|---|---|
| 0(背景) | ~92% |
| 5 | ~1.8% |
| 4 | ~0.25% |
| 3 | ~0.19% |
| 7 | ~0.29% |
| 1 | ~0.15% |
| 6 | ~0.10% |
| 2 | ~0.06% |
建议在训练时采用加权损失函数(如 Weighted Cross-Entropy、Dice Loss 或 Focal Loss)来缓解类别不均衡问题。
使用示例
PyTorch Dataset 示例
importosimporttorchimportnumpyasnpfromPILimportImagefromtorch.utils.dataimportDatasetclassSegmentationDataset(Dataset):def__init__(self,root_dir,split='train',transform=None):self.root_dir=root_dir self.transform=transform self.split=split# 读取文件列表list_file=os.path.join(root_dir,f'{split}.txt')withopen(list_file,'r')asf:self.filenames=[line.strip()forlineinfifline.strip()]def__len__(self):returnlen(self.filenames)def__getitem__(self,idx):fname=self.filenames[idx]# 读取图像和掩码image=Image.open(os.path.join(self.root_dir,'images',fname))mask=Image.open(os.path.join(self.root_dir,'masks',fname))image=np.array(image)mask=np.array(mask)# 像素值 0-7ifself.transform:image,mask=self.transform(image,mask)else:image=torch.from_numpy(image).unsqueeze(0).float()/255.0mask=torch.from_numpy(mask).long()returnimage,mask# 使用dataset=SegmentationDataset('path/to/data',split='train')可视化掩码示例
importmatplotlib.pyplotaspltfromPILimportImage# 读取原始图像和 RGB 掩码image=Image.open('images/case0006_slice109.png')mask_rgb=Image.open('masks_rgb/case0006_slice109.png')fig,axes=plt.subplots(1,2,figsize=(10,5))axes[0].imshow(image,cmap='gray')axes[0].set_title('原始图像')axes[0].axis('off')axes[1].imshow(mask_rgb)axes[1].set_title('分割掩码(RGB)')axes[1].axis('off')plt.tight_layout()plt.show()注意事项
- 像素值范围:原始图像为 8-bit 灰度图,像素值范围 [0, 255],输入模型前建议归一化至 [0, 1]
- 类别不均衡:背景像素占约 92%,前景类别占比很小,请采用适当的损失函数或数据增强策略
- 数据划分:训练集与测试集已固定划分,请勿混用以保证实验公平性
- 掩码使用:训练时请使用
masks/目录下的索引格式掩码,masks_rgb/仅供可视化使用
数据集地址:https://download.csdn.net/download/FL1623863129/90010785