Skip to Content
DocsBitrocAI 数据集格式指南

BitrocAI 数据集格式说明

数据集介绍

BitrocAI Datasets 是一个用于细胞类型分类和实例分割的数据集,专门设计用于训练和评估细胞分类及分割模型。该数据集目前包含两种细胞类型:阳性细胞(Positive)阴性细胞(Negative)

数据集用途

  • 细胞实例分割:识别和分割图像中的每个细胞实例
  • 细胞类型分类:区分阳性细胞和阴性细胞
  • 模型训练:用于训练细胞分类及分割模型
  • 模型评估:用于验证和测试训练好的模型性能

数据集结构

BitrocAI 数据集采用分层目录结构,包含四个主要部分:原始WSI图像、处理后的图像、掩码和标注文件。

Dataset_{dataset_name}_{dataset_id}/ ├── wsi/ # 原始WSI图像目录(全片扫描图像) │ ├── train/ # 训练集WSI文件 │ │ └── *.svs, *.kfb, *.ndpi, *.dcm, .tif, .tiff │ ├── validation/ # 验证集WSI文件 │ │ └── *.svs, *.kfb, *.ndpi, *.dcm, .tif, .tiff │ └── test/ # 测试集WSI文件 │ └── *.svs, *.kfb, *.ndpi, *.dcm, .tif, .tiff ├── images/ # 处理后的图像目录(从WSI转换而来) │ ├── train/ # 训练集图像 │ │ ├── {name}.png # 单个小图(从WSI缩略图或指定区域提取) │ │ └── {name}_{x}_{y}.png # 瓦片图像(x: 横轴第几个, y: 纵轴第几个) │ ├── validation/ # 验证集图像 │ │ ├── {name}.png │ │ └── {name}_{x}_{y}.png │ └── test/ # 测试集图像 │ ├── {name}.png │ └── {name}_{x}_{y}.png ├── masks/ # 分割掩码目录 │ ├── train/ │ │ ├── positive/ # 训练集阳性细胞掩码 │ │ │ ├── {name}.png # 或 {name}_{x}_{y}.png │ │ │ └── ... │ │ └── negative/ # 训练集阴性细胞掩码 │ │ ├── {name}.png # 或 {name}_{x}_{y}.png │ │ └── ... │ ├── validation/ │ │ ├── positive/ # 验证集阳性细胞掩码 │ │ │ └── *.png │ │ └── negative/ # 验证集阴性细胞掩码 │ │ └── *.png │ └── test/ │ ├── positive/ # 测试集阳性细胞掩码 │ │ └── *.png │ └── negative/ # 测试集阴性细胞掩码 │ └── *.png └── annotations/ # 标注文件目录(H5格式) ├── train/ │ ├── positive/ # 训练集阳性细胞标注 │ │ └── *.h5 │ └── negative/ # 训练集阴性细胞标注 │ └── *.h5 ├── validation/ │ ├── positive/ # 验证集阳性细胞标注 │ │ └── *.h5 │ └── negative/ # 验证集阴性细胞标注 │ └── *.h5 └── test/ ├── positive/ # 测试集阳性细胞标注 │ └── *.h5 └── negative/ # 测试集阴性细胞标注 └── *.h5

示例:BCData数据集统计

数据集分割图像数量阳性掩码数量阴性掩码数量标注文件数量
训练集 (train)8038038031606 (803×2)
验证集 (validation)133133133266 (133×2)
测试集 (test)402399402804 (402×2)
总计1338133513382676

文件格式说明

1. 原始WSI图像文件 (wsi/)

  • 格式:全片扫描(Whole Slide Image)格式

    • .svs - Aperio ScanScope格式
    • .kfb - KFB格式
    • .ndpi - Hamamatsu NDPI格式
    • .dcm - DICOM格式
    • .tif - TIFF格式
    • .tiff - TIFF格式
  • 特点:高分辨率、大尺寸的病理切片图像

  • 用途:原始数据源,需要转换为PNG格式后用于训练和推理

WSI到PNG转换规则

WSI文件需要转换为PNG格式并存储到 images/ 目录。转换方式有两种:

方式1:单个小图转换

  • 从WSI文件 {name}.svs(或其他格式)提取缩略图或指定区域
  • 转换为单个PNG文件:{name}.png
  • 例如:sample001.svssample001.png

方式2:瓦片(Tile)转换

  • 将WSI文件分割成多个瓦片
  • 每个瓦片命名为:{name}_{x}_{y}.png
    • {name}:原始WSI文件名(不含扩展名)
    • {x}:横轴瓦片索引(从0开始)
    • {y}:纵轴瓦片索引(从0开始)
  • 例如:sample001.svssample001_0_0.png, sample001_0_1.png, sample001_1_0.png, …

注意:同一WSI文件可以同时使用两种方式,也可以只使用其中一种。转换后的PNG文件统一存储在 images/{split}/ 目录下。

2. 处理后的图像文件 (images/)

  • 格式:PNG
  • 颜色空间:RGB(3通道)
  • 数据类型:uint8
  • 命名规则
    • 单个图像:{name}.png(从WSI提取的单个图像)
    • 瓦片图像:{name}_{x}_{y}.png(从WSI分割的瓦片)
  • 用途:模型训练和推理的输入图像

3. 掩码文件 (masks/)

  • 格式:PNG
  • 数据类型:uint16
  • 编码方式:实例分割掩码
    • 每个像素值表示该像素所属的细胞实例ID
    • 值为 0 表示背景(非细胞区域)
    • 值为正整数(1, 2, 3, …)表示不同的细胞实例
    • 同一细胞的所有像素具有相同的ID值

掩码组织方式

  • positive/ 目录:包含所有阳性细胞的掩码

    • 每个阳性细胞有唯一的实例ID
    • 同一图像中可能有多个阳性细胞,每个细胞ID不同
  • negative/ 目录:包含所有阴性细胞的掩码

    • 每个阴性细胞有唯一的实例ID
    • 同一图像中可能有多个阴性细胞,每个细胞ID不同
  • 其他类型:如有其他细胞类型(如浸润细胞),可在 masks/{split}/ 下创建对应目录(如 浸润细胞可用目录 infiltrating/ ),组织方式同上

掩码合并规则

在实际使用中,需要将阳性和阴性掩码合并:

  • 阳性细胞:类别ID = 1
  • 阴性细胞:类别ID = 2
  • 背景:类别ID = 0

合并时需要注意:

  • 确保实例ID在整个图像中唯一且连续
  • 阴性细胞的ID需要从阳性细胞的最大ID之后开始编号

4. 标注文件 (annotations/)

  • 格式:HDF5 (.h5)
  • 用途:存储细胞标注的坐标信息
  • 命名规则:与对应的图像文件同名(扩展名为.h5)

H5文件数据结构

每个 .h5 文件包含以下数据集:

  • coordinates:细胞中心点坐标数组

    • 数据类型int32
    • 形状(N, 2),其中 N 为细胞数量,2 表示 (x, y) 坐标
    • 说明:存储该类型细胞在图像中的中心点坐标,每个细胞对应一个坐标点
    • 示例
      import h5py with h5py.File('annotations/train/positive/sample001.h5', 'r') as f: coords = f['coordinates'][:] # shape: (N, 2), dtype: int32 # coords[0] = [x0, y0] # 第一个细胞的坐标 # coords[1] = [x1, y1] # 第二个细胞的坐标
  • 文件组织

    • annotations/{split}/positive/{name}.h5:存储阳性细胞的坐标
    • annotations/{split}/negative/{name}.h5:存储阴性细胞的坐标
    • 如有其他细胞类型,同样在对应目录下创建 .h5 文件

WSI转换说明

转换流程

  1. 原始WSI文件存储在 wsi/{split}/ 目录
  2. 转换为PNG后存储在 images/{split}/ 目录
  3. 对应的掩码和标注文件存储在 masks/{split}/annotations/{split}/ 目录

转换示例

假设有一个WSI文件:wsi/train/sample001.svs

方式1:转换为单个图像

  • 输出:images/train/sample001.png
  • 对应的掩码:
    • masks/train/positive/sample001.png
    • masks/train/negative/sample001.png
  • 对应的标注:
    • annotations/train/positive/sample001.h5
    • annotations/train/negative/sample001.h5

方式2:转换为瓦片

  • 输出:images/train/sample001_0_0.png, sample001_0_1.png, sample001_1_0.png, …
  • 对应的掩码:
    • masks/train/positive/sample001_0_0.png, sample001_0_1.png, …
    • masks/train/negative/sample001_0_0.png, sample001_0_1.png, …
  • 对应的标注:
    • annotations/train/positive/sample001_0_0.h5, sample001_0_1.h5, …
    • annotations/train/negative/sample001_0_0.h5, sample001_0_1.h5, …

数据集约束和注意事项

1. 文件命名约束

  • 文件名对应关系:掩码和标注文件的**文件名(不含扩展名)必须与对应的图像文件的文件名(不含扩展名)**完全一致

    • 例如:
      • 图像:sample001.png → 掩码:sample001.png(在 masks/{split}/positive/masks/{split}/negative/ 中)
      • 图像:sample001_0_0.png → 掩码:sample001_0_0.png
      • 图像:sample001_1_2.png → 掩码:sample001_1_2.png
    • 标注文件同样遵循此规则,但扩展名为 .h5
      • 例如:图像 sample001.png → 标注:sample001.h5(在 annotations/{split}/positive/annotations/{split}/negative/ 中)
  • WSI转换后的文件对应

    • 如果WSI文件 {name}.svs 转换为单个图像 {name}.png,则掩码和标注文件也使用 {name} 作为基础名称
    • 如果WSI文件转换为瓦片 {name}_{x}_{y}.png,则每个瓦片都有对应的掩码和标注文件 {name}_{x}_{y}.png{name}_{x}_{y}.h5

2. 掩码格式约束

  • 数据类型:必须使用 uint16 类型存储掩码
  • 实例ID
    • 必须从 1 开始编号(0 保留给背景)
    • 同一掩码文件内的实例ID必须连续且唯一
    • 不同掩码文件之间的ID可以重复(加载时会重新编号)

3. 图像和掩码尺寸约束

  • 尺寸匹配:掩码的尺寸必须与对应图像的尺寸完全一致
    • 图像:(H, W, 3)
    • 掩码:(H, W)

4. 数据完整性约束

  • 配对要求:每个图像应该同时有对应的阳性掩码和阴性掩码文件
    • 如果某个图像没有阳性细胞,对应的 positive/ 掩码文件可能不存在或为空
    • 如果某个图像没有阴性细胞,对应的 negative/ 掩码文件可能不存在或为空
    • 但至少应该有一个掩码文件存在(否则该图像无法用于训练)

5. 类别定义约束

  • 类别编码
    • 0:背景(非细胞区域)
    • 1:阳性细胞(Positive)
    • 2:阴性细胞(Negative)
  • 类别互斥:每个像素只能属于一个类别和一个实例

6. 数据集分割约束

  • 固定分割:train/validation/test 分割已经固定,不应随意更改
  • 无重叠:三个分割之间不应有重复的图像
  • 一致性:同一图像的所有相关文件(图像、阳性掩码、阴性掩码、标注)必须在同一个分割中

7. 数据加载约束

  • 内存管理:加载大量数据时需要注意内存使用
    • 训练集图像多且大,全部加载可能占用大量内存
  • 实例ID重新编号:在合并阳性和阴性掩码时,必须重新编号以确保ID唯一性

8. 文件格式约束

  • WSI格式:支持 .svs, .kfb, .ndpi, .dcm, .tif, .tiff 格式
  • 图像格式:仅支持 PNG 格式(从WSI转换而来)
  • 掩码格式:仅支持 PNG 格式(uint16)
  • 标注格式:H5 格式(可选,当前训练代码未使用)

9. WSI转换约束

  • 转换一致性:同一WSI文件转换后的所有PNG图像,其对应的掩码和标注文件必须存在
  • 瓦片命名:瓦片索引 {x}{y} 必须从0开始,连续编号
  • 文件扩展名
    • WSI文件:保留原始扩展名(.svs, .kfb, .ndpi, .dcm, .tif, .tiff
    • 转换后的图像:统一使用 .png 扩展名
    • 掩码文件:使用 .png 扩展名
    • 标注文件:使用 .h5 扩展名

扩展数据集:添加新类别

如果需要添加新的细胞类别(如浸润细胞、中性粒细胞等),请遵循以下步骤:

1. 类别ID分配

  • 新类别应使用递增的类别ID(从 3 开始)
  • 例如:3 表示浸润细胞(Infiltrating),4 表示中性粒细胞(Neutrophil)等
  • 确保类别ID连续且唯一,不要跳过数字

2. 目录结构创建

  • masks/{split}/ 目录下创建与新类别对应的目录
  • 目录名称应使用小写英文,多个单词用下划线分隔(如 infiltratingneutrophil
  • 例如:masks/train/infiltrating/masks/validation/infiltrating/masks/test/infiltrating/

3. 标注文件创建

  • annotations/{split}/ 目录下创建与新类别对应的目录
  • 目录名称与掩码目录保持一致
  • 例如:annotations/train/infiltrating/annotations/validation/infiltrating/annotations/test/infiltrating/

4. 文件命名规则

  • 掩码文件:masks/{split}/{category_name}/{name}.pngmasks/{split}/{category_name}/{name}_{x}_{y}.png
  • 标注文件:annotations/{split}/{category_name}/{name}.h5annotations/{split}/{category_name}/{name}_{x}_{y}.h5
  • 文件名必须与对应的图像文件名(不含扩展名)完全一致

5. 掩码合并规则

  • 合并多个类别掩码时,需要确保实例ID在整个图像中唯一且连续
  • 新类别的实例ID应从之前所有类别的最大ID之后开始编号
  • 例如:如果阳性细胞最大ID为100,阴性细胞最大ID为200,则新类别(如浸润细胞)的ID应从201开始

6. 文档更新

  • 在数据集说明文档中更新类别编码列表(如”5. 类别定义约束”部分)
  • 更新数据集统计表格(如适用)
  • 在代码中更新类别映射字典或配置文件

示例:添加浸润细胞类别

假设要添加”浸润细胞”(Infiltrating)作为第3类:

  • 类别ID3
  • 目录结构
    masks/train/infiltrating/ masks/validation/infiltrating/ masks/test/infiltrating/ annotations/train/infiltrating/ annotations/validation/infiltrating/ annotations/test/infiltrating/
  • 类别编码更新为
    • 0:背景
    • 1:阳性细胞
    • 2:阴性细胞
    • 3:浸润细胞
最后更新