
简介面向牙齿影像分析与口腔病变检测方向的图像分割数据集适合从事医学图像语义分割、实例分割研究的学习者与算法工程师使用。数据集以labelme格式组织共2616张jpg图片及一一对应的json标注文件压缩包约2.22MB内含1个docx说明文档用于交代标注规范与类别信息。标注涵盖Tooth、Caries、Cavity、Crack、calculus、inflamation共6类各类别标注数量分别为1709、2913、1099、139、1207与620采用labelme 5.5.0以多边形方式勾画部分牙齿未标注但不影响病变检测目标。读者可据此直接打开编辑标注并自行转换为mask、YOLO或COCO格式用于语义分割或实例分割训练快速搭建牙齿病变检测实验流程。目前已有122人学习关注适合作为口腔医学影像分割的练手与验证数据。需注意数据集不对所训练模型或权重文件的精度作任何保证。1. 牙齿分割数据集到底是什么从一张牙片说起拍过牙片的人大概都有过这种体验医生指着屏幕上那张灰蒙蒙的图说这里有问题、那里要处理而你只看到一团深浅不一的影子。牙齿的影像就是这样病灶和正常组织挨得极近边界模糊靠肉眼一处处找既慢又容易漏。牙齿分割数据集说白了就是一批已经由人把「哪里是牙齿、哪里是龋齿、哪里是裂纹」逐块圈好的牙片图专门喂给图像分割模型去学「怎么把病灶从背景里抠出来」。这份资源的核心是一套 2616 张的牙齿与牙齿病变图像分割数据集采用 labelme 格式共 6 个标注类别。它值得搞懂是因为「分割」这件事在牙科影像里不是锦上添花而是把模糊的灰度图变成可量化区域的前提——没有标注好的数据模型连牙齿和龋洞的边界都分不清后面的检测、统计、辅助判断全都无从谈起。对刚接触医学图像分割的人来说它也是一份能直接打开、直接看、直接改的入门样本。2. 为什么病变检测需要这样一份标注数据分割任务的底层逻辑2.1 从「看图说话」到「逐像素归类」普通人看牙片是看图说话模型看牙片是逐像素归类。图像分割要回答的问题很具体这张图里每一个像素到底属于牙齿、龋齿、龋洞、裂纹、牙结石还是炎症要让它学会回答就得先有人把标准答案写出来。这份数据集里的 2616 个 json 文件就是 2616 份标准答案每个文件记录着对应 jpg 图上被圈出的多边形区域和类别名。打个比方这就像教小孩认水果你不能只告诉他「这是苹果」还得用手指沿着苹果的轮廓描一圈他才知道边界在哪。labelme 的多边形标注干的就是「描边」这件事polygon 一圈下来模型才知道这块区域整体算一个类别而不是零散几个点。2.2 六个类别背后的临床关注点数据集把标注分成 6 类不是随便凑数而是对应了牙科影像里最常被关注的几种情况类别名中文含义标注数量Tooth牙齿1709Caries龋齿2913Cavity龋洞1099Crack裂纹139calculus牙结石1207inflamation炎症620从数量分布能看出一些门道。Caries龋齿标注最多2913 个说明这份数据把龋坏作为主要检测目标Crack裂纹只有 139 个属于长尾类别训练时容易被模型忽略需要额外做类别平衡。Tooth 作为基础类别有 1709 个用来界定牙齿整体轮廓给其他病灶提供位置参照。提示类别数量差异大是医学数据集的常态不是标注偷懒。裂纹本身在影像上就少见且细微数量少反而说明标注是照着真实分布来的。2.3 为什么「部分牙齿没标注」不是缺陷项目正文里有一句容易被误读的说明数据集有部分牙齿没标注。初看像是数据不完整其实这是有意的取舍。这份数据集的分割目的主要是检查病变不是做全口牙齿的完整测绘。一颗牙齿如果没有任何病变标不标它对病变检测的训练目标影响很小反过来如果把精力平均撒在每颗正常牙上标注成本会成倍上升而模型学到的有效信息却没增加多少。通俗地说这就像做体检时重点记录异常项正常项不必逐条写满。理解这一点很关键它决定了你拿到数据后该怎么用把它当病变检测的训练素材而不是当全牙分割的完整金标准。3. labelme 格式怎么理解json 里到底装了什么3.1 一个 json 文件的结构拆解labelme 格式的核心是「一图一 json」。每张 jpg 配一个同名 jsonjson 里记录着这张图上所有标注的形状、类别和坐标点。下面是一个简化后的结构示意字段含义按 labelme 5.5.0 的常见输出整理{ version: 5.5.0, imagePath: sample_001.jpg, imageHeight: 512, imageWidth: 512, shapes: [ { label: Caries, shape_type: polygon, points: [[120, 88], [156, 92], [160, 130], [118, 126]] } ] }shapes是核心数组每个元素代表一个标注对象。label写类别名必须和那 6 个类别对得上shape_type这里是polygon说明用的是多边形框points是按顺序排列的顶点坐标首尾自动闭合围成区域。imagePath指向对应的图片文件imageHeight和imageWidth给出画布尺寸转换格式时要用到。3.2 为什么只给 json 不给 mask很多人第一次接触会问既然做分割为什么不直接给 mask 图原因在于 labelme 的定位是「标注编辑器」不是「训练格式生成器」。json 是中间态保留了可编辑性——你可以用 labelme 打开它改错标、补漏标、调顶点改完再导出。mask 是终态一旦生成就是一张黑白图改起来麻烦。这带来一个实际影响这份数据集拿到手不能直接丢进训练脚本得先做一步格式转换。项目正文也明确说了json 需自己转成 mask、yolo 或 coco 格式才能用于语义分割或实例分割。这一步不是多余而是把「可编辑的标注」变成「模型能吃的张量」的必经环节。3.3 转换时最容易翻车的两个点第一个点是坐标缩放。json 里的 points 是相对原图尺寸的像素坐标如果你训练时把图 resize 成 256×256而原图是 512×512坐标必须同步缩放否则 mask 会和图片错位。第二个点是类别映射。6 个类别名是字符串转 mask 时要映射成 0 到 5 的整数索引映射表一旦写错顺序龋齿可能被当成牙结石训练模型学出来的结果就是玄学。# 类别名到索引的映射顺序必须与训练配置一致 label_map { Tooth: 0, Caries: 1, Cavity: 2, Crack: 3, calculus: 4, inflamation: 5 } # 转换时按 label_map 取值填充 mask未标注区域保持背景值这段映射看着简单却是血泪经验高发区。建议把映射表单独存成配置文件转换脚本和训练脚本都读同一份避免两处各写一遍导致对不上。4. 常见误区与易混概念别把这几件事搅在一起4.1 易混点一语义分割和实例分割为什么容易混两者都叫「分割」输出都像彩色区域图初学者常以为是一回事。怎么区分语义分割只关心「这个像素属于哪一类」同一类别的两颗牙会被涂成同一种颜色不区分个体实例分割还要区分「这是第几颗牙」每颗牙单独一个编号。这份数据集的 polygon 标注本身带个体信息转成 coco 格式可以做实例分割转成 mask 做语义分割取决于你的任务目标。4.2 易混点二标注数量多就等于类别重要为什么容易混看到 Caries 有 2913 个标注就以为龋齿是唯一重点把其他类别当噪声。怎么区分标注数量反映的是数据分布不是任务权重。Crack 只有 139 个恰恰说明它是稀缺且需要专门关注的类别训练时反而要给更高权重或做重采样否则模型会倾向于「全预测成龋齿」来刷高整体准确率。4.3 易混点三labelme 格式和 mask 格式为什么容易混两者都是分割数据的载体文件名又常一起出现。怎么区分labelme 的 json 是「矢量描述」存的是多边形顶点可编辑、可回溯mask 是「栅格结果」存的是逐像素类别值直接可训练但难修改。json 是原料mask 是成品中间隔着一步转换。4.4 易混点四数据集不保证精度等于数据不能用为什么容易混项目正文声明不对训练模型的精度作保证有人读成「这数据质量不行」。怎么区分这句话是责任边界意思是发布方不为你的训练结果背书因为精度还取决于模型结构、超参、划分方式等一堆变量。数据本身提供了准确且合理的标注能不能训出好模型是另一回事两者不能划等号。4.5 易混点五部分未标注等于标注错误为什么容易混打开图发现有些牙齿没圈第一反应是漏标。怎么区分前面说过这是面向病变检测的取舍。判断标准不是「每颗牙都标了吗」而是「病变区域标全了吗」。如果你要做全牙分割这份数据需要你自行补标如果做病变检测未标注的正常牙不影响使用。5. 什么时候该用这份数据、什么时候别用一份边界判断5.1 适合上手的三种场景第一种是牙齿病变检测类任务的起步训练。6 个类别覆盖了龋齿、龋洞、裂纹、牙结石、炎症这几类常见关注点2616 张的规模足够跑通一个分割 pipeline从数据加载、格式转换到训练评估走一遍完整流程。第二种是 labelme 工作流的练手。json 可直接用 labelme 5.5.0 打开编辑适合熟悉「标注—导出—转换」这条链路。第三种是类别不平衡问题的实验素材Crack 的 139 个标注天然构成长尾样本拿来验证重采样或损失函数调整的效果很合适。5.2 不适合硬套的两种情况如果你要做的是全口牙齿的完整分割要求每颗牙都有精确轮廓这份数据会让你失望因为部分正常牙本就没标。如果你需要开箱即用的 mask 或 yolo 标签直接拿来训练也得先自己做转换它给的是 json 原料而非成品标签。另外任何对精度有硬性承诺的场景都不该把责任压在数据集上模型效果得靠自己的训练流程去验证。使用场景是否合适原因病变检测训练合适病变类别标注齐全全牙分割不合适部分正常牙未标注labelme 流程练手合适json 可直接编辑开箱即训需转换仅提供 json无 mask长尾类别实验合适Crack 样本稀缺5.3 一个具体的使用判断例子假设某开发者拿到数据想训一个能标出龋齿位置的模型。合理的做法是先用 labelme 抽查几十个 json确认 Caries 的多边形贴合病灶再把 json 批量转成 mask转换时严格按 6 类映射表填值划分训练验证集时注意让 Caries 和 Crack 在两边都有分布别让稀缺类别全落进验证集。跑完第一轮看混淆矩阵如果 Crack 几乎全被误判就回头做类别加权而不是急着换模型。反过来如果这位开发者的目标是给每颗牙编号做正畸分析那这份数据从标注目的上就不匹配硬用只会得到一堆「未标注即背景」的错误监督信号。判断标准始终是你的任务目标和这份数据的标注目的对不对得上。我从踩过的坑里养成了一个习惯每次拿到新数据集先不急着写训练脚本而是随机抽二十张图把 json 用 labelme 打开对着原图逐类看一遍标注边界和类别名确认映射表、确认未标注区域的分布再动手转换。这一步花不了多少时间却能挡掉后面大半的返工。希望帮到你。本文还有配套的精品资源点击获取