数据描述
一、引言
在乳腺癌病理诊断中,细胞核形态分析是判断病灶良恶性的核心依据 —— 病理医生需手动识别、标注切片中的细胞核类型(如肿瘤细胞、淋巴细胞),但该过程存在两大关键痛点:一是效率极低,单张数字病理切片(分辨率常达数万像素)的细胞核标注需耗时 2-4 小时,难以满足大规模临床样本分析需求;二是标注一致性差,不同医生对 “不典型细胞核” 的分类标准存在差异,Kappa 系数常低于 0.7,导致算法训练数据的标签噪声大;此外,现有细胞核数据集多存在 “规模小(万级以下)”“标注维度单一(仅检测无分类)”“未考虑机构成像差异” 等问题,无法支撑算法在不同医院的泛化应用。
NuCLS 数据集正是针对上述痛点设计:基于 TCGA 乳腺癌影像资源,由病理学家、住院医师及医学生联合标注,涵盖 22 万 + 标记细胞核,当前修正单评者子集含 59485 个细胞核标注;不仅提供 “检测(边界框)+ 分类(3 级标签)+ 分割(掩码)” 全维度数据,还按来源医院划分为 6 个折叠,确保算法能适应不同机构的成像差异。其核心目标是为乳腺癌细胞核相关计算机视觉算法提供 “大规模、高权威、强泛化” 的训练基础,降低算法开发门槛。
二、内容主体
(一)数据集核心信息
通过表格直观呈现关键参数,帮助用户快速判断数据与任务的匹配度,所有信息均量化、明确:
信息类别 | 具体内容(量化、明确) |
---|---|
基础属性 | 总数据量:220,000 + 个标记细胞核;当前子集:修正单评者子集(59,485 个细胞核,1,744 个数据条目);数据类型:乳腺癌组织细胞核相关影像(RGB 图、掩码图等);来源关联:基于 TCGA(癌症基因组图谱)乳腺癌影像资源构建 |
采集与标注信息 | 数据来源:TCGA 乳腺癌数字病理切片;标注者:病理学家、病理学住院医师、医学生(多角色协作);标注场景:数字切片存档中的细胞核区域,聚焦乳腺癌病理关键区域 |
标注情况 | 标注类型:多任务标注(1. 检测:边界框坐标;2. 分类:3 级标签体系;3. 分割:掩码图像);标注精度:0.2 微米 / 像素(坐标标注单位);标注完整性:每个条目含 RGB 图、掩码图、可视化叠加图及完整坐标标注 |
格式与规格 | 图像规格:分辨率单位 0.2 微米 / 像素(无固定像素尺寸,依视野范围而定);数据条目构成:file_name(唯一标识)、rgb_image(高分辨率 RGB 图)、mask_image(3 通道掩码)、visualization_image(叠加图)、annotation_coordinates(坐标 + 分类标注);适配工具:OpenCV/PIL(图像读取)、PyTorch/TensorFlow(模型训练)、datasets 库(数据加载) |
数据划分 | 划分逻辑:按来源医院分为 6 个折叠(Fold),确保覆盖不同医疗机构的成像差异;各折叠数量:
|
(二)数据集核心优势
本数据集的核心竞争力在于 “规模权威性 + 标注维度完整性 + 泛化保障”,完美匹配乳腺癌细胞核检测、分类、分割的算法开发需求,具体优势如下:
-
规模领先且标注权威,数据可靠性高数据集含 22 万 + 标记细胞核,是当前乳腺癌细胞核领域规模最大的数据集之一(远超同类数据集 PanNuke 的 19 万细胞核);标注由病理团队协作完成,且经过 “修正单评者” 校验,避免单一标注者的主观偏差 —— 相比普通数据集 “仅学生标注”,其标签与临床病理标准的一致性更高(推测 Kappa 系数≥0.85),可直接用于高要求的算法训练与验证。
-
3 级分类标注体系,适配多粒度任务需求标注包含 “raw_classification(13 类,如 tumor、lymphocyte,细粒度)→main_classification(7 类,如 tumor_mitotic、nonTILnonMQ_stromal,中粒度)→super_classification(4 类,如 sTIL、nonTIL_stromal,粗粒度)” 三级体系:
- 细粒度(13 类)可用于 “特异性细胞核识别”(如区分巨噬细胞与淋巴细胞);
- 粗粒度(4 类)可用于 “快速病理分级”(如判断肿瘤浸润淋巴细胞 sTIL 数量);
- 多粒度标签可灵活支撑不同算法任务,无需用户额外标注。
-
按医院折叠分割,解决跨机构泛化难题数据划分基于 “来源医院” 而非随机分割 —— 不同医院的病理切片成像设备(如不同品牌数字扫描仪)、染色工艺存在差异,导致同一类型细胞核的图像特征不同(如 A 医院图像偏亮,B 医院偏暗)。6 个折叠的设计可让算法在 “某几家医院数据训练,另一家医院数据测试”,有效模拟真实临床中 “算法从 A 医院推广到 B 医院” 的场景,训练出泛化能力更强的模型。
-
数据维度全,开箱即用降低预处理成本每个数据条目包含 “RGB 原图(细胞核原始外观)+ 掩码图(分割标签,第一通道类别、第二三通道细胞核唯一 ID)+ 可视化叠加图(辅助理解标注位置)+ 坐标标注(边界框 + 多边形坐标)”,无需用户手动关联 “图像 - 标签 - 坐标”;同时支持通过 datasets 库一键加载,省去数据下载、解压、格式转换的流程,新手可 10 分钟内启动算法开发。
(三)数据应用全流程指导(计算机视觉任务)
1. 数据加载与初探(基础操作)
功能目标:通过 datasets 库快速加载数据,了解数据结构,验证数据完整性。步骤 + 代码示例(Python):
# 1. 安装依赖库(首次使用需执行)
# !pip install datasets pillow opencv-python numpy
# 2. 导入工具库
from datasets import load_dataset
import matplotlib.pyplot as plt
import cv2
import numpy as np
# 3. 加载数据集(二选一:完整数据集/调试子集)
# 加载完整修正单评者数据集(约59k细胞核,1744条目,需较多存储空间)
dataset = load_dataset("minhanhto09/NuCLS_dataset", name="default")
# 加载调试子集(仅train_fold_999/test_fold_999,28条目,快速测试)
# dataset = load_dataset("minhanhto09/NuCLS_dataset", name="debug")
# 4. 查看数据集结构(训练/测试划分、条目数量)
print("数据集拆分:", dataset.keys()) # 输出:dict_keys(['train_fold_1', 'test_fold_1', ..., 'test_fold_999'])
print("train_fold_1条目数:", len(dataset["train_fold_1"])) # 输出:1481
print("单条数据字段:", dataset["train_fold_1"][0].keys()) # 输出:file_name, rgb_image, mask_image, ...
# 5. 可视化单条数据(RGB图+掩码图+叠加图)
sample = dataset["train_fold_1"][0]
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# RGB图(PIL格式转OpenCV格式便于显示)
rgb_img = np.array(sample["rgb_image"])
axes[0].imshow(rgb_img)
axes[0].set_title("RGB原图")
axes[0].axis("off")
# 掩码图(第一通道:类别标签;第二三通道:细胞核唯一ID)
mask_img = np.array(sample["mask_image"])
axes[1].imshow(mask_img[:, :, 0], cmap="tab10") # 显示类别标签通道
axes[1].set_title("掩码图(类别通道)")
axes[1].axis("off")
# 可视化叠加图
vis_img = np.array(sample["visualization_image"])
axes[2].imshow(vis_img)
axes[2].set_title("RGB+掩码叠加图")
axes[2].axis("off")
plt.tight_layout()
plt.show()
# 6. 查看标注坐标与分类标签(以第一个细胞核为例)
annotations = sample["annotation_coordinates"]
print("细胞核标注数量:", len(annotations)) # 输出该条目下的细胞核总数
print("第一个细胞核标签:")
print(f"- 细粒度分类(raw):{annotations[0]['raw_classification']}")
print(f"- 中粒度分类(main):{annotations[0]['main_classification']}")
print(f"- 粗粒度分类(super):{annotations[0]['super_classification']}")
print(f"- 边界框坐标(xmin, ymin, xmax, ymax):{annotations[0]['xmin']}, {annotations[0]['ymin']}, {annotations[0]['xmax']}, {annotations[0]['ymax']}")
关键说明:加载完整数据集前需确保存储空间充足(推测约 50-100GB,依图像分辨率而定);掩码图的第二、三通道用于区分同一类别下的不同细胞核(如两个 tumor 细胞核,ID 不同),在分割任务中需保留该信息以避免细胞核合并;标注坐标的 “xmin/ymin/xmax/ymax” 为像素单位,需与图像尺寸匹配(若图像 resize 需同步缩放坐标)。
2. 核心任务演示(2 个典型场景)
任务 1:细胞核检测(目标检测任务)
任务目标:识别图像中每个细胞核的位置(边界框),输出其粗粒度分类(super_classification,4 类)。模型选择:YOLOv8n(轻量级目标检测模型,适合小目标(细胞核)检测,训练速度快)代码示例(基于 Ultralytics YOLO):
# 1. 安装YOLO库
# !pip install ultralytics
# 2. 数据格式转换(YOLO要求:图像+标签文件(每行为“类别ID x_center y_center w h”))
import os
from ultralytics.data.utils import autosplit
# 定义类别映射(super_classification的4类→0-3ID)
super_class_map = {
"sTIL": 0,
"nonTIL_stromal": 1,
"tumor": 2,
"other": 3 # 覆盖剩余super分类(如数据集定义的其他类别)
}
# 创建YOLO格式数据集目录
yolo_data_dir = "nucls_yolo_data"
os.makedirs(os.path.join(yolo_data_dir, "images", "train"), exist_ok=True)
os.makedirs(os.path.join(yolo_data_dir, "labels", "train"), exist_ok=True)
os.makedirs(os.path.join(yolo_data_dir, "images", "val"), exist_ok=True)
os.makedirs(os.path.join(yolo_data_dir, "labels", "val"), exist_ok=True)
# 处理train_fold_1数据(示例:取前1000条为训练,剩余为验证)
train_sample = dataset["train_fold_1"].select(range(1000))
val_sample = dataset["train_fold_1"].select(range(1000, len(dataset["train_fold_1"])))
def convert_to_yolo(sample, save_dir, split):
for idx, data in enumerate(sample):
# 保存RGB图像
img = np.array(data["rgb_image"])
img_path = os.path.join(save_dir, "images", split, f"nucls_{idx}.jpg")
cv2.imwrite(img_path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR)) # OpenCV保存需BGR格式
# 生成标签文件
label_path = os.path.join(save_dir, "labels", split, f"nucls_{idx}.txt")
with open(label_path, "w") as f:
for ann in data["annotation_coordinates"]:
# 获取粗粒度类别ID
super_cls = ann["super_classification"]
if super_cls not in super_class_map:
continue # 跳过未定义类别
cls_id = super_class_map[super_cls]
# 图像尺寸(H, W)
h, w = img.shape[0], img.shape[1]
# 边界框坐标转换(xmin, ymin, xmax, ymax → x_center, y_center, w, h,归一化到0-1)
x_center = (ann["xmin"] + ann["xmax"]) / (2 * w)
y_center = (ann["ymin"] + ann["ymax"]) / (2 * h)
bbox_w = (ann["xmax"] - ann["xmin"]) / w
bbox_h = (ann["ymax"] - ann["ymin"]) / h
# 写入标签(格式:cls_id x_center y_center w h)
f.write(f"{cls_id} {x_center:.6f} {y_center:.6f} {bbox_w:.6f} {bbox_h:.6f}\n")
# 转换训练集与验证集
convert_to_yolo(train_sample, yolo_data_dir, "train")
convert_to_yolo(val_sample, yolo_data_dir, "val")
# 3. 编写YOLO配置文件(data.yaml)
yaml_content = f"""
path: {os.path.abspath(yolo_data_dir)} # 数据集根路径
train: images/train # 训练图像路径
val: images/val # 验证图像路径
nc: 4 # 类别数量
names: ['sTIL', 'nonTIL_stromal', 'tumor', 'other'] # 类别名称
"""
with open(os.path.join(yolo_data_dir, "data.yaml"), "w") as f:
f.write(yaml_content)
# 4. 训练YOLOv8n模型
from ultralytics import YOLO
# 加载预训练模型
model = YOLO("yolov8n.pt")
# 训练(重点参数:imgsz=640(图像resize尺寸),epochs=50,batch=16,device=0(GPU))
results = model.train(
data=os.path.join(yolo_data_dir, "data.yaml"),
imgsz=640,
epochs=50,
batch=16,
device=0,
name="nucls_yolov8n_detection"
)
# 5. 验证模型性能(输出mAP50、召回率等指标)
val_results = model.val(data=os.path.join(yolo_data_dir, "data.yaml"), imgsz=640)
print(f"模型mAP50(目标检测关键指标):{val_results.box.map50:.4f}")
print(f"肿瘤细胞核(tumor)召回率:{val_results.box.recall[2]:.4f}") # recall[2]对应tumor类别(ID=2)
关键说明:细胞核属于 “小目标”,训练时建议将
imgsz
设为 640 或更大(如 800),避免目标被过度压缩;需重点关注 “tumor” 类的召回率(临床需求≥0.95,避免漏检肿瘤细胞核);若训练数据不足,可使用 YOLO 的pretrained=True
加载预训练权重,通过迁移学习提升性能。验证报告

卖家暂未授权典枢平台对该文件进行数据验证,您可以向卖家
申请验证报告
。 
22 万 + 标记细胞核 NuCLS 数据集 1744 条目 + 3 级分类标注 + 6 折叠分割 | 乳腺癌细胞核检测 / 分类 / 分割 |
¥9.9
已售 0
3.05GB
申请报告