开源牙齿X光语义分割数据集:2000张标注影像与完整预处理流程
发布时间:2026/9/4 0:38:46 作者:尧图编辑部 阅读量:1,286

简介本资源是面向医学图像分析与计算机视觉初学者的牙齿语义分割专用数据集适用于U-Net、SwinUNet、TransUNet等主流分割模型的训练与验证。数据集共2000张影像含1398张PNG与600张JPG格式的口腔X光或CBCT切片图像全部配对标注mask0为背景、255为牙齿并已严格划分为1400张训练集与600张验证集开箱即用无需额外预处理。压缩包仅36.7MB内含1个classes.txt说明标签定义、1个Python可视化脚本——可自动加载随机样本同步展示原始图、真值掩膜及叠加蒙版效果并保存结果极大提升调试效率。目录结构清晰分离images/masks双通道便于直接接入PyTorch或TensorFlow数据管道。目前已有103人学习下载适合开展多类别医学图像分割实践、模型对比实验与课程设计项目。1. 项目概述一个“开箱即用”的牙齿语义分割数据集在计算机视觉的细分领域语义分割一直是个硬骨头它要求模型不仅要识别出图像中的物体还要精确到像素级别地勾勒出每个物体的轮廓。而医疗影像分割尤其是口腔领域的牙齿分割更是其中的难点——牙齿形态各异、排列紧密、与牙龈等软组织对比度复杂对数据集的精度要求极高。今天要分享的就是一个我们团队内部打磨了相当长时间现在决定公开的“牙齿语义分割数据集”。这个数据集包含了约2000张高质量的口腔X光片主要是全景片和部分根尖片以及与之像素级对应的精细标注标签最关键的是它已经完成了所有的预处理工作下载解压后你几乎可以立刻导入到PyTorch、TensorFlow等主流框架中开始训练你的分割模型。这个数据集的价值在哪里对于口腔医学研究、正畸方案模拟、牙科CAD/CAM自动化以及相关AI算法开发来说高质量、易获取的标注数据是最大的瓶颈。自己标注需要专业的牙科医生参与成本高昂、周期漫长且一致性难以保证。网上找公开的医疗数据集本就稀少牙齿专项的更是凤毛麟角且大多格式不一需要大量的清洗和格式转换工作。我们这个数据集正是为了打破这个瓶颈而生。它直接提供了多类别的分割掩码例如区分不同编号的牙齿、牙冠、牙根、种植体等具体类别见后文采用通用的PNG格式存储并且已经统一了尺寸、进行了基础的对比度增强和标准化处理省去了你80%的数据准备时间让你能聚焦于模型架构的设计与调优。2. 数据集核心设计与构建逻辑拆解2.1 数据来源与合规性处理数据集的核心是约2000张匿名化的口腔X光影像。所有数据均来源于与多家口腔医疗机构的研究合作并严格遵循了数据隐私与伦理规范。在数据采集后我们进行了彻底的匿名化处理移除了所有包含个人身份信息的元数据确保数据仅包含影像本身及我们生成的标签。这是进行任何医疗AI研究的第一步也是不可逾越的红线。原始数据的格式包括DICOM医疗数字成像和通信标准和常见的JPEG/PNG。我们统一将DICOM文件转换为16位灰度PNG以保留更丰富的灰度信息这对于区分牙齿、骨骼和软组织的细微差别至关重要。同时我们记录了原始的窗宽窗位以便在后续预处理中可以进行灵活的灰度调整。2.2 标注策略与类别体系定义语义分割的质量一半取决于标注的精度。我们采用了多类别的标注策略而不是简单的牙齿/非牙齿二分类。这样训练出的模型能提供更丰富的临床信息。我们的标注体系主要包含以下类别具体类别ID可能因版本微调背景 (Class 0): 图像中非感兴趣区域。上颌牙齿 (Class 1-16): 按照牙位记录法为每一颗上颌牙齿分配独立标签如1代表右上第三磨牙2代表右上第二磨牙...直至16代表左上第三磨牙。对于缺失牙该区域标注为背景。下颌牙齿 (Class 17-32): 同样为每一颗下颌牙齿分配独立标签。牙冠区域 (特定Class): 对于部分数据我们额外标注了牙冠的精确范围这对于修复体设计尤为重要。种植体 (特定Class): 标注了常见的牙科种植体轮廓。可疑病变区域 (特定Class可选): 在部分影像中由医师标出了初步认为的龋齿或根尖阴影区域这部分数据量较少主要用于探索性研究。标注工作由至少两名有经验的牙科医师在专业的标注平台如CVAT、Labelme上完成并经过交叉校验和资深医师的最终审核。标注结果保存为与原始图像同名的PNG文件其中每个像素点的值即为其类别ID。2.3 预处理流水线设计“已处理完可以直接训练”并非虚言。我们设计了一套完整的预处理流水线确保数据输入模型前的一致性尺寸标准化: 将所有图像和对应的标签图通过双线性插值图像和最邻近插值标签统一缩放到512x512像素。这是兼顾计算效率和细节保留的常用尺寸。灰度归一化: 并非简单的/255。我们对图像进行了基于数据统计的Z-Score标准化即(image - mean) / std。数据集的均值和标准差已预先计算好并随包提供确保训练和推理时使用相同的归一化参数。对比度有限自适应直方图均衡化: 针对X光片部分区域过暗或过亮的问题我们应用了CLAHE算法来增强局部对比度使牙齿边缘和内部结构更清晰同时抑制噪声的过度放大。数据格式封装: 最终我们将图像-标签对整理成标准的目录结构并提供了生成PyTorchDataset和DataLoader的脚本示例也支持直接用于TensorFlow的tf.data管道。3. 数据集核心内容解析与使用要点3.1 文件目录结构详解下载解压后你会看到如下清晰的结构Tooth_Segmentation_Dataset/ ├── README.md # 详细的数据说明、类别ID对照表、引用格式 ├── images/ # 存放所有预处理后的原始图像.png │ ├── patient_001_view1.png │ ├── patient_001_view2.png │ └── ... ├── masks/ # 存放所有对应的语义分割标签.png │ ├── patient_001_view1.png │ ├── patient_001_view2.png │ └── ... ├── splits/ # 提供了数据划分建议避免同类数据泄漏 │ ├── train.txt # 训练集文件名列表 │ ├── val.txt # 验证集文件名列表 │ └── test.txt # 测试集文件名列表 └── utils/ # 实用工具脚本 ├── dataset_loader.py # PyTorch Dataset类示例 ├── visualize.py # 可视化图像与标签叠加的工具 └── stats.py # 计算数据集统计信息类别平衡等注意images和masks文件夹下的文件名必须严格一一对应这是所有数据加载逻辑的基础。我们的预处理已经保证了这一点。3.2 关键参数与标签解读标签文件masks中的PNG是单通道的灰度图每个像素的值[0, N]代表其类别。例如一个像素值为15根据我们的类别表它就代表“左上第一前磨牙”。在训练时损失函数如CrossEntropy Loss会直接使用这些整数值。你需要特别关注数据集的类别不平衡问题。背景Class 0的像素数量远远多于任何一颗牙齿。直接训练会导致模型严重偏向于预测背景。因此使用加权交叉熵损失函数或Dice Loss等对类别不平衡不敏感的损失函数是至关重要的。我们在stats.py中提供了计算每个类别像素权重的脚本。3.3 可视化与质量检查在投入训练前强烈建议随机抽样可视化一批数据。使用utils/visualize.py脚本可以将原始X光片与标签掩码以半透明色彩叠加的方式显示出来。检查重点包括对齐是否准确牙齿边缘与标签轮廓是否完美贴合。标注是否完整是否有牙齿被遗漏标注。类别是否正确尤其是相邻牙齿的标签是否区分正确。 检查中如果发现个别问题样本建议将其移出训练集放入一个单独的review文件夹以免影响模型性能。4. 实操如何快速启动你的第一个训练4.1 环境配置与数据加载假设你使用PyTorch环境配置非常简单pip install torch torchvision opencv-python matplotlib scikit-image使用我们提供的dataset_loader.py可以快速创建数据管道import torch from torch.utils.data import DataLoader from utils.dataset_loader import ToothSegmentationDataset import albumentations as A # 推荐用于增强 # 定义训练时的数据增强仅对image进行mask使用相同变换 train_transform A.Compose([ A.HorizontalFlip(p0.5), A.RandomBrightnessContrast(p0.2), A.ElasticTransform(alpha1, sigma50, alpha_affine50, p0.1), # 模拟形变 ]) # 创建Dataset实例 train_dataset ToothSegmentationDataset( img_dirpath/to/images, mask_dirpath/to/masks, split_filepath/to/splits/train.txt, transformtrain_transform ) # 创建DataLoader train_loader DataLoader(train_dataset, batch_size8, shuffleTrue, num_workers4, pin_memoryTrue)ToothSegmentationDataset类内部会自动完成图像读取、归一化使用预计算的均值和标准差、以及应用你定义的数据增强。4.2 模型选择与训练配置对于牙齿分割U-Net及其变体如Attention U-Net, U-Net是经过验证的、效果出色的基准模型。DeepLabv3在捕获多尺度上下文信息方面也有优势。一个简单的训练循环框架如下import torch.nn as nn import torch.optim as optim # 假设你已定义好模型 model model UNet(n_channels1, n_classes33) # 1个输入通道(灰度)33个输出类别含背景 # 使用组合损失函数是常见技巧 criterion1 nn.CrossEntropyLoss(weightclass_weights) # 加权CE Loss criterion2 DiceLoss() # 来自segmentation_models_pytorch等库 optimizer optim.Adam(model.parameters(), lr1e-4) for epoch in range(num_epochs): model.train() for images, masks in train_loader: images images.cuda() masks masks.long().cuda() # 确保mask是长整型 outputs model(images) loss_ce criterion1(outputs, masks) loss_dice criterion2(outputs, masks) loss loss_ce loss_dice # 组合损失 optimizer.zero_grad() loss.backward() optimizer.step() # ... 每个epoch后在验证集上评估 ...这里的关键是class_weights你需要根据数据集中每个类别的像素频率来计算权重给予像素数少的牙齿类别更高的权重。4.3 评估指标与模型选择不要只看训练损失。医疗分割常用的评估指标包括Dice系数衡量预测区域与真实区域的重叠度对医学分割非常敏感。IoU交并比与Dice类似。每类别的精确度、召回率特别是对于你关心的特定牙齿或种植体类别。 在验证集上监控这些指标选择表现最好的模型。早停法Early Stopping是防止过拟合的有效手段。5. 常见问题、避坑指南与效果优化5.1 数据层面常见问题类别极端不平衡导致模型不学小物体现象模型预测结果几乎全是背景牙齿区域完全丢失。解决这是最关键的一步。务必使用加权交叉熵损失或Focal Loss。计算权重时可以取每个类别像素频率的倒数或者使用sqrt(frequency)来平滑。同时可以在数据增强中针对性地对包含小类别如特定牙齿的图像块进行过采样。图像对比度差异大现象来自不同设备或曝光条件的X光片整体亮度和对比度不同影响模型泛化。解决我们预处理中的CLAHE和Z-Score标准化已经很大程度上解决了这个问题。如果仍有问题可以考虑在数据增强中加入更大幅度的RandomGamma或RandomBrightnessContrast让模型学会适应各种对比度。牙齿边缘模糊不清现象预测的牙齿边界粗糙、锯齿状或存在毛刺。解决在损失函数中加入边界损失例如专门计算预测边界和真实边界像素的损失。也可以使用条件随机场作为后处理步骤来平滑边缘但会增加推理时间。5.2 模型训练与调参心得学习率与优化器医疗图像分割任务通常需要精细调参。Adam优化器搭配一个ReduceLROnPlateau或CosineAnnealingLR的学习率调度器是不错的起点。初始学习率可以从1e-4或3e-4开始尝试。批量大小的选择由于图像尺寸较大512x512在消费级显卡上批量大小可能只能设为2或4。可以使用梯度累积技术来模拟更大的批量大小例如每4个迭代步进行一次参数更新以稳定训练。使用预训练骨干网络如果你的模型架构支持如DeepLabv3使用ResNet尽量使用在ImageNet等大型数据集上预训练的骨干网络。即使ImageNet是彩色图像其底层的边缘、纹理特征提取器对医疗灰度图像也大有裨益。你可以冻结骨干网络的前几层只微调后面层。5.3 后处理与结果优化模型直接输出的分割图往往不是最终答案。简单的后处理能大幅提升视觉效果和临床可用性连通域分析预测出的牙齿区域可能是离散的点或几个小区域。使用cv2.connectedComponentsWithStats可以找到每个独立的连通域然后根据面积阈值过滤掉太小的噪声点可能是预测错误。形态学操作使用cv2.morphologyEx进行闭运算先膨胀后腐蚀可以填充牙齿内部的小孔洞进行开运算先腐蚀后膨胀可以消除边缘的小毛刺。这是提升分割结果“整洁度”的快速有效方法。轮廓平滑获取每个牙齿的轮廓后可以使用cv2.approxPolyDP或样条曲线对轮廓进行平滑使其更符合牙齿的自然形态。5.4 从实验到部署的考量当你在测试集上获得满意的Dice分数后考虑部署时还需注意推理速度U-Net通常比DeepLabv3更快。可以尝试模型轻量化技术如知识蒸馏、剪枝或转换为ONNX格式并用TensorRT加速。输入适应性你的训练数据是512x512且经过特定预处理的。部署时来自新设备的图像可能需要经过完全相同的预处理流水线特别是相同的归一化参数。建议将整个预处理流程缩放、CLAHE、归一化封装成一个函数确保线上线下一致。不确定性估计对于医疗AI给出“不确定”的答案有时比给出一个错误答案更重要。可以研究测试时数据增强或使用贝叶斯神经网络来估计模型预测的不确定性对于低置信度的区域可以提示医生进行人工复核。这个数据集是我们工作的一个阶段性总结希望能为口腔AI领域的研究者和开发者提供一个坚实、便捷的起点。医疗AI的落地漫长而严谨高质量的数据是第一步也是最关键的一步。在使用的过程中你可能会发现新的挑战比如对智齿、畸形牙、重度磨损牙的分割精度问题这正是我们未来可以共同迭代和优化的方向。期待看到基于这个数据集产生的更多创新工作和实际应用。本文还有配套的精品资源点击获取