CVC-ColonDB — 结肠镜息肉分割经典基准 AI-Ready Wikipedia | 千方病案医数集

380 帧专家标注结肠镜息肉分割图像,源自 15 段检查序列的单中心经典基准

来源 Computer Vision Center, Universitat Autònoma de Barcelona(CVC-UAB) url: http://mv.cvc.uab.es/projects/colon-qa/cvc-colondb发布时间: 2026-09-07最后更新: 2026-09-07 阅读 6

信息速览

数据集名称CVC-ColonDB — 结肠镜息肉分割经典基准 AI-Ready Wikipedia | 千方病案医数集
数据类型380 帧结肠镜图像,15 段检查序列,574×500 像素,像素级二值息肉 mask,原始版含 1,706 个文件(4 组),研究用途免费获取
规模15 例结肠镜检查(各文献记载 13–15 例不一)
接入方式Computer Vision Center, Universitat Autònoma de Barcelona(CVC-UAB) url: http://mv.cvc.uab.es/projects/colon-qa/cvc-colondb
AI 就绪度

数据集封面

CVC-ColonDB — 结肠镜息肉分割经典基准 AI-Ready Wikipedia


INFOBOX

字段 内容
数据集名称 CVC-ColonDB
英文全称 CVC-ColonDB(Computer Vision Center Colon Database)
别名/简称 ColonDB、Colon-DB、CVC-Colon-DB(CVC colon-qa 项目子库)
疾病分类 ICD-11 2E92.0 结肠良性肿瘤(含腺瘤性息肉)
SNOMED CT 44441009(Polyp of colon,结肠息肉)
数据模态 白光结肠镜 2D 图像(RGB)
AI 任务类型 息肉二值语义分割(历史用途含息肉检测与定位)
样本总数 社区测试镜像 380 帧;原始 CVC 版标注 300 帧
数据大小 原始版共 1,706 个文件(BMP 图像 + 息肉 mask + 非信息区域 mask + 轮廓 mask);标准测试协议打包 4.0 GB(含五数据集)
数据格式 BMP(原始版)/ JPG + PNG 二值 mask(社区镜像)
许可证 研究与教育用途许可(禁止商业用途)
访问级别 开放(研究用途直接下载)
DUO 标签 NPUNCU(非商业、非营利研究用途)
语言 影像数据(无文本字段,元数据语境为西班牙语/英语)
首发日期 2012(原始 ColonDB);2015 随 WM-DOVA 论文发布像素级标注体系
最后更新 2017-05(EndoScene 扩展标注重发布)
发布机构 巴塞罗那自治大学计算机视觉中心(CVC-UAB),与 Hospital Clinic de Barcelona 合作
官方主页 mv.cvc.uab.es/projects/colon-qa/cvc-colondb
下载地址 CVC 项目页PraNet TestDataset 镜像Zenodo 标准协议包
DOI 数据集本体无 DOI;标准测试协议镜像 DOI 10.5281/zenodo.5579392
引用次数 1,395+(Tajbakhsh et al. 2015 基准论文,Google Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐(3/5)— 图像与 mask 同名对齐、分辨率统一,即取即用;扣分项:无官方划分与数据字典、mask 边界粗糙、无患者元数据、300/380 帧版本混乱
页面状态 published

§0 E-E-A-T 审核声明

医学审核者:[千方病案医学编辑部] 交叉审核:§2 医学背景(ICD-11/SNOMED CT 映射、结直肠癌筛查流行病学、息肉分割临床任务定义)、§7 偏倚分析。

数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CVC-ColonDB 明确限于研究与教育用途、禁止商业用途,图像版权归 Hospital Clinic de Barcelona、标注版权归 CVC。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? CVC-ColonDB(简称 ColonDB)是西班牙巴塞罗那自治大学计算机视觉中心(CVC-UAB)发布的结肠镜息肉图像库。它从 15 段短结肠镜视频中由专家逐帧挑选并手工标注息肉区域,社区广泛使用的测试镜像包含 380 帧 574×500 像素的图像,每帧配一张二值分割 mask——白色代表息肉、黑色代表其余组织。

为什么重要? 息肉分割模型最怕"只在自家训练集上好、换个医院就崩"。ColonDB 因为从未进入主流训练集,恰好成了检验模型"没见过的数据"表现的标准考场:PraNet、SANet、TransFuse、Polyp-PVT 等一整代论文都把在 ColonDB 上的 mDice 当作泛化能力的试金石,模型成绩从早期 U-Net 的 0.512 一路提升到 Polyp-PVT 的 0.808。

我能用它做什么? 如果你训练了一个息肉分割模型(比如用 Kvasir-SEG + CVC-ClinicDB 训练),把模型直接在 ColonDB 380 帧上推理并算 mDice,就能得到一份与数百篇论文可比的泛化成绩单。它也适合做评估协议研究、边界质量分析和鲁棒性压力测试。注意:它不适合作为唯一训练集(380 帧、15 个序列太少),也不支持任何患者级泛化声明。

§1.1 摘要

CVC-ColonDB 由 CVC-UAB 于 2012 年前后建库、2015 年随 WM-DOVA 论文(Bernal et al., Computerized Medical Imaging and Graphics)形成像素级标注体系:专家从 15 段短结肠镜序列中每段选取约 20 帧、剔除视觉相似帧并裁剪无效黑边,手工标注息肉整体覆盖区域,原始版共 1,706 个文件(BMP 原图、息肉 mask、非信息区域 mask、息肉轮廓 mask 四组)。2017 年 Vázquez 等人将其与 CVC-ClinicDB 合并扩展为 EndoScene 基准并补标 lumen、镜面反光与黑边 void 类。2020 年 PraNet 将 380 帧版本打包进 TestDataset,确立了"Kvasir-SEG 900 帧 + CVC-ClinicDB 550 帧训练、ColonDB 380 帧全量零样本测试"的事实协议,此后 ColonDB 成为跨数据集泛化评估的标准站点。技术要点有三:一是它是单类别二值分割,标签体系极简;二是它是单中心数据,泛化天花板天然受限;三是它的 mask 边界相对粗糙,评估时需要边界敏感指标补充。

§1.2 战略价值

维度一:泛化能力的公共标尺。 息肉分割领域自 2020 年起形成"训练看 Kvasir-SEG/CVC-ClinicDB、泛化看 ColonDB/ETIS"的默契分工。一篇模型论文若缺少 ColonDB 零样本成绩,审稿人通常会追问泛化能力。U-Net 在 CVC-ClinicDB 内部测试可达 mDice 0.823,但在 ColonDB 上跌至 0.512——近 38% 的跌幅直观暴露了单中心过拟合风险,这正是 ColonDB 作为"域外考场"的价值:它便宜、免费、格式统一,却能在一小时内给任何模型泼一盆清醒的冷水。

维度二:评估方法学研究的天然样本。 由于 ColonDB 同时存在 300 帧原始版、380 帧社区镜像、与 EndoScene 的 300 帧同源子集等多种形态,加上 ≥5 种并存的社区划分协议,它成为评估一致性审计(如 Metrics or Mirage, arXiv:2607.08203)的典型解剖对象。研究可复现性、划分敏感性与指标选择偏倚的团队,可以把它当作一个"活的反面教材库":同一段数据,不同的记录方式可以造成超过 3 个百分点的 Dice 差异,比多数论文声称的创新幅度还大。

维度三:低成本的鲁棒性压力台。 ColonDB 的低对比度(均值 0.59)、小病灶(面积最低 0.29%)与"几乎不参与任何训练"的生态位,使它天然适合充当鲁棒性压力台:合成扰动实验(白平衡、模糊、血液遮挡)可以在这里暴露模型对光照相关劣化的脆弱性——CUHK 团队的评估显示 PraNet 在 ColonDB 上扰动后错误发现率达 8.56%,且白平衡与模糊是主要错误来源。对部署导向的团队,这类压测的成本极低(380 帧、分钟级推理),却能提前暴露真实镜检环境中的高频失效模式。

§1.3 同类数据集横向对比

数据集 规模(帧) 分辨率(像素) 标注 在生态中的角色
CVC-ColonDB 380(社区镜像)/ 300(原始版) 574×500 息肉二值 mask,专家手工 零样本泛化测试集(几乎不入训练)
Kvasir-SEG(2020) 1,000 332×487 至 1,920×1,072 息肉二值 mask,医生标注验证 主力训练集(PraNet 协议取 900)
CVC-ClinicDB(2015) 612 384×288 息肉二值 mask(EndoScene 版扩展) 主力训练集(PraNet 协议取 550)
EndoScene/CVC-300(2017) 912(=612+300)/ 测试子集 60 384×288 至 574×500 四类标注(息肉/背景/管腔/反光) 扩展测试集;注意与 ColonDB 的 300 帧同源
ETIS-LaribPolypDB(2014) 196 1,225×966 息肉二值 mask 高分辨率困难测试集
PolypGen(2021) 1,537 多种 息肉二值 mask 六中心多源数据,真外部验证用
HyperKvasir(2020) 110,079(仅 348 帧像素级标注) 多种 部分像素级 mask 超大规模未标注池,适合半监督/自监督预训练
Piccolo(2020) 3,433(2,131 白光 + 1,302 NBI) 854×480 至 1,920×1,080 息肉二值 mask,40 名个体 含 NBI 模态,白光+NBI 联合建模用
BKAI-IGH(2022) 1,200(1,000 训练 + 200 测试) 多种 息肉二值 mask(测试 GT 不公开) 亚洲人群外部验证

差异化定位:ColonDB 是家族中"最像考场"的一个——规模最小、分辨率统一、序列结构清晰,牺牲了体量换取了协议一致性;而它与小息肉、低对比度场景的纠缠(面积占比最低至 0.29%)也让它保留了相当的难度。与 HyperKvasir 的"海量未标注"路线和 Piccolo 的"多模态"路线不同,ColonDB 走的是"小而标准"路线:它的全部价值都建立在"所有人都用同一种方式用它"这一默契之上,也因此对协议漂移格外敏感。

§1.4 版本时间轴

时间 版本/事件 关键变化
2012 原始 ColonDB 建库 Bernal 等人构建,15 段序列、专家选帧与 ROI 标注体系成形
2015-07 WM-DOVA 论文发布(CMIG 43:99-111) 像素级标注体系正式随论文公开;小息肉被点名为漏检主因
2015-10 Tajbakhsh et al.(IEEE TMI 35(2):630-644) 首次系统用 ColonDB 300 帧做检测基准:FROC 灵敏度 88.0% @ 0.1 FP/帧
2017-05 EndoScene 基准论文(J. Healthcare Engineering) 与 CVC-ClinicDB 合并为 912 图像;新增 lumen/反光/黑边 void 类标注
2020 PraNet(MICCAI 2020 Oral) 380 帧 TestDataset 镜像确立,成为默认零样本测试协议
2021-2023 Polyp-PVT(CAAI AIR 2023)等 ColonDB mDice 推至 0.808;协议一致性问题开始被系统审计

§1.5 典型应用场景

  1. 零样本泛化评估:模型在 Kvasir-SEG + CVC-ClinicDB 训练后,直接在 ColonDB 380 帧推理,报告 mDice/mIoU 与数百篇论文可比(须注明协议)。
  2. 评估协议与可复现性研究:利用其多种并存的划分与数字记载(300/380 帧、13/15 序列),研究划分敏感性、指标选型与转录错误的影响。
  3. 边界质量与鲁棒性分析:结合粗糙 ROI mask 与合成扰动实验(白平衡、模糊等),量化模型在低对比度场景的边界误差与错误发现率。
  4. 小息肉漏检研究:面积占比低至 0.29% 的样本可用来评估模型对小/扁平病变的召回能力,直击临床漏检痛点。
  5. 教学与课程实验:体量小、下载快、单类别标签,是医学图像分割入门与课堂作业的理想载体。

每个场景的操作要点:场景 1 必须锁定 §5.2 协议与帧清单;场景 2 建议同时报告多种划分下的成绩以量化协议敏感性;场景 3 需要额外实现扰动合成与 EFR 统计;场景 4 务必按面积分层报告召回而非整图均值;场景 5 应提醒学员先跑 §6.1 自检脚本,避免在配对与尺寸上浪费调试时间。


§2 医学背景

§2.1 ICD-11 编码映射

数据集标签/概念 ICD-11 编码 ICD-11 中文名 说明
结肠息肉(mask 前景) 2E92.0 结肠良性肿瘤 腺瘤性息肉属良性肿瘤性病变,分割目标即此类区域
结直肠腺瘤(癌前病变) 2E92.0 结肠良性肿瘤 多数被标注息肉为腺瘤,是"腺瘤-癌"序列的起点
结直肠癌(进展终点) 2B5B.0 结肠恶性肿瘤 息肉检出与切除的临床意义所在
结肠镜检查(操作) —(ICD-11 主体线性化不含操作细目) 结肠镜检查 操作归类见 ICD-11 功能/扩展轴;SNOMED 见 §2.1b

§2.1b SNOMED CT 映射

标签/概念 ICD-11 SNOMED CT 码 术语
结肠息肉 2E92.0 44441009 Polyp of colon(结肠息肉)
结肠镜检查(数据来源操作) 73761001 Colonoscopy(结肠镜检查,操作)
结肠恶性肿瘤 2B5B.0 363406005 Malignant tumour of colon(结肠恶性肿瘤)

映射说明:CVC-ColonDB 为单类别二值 mask,不区分息肉病理亚型(增生性/腺瘤性/锯齿状),因此上表覆盖的是数据集整体所指的病变概念,而非逐帧病理编码;接入下游信息系统时建议以 SNOMED CT 44441009 作为分割输出的顶层概念。

§2.2 疾病简介与流行病学

结直肠癌(CRC)是全球第三大癌症死亡原因,绝大多数 CRC 由腺瘤性息肉经"腺瘤-癌"序列逐步恶变而来,从息肉到癌变通常有数年窗口期——这使结肠镜筛查成为降低 CRC 死亡率的核心手段。Vázquez 等人在 EndoScene 基准论文中指出,CRC 是全球第三大癌症死因,而结肠镜是筛查的首选工具。然而常规结肠镜的息肉漏检率报告为 17%–28%(小息肉与扁平病变为主),另有文献按"癌前腺瘤"口径报告 20%–25% 的漏检率。漏检的直接后果是间隔期癌;而即便检出,息肉边界评估不准也可能影响切除质量。这正是计算辅助的切入点:一个能在镜检中实时高亮息肉并勾画其范围的分割模型,可以同时攻"漏检"与"边界"两个痛点。

临床决策链条上的三个关键环节都与分割技术相关:其一,检出——漏检率高度集中在小息肉与扁平病变,WM-DOVA 论文即以小息肉为主要动机设计其定位方法;其二,勾画——分割结果决定"切多大、从哪下刀",边界误差对应切缘质量;其三,质控——回放标注与腺瘤检出率(ADR)审计需要可复核的病灶定位。CVC-ColonDB 的 380 帧样本涵盖了息肉面积占比 0.29%–63.1%(均值 7.4%)的宽谱分布与 0.28–0.93(均值 0.59)的对比度范围,恰好复制了临床漏检高发的小病灶与低对比场景——这也是它在方法学上比"更大更干净"的数据集更受泛化研究青睐的原因。

流行病学要点 数值 对 AI 建模的含义
CRC 全球死因排位 第三大癌症死因 筛查需求刚性,辅助工具价值高
常规结肠镜息肉漏检率 17%–28%(小/扁平病变为主) 召回率是首要临床指标,而非 Dice
癌前腺瘤漏检率(另一口径) 20%–25% 漏检后果为间隔期癌,代价极高
标注精细度对灵敏度的影响 精确轮廓 99.6% vs 粗 20% 膨胀框 94.84% mask 边界质量直接传导到临床表现

§2.3 临床任务定义

本数据集对应的临床任务链条是"筛查→检出→勾画→切除":

  • 筛查(Screening):在无症状人群中系统寻找息肉,关注灵敏度(息肉级召回),对应模型能力为高召回检测。
  • 检出与定位(Detection/Localization):判断帧内是否存在息肉并定位,ColonDB 历史上首先服务于此(Tajbakhsh 2015 的 FROC 协议)。
  • 分割勾画(Segmentation):像素级勾画息肉范围,服务"切多大、从哪下刀"的切除规划与光学生检,当前主流用法即二值语义分割。
  • 随访质控:分割结果可用于回放标注、腺瘤检出率(ADR)审计等质控场景(需更大规模数据支撑)。

必须强调:mask 标注的是"息肉整体覆盖区域",不区分组织学亚型,也不含 malignancy 分级——分割成绩不能直接外推为病理诊断能力。

临床任务环节 对应 AI 任务 ColonDB 的支撑度 说明
筛查(发现病灶) 检测/定位(历史用法)/分割召回 高(作为召回考场) 380 帧全为息肉帧,无阴性帧,需自配阴性集
切除规划(勾画范围) 二值语义分割 中(区域级参考) mask 为粗糙 ROI,边界结论需谨慎
病理性质判断 分类(腺瘤/增生等) 不支持 无组织学标签
质控回放 视频级跟踪与标注 部分支持 序列信息仅原始版可得,社区镜像无

§2.4 患者人群

维度 内容
来源机构 西班牙巴塞罗那,CVC-UAB 与 Hospital Clinic de Barcelona 合作背景
检查数量 15 段短结肠镜序列(来自 15 次不同检查;个别文献记 13 名患者)
数据类型 白光结肠镜视频帧(仅含息肉帧,无阴性帧)
采集时间 2012 年建库前后的临床检查素材(官方未公布逐例时间)
年龄/性别/种族分布 官方未公布患者人口学信息
地理与设备 单中心(加泰罗尼亚巴塞罗那),内镜设备型号未公开记载

§2.5 临床价值

对临床而言,ColonDB 的价值是间接但结构性的:它是大量分割算法的"泛化体检站",而分割算法最终服务于镜检中的实时病灶高亮与切除边界提示。文献显示标注精细度直接决定模型临床表现——基于精确轮廓 mask 训练的模型灵敏度可达 99.6%,而用粗 20% 的膨胀框退化至 94.84%;这一发现反向凸显了 ColonDB 粗糙 ROI mask 的局限性,也提醒使用者:在这份数据上刷出的分数,距离"实时辅助切除"还有一段以边界质量衡量的路。对研究者而言,它的价值更直接:免费、单类、协议统一,能把"模型是否只会记自家数据"这个问题变成一张 380 帧的试卷。

从证据链角度看,ColonDB 在"算法研发→临床证据"的阶梯中处于第 2-3 级(回顾性公开基准):它能证伪"只会记忆训练分布"的模型,却不能证明任何前瞻性临床收益;ADR 提升、漏诊率下降等终点必须由真实镜检环境的前瞻研究承担。把 ColonDB 成绩写进产品材料时,正确的措辞是"在公开基准 CVC-ColonDB 的跨数据集测试中取得 mDice X",而非任何形式的临床有效性声明。

§2.6 金标准对照

划分 标注方式 标注者 性质
息肉区域(前景) 专家逐帧手工勾画的多边形/像素 mask,覆盖息肉整体区域 CVC 内镜图像分析团队(与临床医生合作) 参考金标准(粗边界 ROI 型)
非信息区域(仅原始版) 手工标出无效区域(黑边等) 同上 辅助标注,社区镜像未携带
息肉轮廓(仅原始版) 手工勾画的边界轮廓线 同上 辅助标注,社区镜像未携带
管腔/镜面反光/黑边 void EndoScene 重标注新增(2017) Vázquez 等人 仅 EndoScene 版本提供

需要把"金标准"三个字放在正确语境里:上表的金标准性质限于"息肉区域指认",属于参考标准而非共识标准——无多标注者独立标注与仲裁流程,也无一致性系数背书。做监督学习时这完全够用;做标注质量研究或法医级边界评估时,应把它降级为"存在已知边界误差的参考",并参考 §7.2 的应对策略。


§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 大小 理由
复现 PraNet/Polyp-PVT 泛化成绩 PraNet TestDataset 380 帧镜像 协议包 4.0 GB(五数据集合包) 与数百篇论文的测试协议逐帧一致,直接可比
研究标注体系/序列结构/边界细节 CVC 官方原始版(300 帧 + 4 组文件) 1,706 个文件(BMP 等) 唯一含非信息区域 mask、轮廓 mask 与序列归组信息的版本
训练+测试混合协议研究 EndoScene/CVC-300 版本 912 图像 提供 lumen/反光/void 四类标签;注意含 ColonDB 300 帧同源数据,勿与 ColonDB 测试混用

§3.1 模态详情

单一模态:白光(White Light)结肠镜 2D 彩色图像。无 CT/MRI/病理切片,无窄带成像(NBI)或染色内镜帧,无视频时序流(帧已从视频抽取、以静态图分发)。每帧统一为 574×500 像素(宽×高,即 PIL 读出的 (500, 574, 3)),已裁剪无效黑边;图像包含结肠镜检查的典型成像挑战:镜面反光、肠壁褶皱遮挡、粪便残渣、液体浑浊与运动模糊。标签为单通道二值 mask,与原图同名配对。

成像挑战 机理 在 ColonDB 中的表现 建模对策
黏膜镜面反光 内镜光源在湿润黏膜上的高光反射 原始 mask 不标反光,计入背景 反光区域损失降权;参考 EndoScene 反光类设计
液体/粪便遮挡 肠道内容物遮蔽视野与病灶 专家选帧时保留部分遮挡场景以增加多样性 遮挡鲁棒性压测;勿在增强中过度模拟
运动模糊 蠕动与镜体移动 与其他帧混杂存在 轻度模糊增强(安全项),测试端禁用随机增强
低对比度 黏膜与息肉色差小 全库平均对比度 0.59(范围 0.28–0.93) 对比度保持类增强慎用;边界感知损失
无效黑边 SD 内镜画幅固有暗角 原始版以非信息 mask 标记,社区镜像无 中心裁剪或 loss ignore(坑点 7)

§3.2 子集样本数

子集 帧数 序列数 说明
社区测试镜像(PraNet TestDataset/CVC-ColonDB) 380 15 默认全量作零样本测试集
原始 CVC 版标注帧 300 15(每段约 20 帧) Tajbakhsh 2015 与 EndoScene 构建所用
EndoScene 中同源部分 300 13 并入 EndoScene 时按 13 序列记载
阴性(无息肉)帧 0 0 不含正常对照帧

子集结构的第一个推论:ColonDB 不支持"特异度/假阳性率"类指标的自洽估计(没有阴性帧),检测类评估需自带阴性集;第二个推论:序列层是唯一合理的"独立实验单元",任何以帧为单元的统计推断都应注明其相关性偏倚。

§3.3 数据格式

组成 原始 CVC 版 社区 380 帧镜像
原始图像 BMP(原始文件组) JPG
息肉 mask 独立组(二值) PNG/JPG 二值图
非信息区域 mask 独立组 未随镜像分发
息肉轮廓 mask 独立组 未随镜像分发
序列归属表 可由文件组织恢复 未随镜像分发(需回溯官方版)
元数据文件

两版格式差异的实操后果:JPG 有损压缩会在 mask 二值边界引入 1-2 px 灰度过渡,读取时以 mask > 127 二值化(§6.3/§6.4 均已内置);BMP 原始版无此问题但体积更大;做像素级边界研究时优先取原始版 BMP,做基准复现时使用社区镜像以保证与论文协议逐帧一致。

§3.4 存储大小

原始版共 1,706 个文件;官方未单独公布 ColonDB 原始包体积。社区分发通常以 Nanni 等人维护的标准协议包(Zenodo,DOI 10.5281/zenodo.5579392)获取,整包 4.0 GB、含 Kvasir-SEG/CVC-ClinicDB/CVC-ColonDB/ETIS/CVC-300 五数据集的 Train/Test 划分;单独的 ColonDB 测试目录约 tens-of-MB 量级。硬件上任何现代笔记本均可全量加载,无需分片。

§3.5 标注方式

人工标注:专家逐帧手工勾画息肉整体覆盖区域(ROI),以白色前景、黑色背景的二值图交付。标注策略为"覆盖息肉全域"而非"贴边精描",因此 mask 边界相对粗糙;原始版另附非信息区域 mask 与轮廓 mask 两个辅助图层。2017 年 EndoScene 重标注在此基础上为同源帧补标 lumen、镜面反光与黑边 void 类,形成四类语义,侧面证实了原始 ColonDB mask 将这些区域一律计入背景。

标注工作流可由官方描述与文献追溯复原:

  1. 序列级筛选:从 15 段检查视频中确认含息肉的序列段;
  2. 帧级选样:每段选取约 20 帧,剔除视角相近的冗余帧,保证帧间呈显著不同视角;
  3. 裁剪处理:去除图像四周无效黑边(非功能区域);
  4. ROI 勾画:手工勾画覆盖息肉整体的闭合区域,导出二值 mask;
  5. 辅助图层(仅原始版):补充非信息区域 mask 与息肉轮廓 mask;
  6. 发布与扩展(2017):同源帧并入 EndoScene,补四类语义标注。

该工作流解释了两个常被误读的现象:其一,"每段约 20 帧"意味着同序列帧高度相关(坑点 5);其二,选帧阶段的"最大化视觉差异"策略使 ColonDB 的帧间多样性高于同等帧数的随机抽样——380 帧的信息量大于其数字表象。

§3.6 标注者资质与一致性

标注由 CVC 的内镜图像分析研究团队完成,该团队与 Hospital Clinic de Barcelona 的消化内镜医生长期合作(WM-DOVA 论文作者横跨两个机构,含内镜 Unit 的 Gloria Fernández-Esparrach 等)。官方未公布标注者人数、资质层级与标注者间一致性统计(如 IoU/Kappa);同类 CVC 数据库的标注经医学专家验证,但 ColonDB 的逐帧一致性数字不可得,使用时应将其 mask 视为"单团队参考标准"而非"多专家共识金标准"。

§3.7 采集周期

素材来自 15 段独立的短结肠镜检查视频,建库于 2012 年前后(系统综述记 Bernal et al. 2012),2015 年随 WM-DOVA 论文形成公开标注体系。官方未公布逐例检查日期,temporalCoverage 仅能界定为 2012–2017(至 EndoScene 扩展标注重发布)。

§3.8 地域覆盖

单中心:西班牙加泰罗尼亚自治区巴塞罗那(Hospital Clinic de Barcelona 系检查素材,CVC-UAB 标注发布)。无多中心、多国家分布;任何跨人群、跨设备的泛化推断都不能由本数据集内部证据支撑。这一点与 PolypGen(英国/意大利/法国/埃及/挪威六中心)形成鲜明对照——后者才是多中心泛化命题的正解,ColonDB 回答的是"换一组序列表现如何"而非"换一家医院表现如何"。

§3.9 设备规格

官方文档未公布内镜主机、镜体型号与厂商信息。可确认的成像规格仅有:白光照明、2D 彩色、统一 574×500 像素、经黑边裁剪。如需设备元数据用于漂移分析,只能联系 CVC 申请或依赖同类文献的近似描述——这是该数据集 DAIMS 评分中"设备记录"失分的原因。

§3.10 深度溯源链

环节 主体 可追溯性
图像采集 Hospital Clinic 系内镜检查(西班牙巴塞罗那) 无逐例记录公开
序列抽取与选帧 CVC-UAB 团队(每段约 20 帧、剔除相似帧、裁黑边) 原始版文件组织可部分恢复
像素标注 CVC 标注团队(与临床医生合作) 无逐帧标注者记录
论文发布 WM-DOVA(2015, CMIG)+ Vázquez(2017, J. Healthcare Eng.) DOI/PMCID 可查
社区协议化 PraNet(2020, MICCAI)TestDataset 380 帧 GitHub README 可查
协议存档 Nanni et al. Zenodo 包(4.0 GB) DOI 10.5281/zenodo.5579392

溯源链的薄弱点集中在采集与标注两端:无逐例记录、无标注者记录,意味着任何依赖"哪帧来自哪位患者"的深度分析都必须联系发布方。相比之下,协议链(2015→2017→2020→Zenodo 存档)文档完备,这也是 ColonDB 能成为公共考场的基础。


§4 数据结构

§4.0 目录树

社区标准镜像(PraNet TestDataset,推荐用于基准复现):

TestDataset/                      # PraNet 协议测试包根目录
└── CVC-ColonDB/                  # ColonDB 测试子集(380 帧,全量作测试)
    ├── images/                   # 380 张 .jpg 白光内镜图(574×500×3)
    │   ├── 1.jpg
    │   ├── 2.jpg
    │   └── ...
    └── masks/                    # 380 张二值 mask,与 images/ 同名配对
        ├── 1.png                 # 白=息肉,黑=背景
        ├── 2.png
        └── ...

CVC 官方原始版(研究标注体系时使用):

CVC-ColonDB-original/             # 原始版:15 段序列、300 帧标注、1,706 个文件
├── original/                     # BMP 原始图像(按序列组织)
│   ├── sequence01/
│   │   ├── frame_001.bmp
│   │   └── ...
│   └── ...
├── polyp_masks/                  # 息肉 ROI 二值 mask(白=息肉)
├── non_informative_masks/        # 非信息区域 mask(黑边等无效区)
└── contour_masks/                # 息肉轮廓线 mask

§4.1 DAIMS 字段字典

字段 类型 说明 示例值 AI 用途 观测误差/注意 信息性缺失编码 取值范围
frame_id string 帧标识(社区镜像=文件名;原始版=帧号+序列) 1.jpg 主键、配对与去重 镜像版无序列前缀,勿当独立患者 1–380
image uint8[500,574,3] 白光内镜 RGB 图 彩色帧 网络输入 已裁黑边,与 EndoScene 版坐标不同源 0–255
polyp_mask uint8[500,574] 二值息肉 mask,白=息肉全域 255/0 分割监督标签 边界粗糙;黑边/反光计入背景
sequence_id int(仅原始版) 所属检查序列(15 段) 7 序列级划分/泄漏控制 社区镜像缺失,需回溯原始版 缺失=不可得 1–15
non_informative_mask uint8(仅原始版) 无效区域(黑边等) 255=无效 loss ignore 区域 社区镜像未分发 缺失=按全有效处理
contour_mask uint8(仅原始版) 息肉边界轮廓线 单像素线 边界评估参考 粗描线,非精确轮廓 缺失=不可得
exam_id int(可由 sequence 恢复) 检查/患者层级 7 患者级划分 15 检查与 13/15 患者记载不一 缺失=不可得 1–15
分割标签类别 string 固定单类 polyp polyp 类别数=2(前景/背景) 无病理亚型

§4.2 标签分布

单类别二值分割,标签分布即息肉面积占比分布(据系统综述统计):息肉面积占整图 0.29%–63.1%,多数样本落在 0.3%–10%,均值 7.4%。这意味着以逐像素计的前景占比远低于背景(约 1:12 量级),训练混入本数据时 BCE 类损失会被背景主导——这也是社区普遍改用加权 BCE + 加权 IoU(structure loss)的原因之一。数据集不含类别不均衡的"多类"问题,但存在显著的空间不均衡与尺寸长尾。

尺寸层(按息肉面积占比) 文献记载情况 评估含义
<5%(小病灶) 全库最小至 0.29%,属漏检高发层 单独报告召回;临床最敏感层
5%–20%(中病灶) 多数样本分布区间的上延 mDice 主要贡献层
>20%(大病灶) 全库最大至 63.1%,接近半幅画面 易分割层,指标易被拉高

建议在论文中按此三分层重算指标(§6.9 提供 dice_per_size 实现),避免均值掩盖小病灶崩塌。

§4.3 关键统计

统计项 数值 来源
帧/序列 380 帧 / 15 序列(社区镜像) PraNet 论文
帧分辨率 574×500(统一) PraNet 论文
图像对比度 0.28–0.93,均值 0.59 深度学习息肉分割综述(arXiv:2401.11734)
息肉面积占比 0.29%–63.1%,均值 7.4% 同上
病变类别数 1(polyp) 数据集定义
每序列帧数(原始版选帧策略) 约 20 帧/序列,剔除相似帧 系统综述(10.1007/S10462-023-10621-1)
阴性(无息肉)帧 0 帧 数据集定义
病变类别数 1(polyp),无病理亚型 数据集定义
官方数据字典/划分文件 均无 官方项目页

§4.4 数据层级

数据层级为:患者(约 13–15 名,官方记载不一)→ 检查(15 次,与序列基本一一对应)→ 序列(15 段短视频)→ 帧(300 原始版/380 社区镜像)。社区镜像只保留了帧层,序列与检查层级需回溯原始版恢复;由于每段序列内约 20 帧高度相关,“帧数 ≠ 独立样本数”,有效独立样本量以序列层计只有 15。这一层级信息在 §5.3 泄漏风险与 §6.5 坑点 5 中直接决定评估设计。

患者(约 13–15 名)
└── 结肠镜检查(15 次,≈ 1 检查/序列)
    └── 序列(15 段短视频,每段约 20 帧)
        └── 帧(原始版 300 帧 / 社区镜像 380 帧)  ← 唯一被社区镜像保留的层级

§4.5 缺失值与信息性缺失

缺失项 范围 是否信息性 处理建议
患者人口学(年龄/性别等) 全体 否(根本未采集分发) 不可插补;公平性分析需外部数据
序列/检查归属(社区镜像) 380 帧全量 是(镜像裁剪所致) 回溯原始版或按文件名区间推断,谨慎标注
内镜设备元数据 全体 联系发布方或视作同设备批次
非信息区域 mask(社区镜像) 380 帧全量 是(版本差异) 自行检测黑边或在 loss 中 ignore 边缘带
病理亚型/恶性程度 全体 数据集设计不含;勿做组织学推断

§5 划分与使用建议

§5.1 官方划分

CVC 官方未发布 train/val/test 划分;原始版按序列组织、社区镜像按帧平铺。数据集在生态中的默认角色是"测试集":PraNet 协议明确写道"CVC-ColonDB 的全部 380 帧用作测试集",不参与训练。

§5.2 社区惯例划分

自 2020 年 PraNet 起固化的标准协议如下(由 Nanni 等人维护的 Zenodo 包存档):

角色 数据集 帧数
训练 Kvasir-SEG(训练部分) 900
训练 CVC-ClinicDB(训练部分) 550
测试 Kvasir-SEG(测试部分) 100
测试 CVC-ClinicDB(测试部分) 62
测试 CVC-ColonDB 380(全量)
测试 ETIS-LaribPolypDB 196(全量)
测试 CVC-300(EndoScene 测试子集) 60

注意:至少五种不兼容的划分协议在文献中并存(审计论文 Metrics or Mirage 记载),仅划分选择即可造成超过 3 个百分点的 Dice 差异;引用他人数字前必须核对协议。

社区协议的隐含约定也值得写进你的实验记录:Kvasir-SEG 的 900/100 划分与 CVC-ClinicDB 的 550/62 划分由 PraNet 论文固化、帧清单以 Zenodo 包存档;EndoScene 只取其 60 帧测试子集(因训练集 550 帧与 ClinicDB 重叠);ColonDB 与 ETIS 永远全量作测试。任何偏离——多加几帧、换一种随机种子重新划分——都构成新协议,必须重新起名并单独报告,而不是默认继续沿用旧榜单。

§5.3 泄漏风险(重点)

ColonDB 的泄漏风险集中在三条路径:

  1. EndoScene 同源路径:EndoScene/CVC-300 = CVC-ClinicDB(612) + ColonDB 同源 300 帧。凡在 EndoScene(或其训练划分)上训练、再在 ColonDB 上"泛化"报告的工作,至少有 300/380 帧是模型见过的——这不是近似泄漏,是逐帧重叠。
  2. 混训路径:一些工作把 ColonDB 帧混入大规模混训池后再在同一数据上报告成绩;此时 ColonDB 数字衡量的是"记忆"而非泛化,与其他论文的零样本数字不可同表比较。
  3. 帧级随机划分路径:若有人对 ColonDB 自做随机 train/test 划分,同序列约 20 帧会被分到两侧(PraNet 时代的 ClinicDB/ETIS 已被实证存在此类泄漏),成绩系统性虚高。

§5.4 划分策略建议

  • 复现基准:严格使用 PraNet TestDataset 的 380 帧全量测试 + 1,450 帧固定训练集,论文中显式写明协议与数据来源版本。
  • 自定义研究:若必须自划,按序列(sequence_id)切分而非按帧; ColonDB 仅 15 个序列,建议留一序列法(leave-one-sequence-out)并报告跨折方差。
  • 训练用途:不建议把 ColonDB 当主训练集;若纳入混训,务必从测试角色中除名并如实声明。

§5.5 交叉验证建议

15 个序列支持 15 折留一序列交叉验证以估计序列级方差;但更常见的做法是把 ColonDB 完全保留在训练之外,将交叉验证放在 Kvasir-SEG/CVC-ClinicDB 上进行,ColonDB 只做终测。无论哪种,都应报告均值 ± 标准差并做显著性检验——审计显示 26/27 篇论文缺少显著性检验,近并列的排名会在不同随机划分下反转。

若选择在 ColonDB 内部做留一序列 CV(仅限方法学研究、不与零样本榜单混排),有两点纪律:其一,每折的验证序列整体移出训练,包括其全部约 20 帧;其二,报告 15 折的逐折 mDice 分布(箱线图优于均值),因为单序列波动可达两位数百分点——这本身就是对"380 帧均值指标"过度稳定的最好揭示。

§5.6 外部验证建议

把 ColonDB 当作"外部考场"时,它衡量的是"对巴塞罗那单中心白光内镜的零样本迁移"。若要声称临床泛化,应追加六中心 PolypGen、越南 BKAI-IGH 等真正多中心数据;审计发现 27 篇论文中仅 1 篇(TransNetR)做了真实多中心外部验证,其余 21 篇只在五个老基准的子集上循环测试——建议不要重复这一模式。

§5.7 协议速查决策表

你要做的事 用哪个划分 报什么 红线
复现论文成绩 PraNet TestDataset 原清单(380 帧全测) mDice/mIoU + 评测器名称 勿增删帧;注明 Matlab/Python 评测器
提出新模型 同上 + 5 种子均值±标准差 补 recall/HD95 + 显著性检验 勿只报单次 run
声称零样本泛化 严格 1,450 帧固定训练集 明确"ColonDB 未参与训练" 训练集含 EndoScene/CVC-300 即除名
训练数据扩充研究 ColonDB 并入训练池 改称"混合训练"成绩 从"unseen"榜单中除名
边界质量研究 原始版(含轮廓 mask) HD95/NSD + 边界带分层 注明 ROI mask 的标注误差下限
序列级泛化研究 原始版(恢复 sequence_id) 留一序列 CV + bootstrap CI 勿做帧级随机划分

该表可作为团队内部评审的 checklist:任何提交的 ColonDB 实验报告,先问四个问题——训练集里有没有 ColonDB 或 EndoScene?评测器是哪个实现?报告了 recall 与边界指标吗?做显著性检验了吗?四问全部过关才进入讨论。


§6 AI 就绪指南

§6.0 云端快速启动

无需申请审核即可在本地/Colab 完成。两条路:其一,从 Nanni 等人的 Zenodo 协议包(4.0 GB,DOI 10.5281/zenodo.5579392)解包获得与 PraNet 论文一致的 TestDataset;其二,从 PraNet 官方仓库 README 给出的 OneDrive/Google Drive 链接下载 TestDataset(含 CVC-ColonDB 380 帧)。Colab 免费 GPU 即可完成 380 帧全量推理与指标计算。

三步跑通:第一步 wget 下载 Zenodo 包并解压至 data_root/;第二步运行 §6.1 自检脚本确认 380 对文件配对与尺寸;第三步加载 §8.1 任一模型的官方权重(如 Polyp-PVT 发布的预训练模型)在 ColonDB 目录上推理,用 §6.9 指标代码算 mDice。全程不超过半小时;若自检失败,最常见原因是镜像来源不一致(坑点 2)或 images/masks 目录名大小写不符。

§6.1 快速上手

下面的脚本假设目录结构为 data_root/TestDataset/CVC-ColonDB/{images,masks}(PraNet TestDataset 解压后的相对路径,data_root 即 TestDataset 的上级目录),最小可用子集就是该目录下的全部 380 对图像与 mask。代码先做完整性自检:帧数、分辨率、配对与二值性。

from pathlib import Path
from PIL import Image
import numpy as np

data_root = Path("data_root")          # = TestDataset 的上级目录
img_dir = data_root / "TestDataset" / "CVC-ColonDB" / "images"
msk_dir = data_root / "TestDataset" / "CVC-ColonDB" / "masks"

imgs, msks = sorted(img_dir.glob("*.jpg")), sorted(msk_dir.glob("*.png"))
assert len(imgs) == len(msks) == 380, f"帧数异常: {len(imgs)}/{len(msks)}"

for p_img, p_msk in zip(imgs, msks):
    assert p_img.stem == p_msk.stem, f"配对错误: {p_img.name} vs {p_msk.name}"
    img, msk = Image.open(p_img), Image.open(p_msk)
    assert img.size == (574, 500), f"图像尺寸异常: {img.size}"   # PIL 尺寸为 (W, H)
    m = np.array(msk)
    assert set(np.unique(m)) <= {0, 255}, f"mask 非二值: {p_msk.name}"

print("CVC-ColonDB 380 帧自检通过")

自检通过后,一段最小推理主循环即可出分(模型接口以 PyTorch 为例):

import torch

model = load_your_model()              # 你的分割模型,输入 [B,3,352,352],输出 logits/prob
model.eval()
dices = []
with torch.no_grad():
    for imgs, masks, names in loader:  # loader 见 §6.4
        prob = model(imgs.cuda())      # [B,1,352,352]
        pred = torch.nn.functional.interpolate(
            prob, size=(500, 574), mode="bilinear", align_corners=False)
        pred = (pred.sigmoid().cpu().numpy() > 0.5).astype(np.uint8)
        gt = masks.numpy().astype(np.uint8)
        dices += [dice_score(pred[i, 0], gt[i, 0]) for i in range(len(names))]

print(f"ColonDB mDice = {np.mean(dices):.4f}")   # 对照校准点:U-Net≈0.512, PraNet≈0.709

两个校准点(U-Net 0.512、PraNet 0.709)是评测管线的"标定块":若你的实现跑官方权重得不到这两个数字±0.01,先排查评测器再谈模型——这是审计文献反复强调的实操纪律。

§6.2 数据获取

渠道 内容 体积 门槛
CVC 官方项目页 原始版(BMP + 三类辅助 mask + 序列结构) 1,706 个文件 研究用途直接下载(页面可用性随站点波动)
PraNet GitHub TestDataset 镜像(380 帧)+ 评测工具箱 见链接 研究用途,README 提供网盘链接
Zenodo 协议包 标准训练/测试划分(五数据集) 4.0 GB 直接下载,DOI 存档
# 方式一:Zenodo 标准协议包(含 ColonDB 380 帧测试目录)
wget https://zenodo.org/records/5579392/files/PolypDataset.zip
unzip PolypDataset.zip -d data_root     # 解压后含 TestDataset/CVC-ColonDB/{images,masks}
# 方式二:CVC 官方原始版,请从 mv.cvc.uab.es 项目页按指引下载,遵守研究与教育用途条款

获取注意事项:CVC 系官方链接存在失效记录(有归档论文注明其所列官方链接中"两个已失效",并以打包镜像替代),届时以 Zenodo 存档包与 PraNet 仓库镜像为准;下载后请保存 md5 清单入库(MLOps 要求见 §6.10);分发衍生数据集或论文附录截图时保留 CVC 与 Hospital Clinic 的版权声明。

§6.3 预处理全流程

基准复现的标准预处理极简:缩放到 352×352、归一化、(训练侧)翻转增强;mask 最近邻插值保持二值。以下流水线同时演示黑边检测(防御社区镜像中残留的无效区域)与边界带生成(为坑点 1 的边界评估做准备)。超过 30 行,折叠展示。

<details>
<summary>展开完整预处理代码(约 40 行)</summary>

import numpy as np
import torch
import torch.nn.functional as F

IMG_SIZE = 352  # PraNet/Polyp-PVT 基准统一输入尺寸

def detect_black_border(img: np.ndarray, thr: int = 12) -> tuple:
    """返回有效区域的 (top, bottom, left, right),用于防御残留黑边。"""
    gray = img.mean(axis=2)
    rows, cols = np.where(gray > thr)
    if len(rows) == 0:
        return 0, img.shape[0], 0, img.shape[1]
    return int(rows.min()), int(rows.max()) + 1, int(cols.min()), int(cols.max()) + 1

def preprocess_image(img_pil, img_size: int = IMG_SIZE) -> torch.Tensor:
    x = np.asarray(img_pil.convert("RGB"), dtype=np.float32) / 255.0
    x = (x - np.array([0.485, 0.456, 0.406])) / np.array([0.229, 0.224, 0.225])
    x = torch.from_numpy(x).permute(2, 0, 1).unsqueeze(0)
    return F.interpolate(x, size=(img_size, img_size), mode="bilinear", align_corners=False)

def preprocess_mask(msk_pil, img_size: int = IMG_SIZE) -> torch.Tensor:
    m = np.asarray(msk_pil)
    m = (m > 127).astype(np.float32)            # 二值化,消除压缩噪点
    t = torch.from_numpy(m).unsqueeze(0).unsqueeze(0)
    return F.interpolate(t, size=(img_size, img_size), mode="nearest")

def boundary_band(mask: torch.Tensor, width: int = 5) -> torch.Tensor:
    """用腐蚀-膨胀差集生成边界带,供边界敏感评估/损失加权使用。"""
    k = 2 * width + 1
    kern = torch.ones(1, 1, k, k)
    eroded = F.conv2d(mask, kern, padding=width)
    eroded = (eroded == k * k).float()
    return (mask - eroded).clamp(0, 1)

</details>

要点:与多数论文一致,推理输出再上采样回 574×500 与原尺寸 mask 计算 mDice;若发现输入图四角有纯黑区,先调用 detect_black_border 中心裁剪,并保证训练与测试的裁剪策略一致。

训练侧增强(与 mask 严格同步,随机数共享):

def train_transform(img: Image.Image, msk: Image.Image, size: int = 352):
    """训练用同步增强:翻转 + 小角度旋转;mask 用最近邻保持二值。"""
    if random.random() < 0.5:
        img, msk = img.transpose(Image.FLIP_LEFT_RIGHT), msk.transpose(Image.FLIP_LEFT_RIGHT)
    if random.random() < 0.5:
        img, msk = img.transpose(Image.FLIP_TOP_BOTTOM), msk.transpose(Image.FLIP_TOP_BOTTOM)
    angle = random.uniform(-15, 15)
    img = img.rotate(angle, resample=Image.BILINEAR, expand=False)
    msk = msk.rotate(angle, resample=Image.NEAREST, expand=False)
    return img.resize((size, size), Image.BILINEAR), msk.resize((size, size), Image.NEAREST)

注意刻意缺席的增强项:无亮度/对比度/白平衡抖动(坑点 8),无弹性形变(破坏边界山谷结构),原因见 §6.6 安全/危险对照表。

§6.4 PyTorch DataLoader

完整可运行的 Dataset + DataLoader(约 40 行,折叠展示)。预期目录结构同 §6.1;data_root 拼接关系为 data_root/TestDataset/CVC-ColonDB/{images,masks}

<details>
<summary>展开完整 DataLoader 代码</summary>

import random
from pathlib import Path
from PIL import Image
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader

class ColonDBTest(Dataset):
    """CVC-ColonDB 380 帧测试集:仅确定性变换(缩放+归一化)。"""
    def __init__(self, data_root: str, img_size: int = 352):
        base = Path(data_root) / "TestDataset" / "CVC-ColonDB"
        self.imgs = sorted((base / "images").glob("*.jpg"))
        self.msks = sorted((base / "masks").glob("*.png"))
        assert len(self.imgs) == len(self.msks) == 380
        self.img_size = img_size

    def __len__(self):
        return len(self.imgs)

    def _norm(self, arr: np.ndarray) -> torch.Tensor:
        x = arr.astype(np.float32) / 255.0
        x = (x - np.array([0.485, 0.456, 0.406])) / np.array([0.229, 0.224, 0.225])
        return torch.from_numpy(x).permute(2, 0, 1)

    def __getitem__(self, idx: int):
        img = Image.open(self.imgs[idx]).convert("RGB").resize(
            (self.img_size, self.img_size), Image.BILINEAR)
        msk = Image.open(self.msks[idx]).resize(
            (self.img_size, self.img_size), Image.NEAREST)
        m = (np.asarray(msk) > 127).astype(np.float32)
        return self._norm(np.asarray(img)), torch.from_numpy(m)[None], self.imgs[idx].stem

loader = DataLoader(ColonDBTest("data_root"), batch_size=8,
                    shuffle=False, num_workers=4, pin_memory=True)
for imgs, masks, names in loader:
    # imgs: [B,3,352,352]  masks: [B,1,352,352]  names: list[str]
    pass  # 送入模型推理后,输出上采样回 574×500 与原尺寸 GT 算 mDice

</details>

§6.5 坑点清单(8 个)

# 坑点 分类 一句话概括
1 粗糙 ROI mask 当精细轮廓 标签理解 mask 覆盖息肉全域,边界粗描需评估侧补偿
2 300/380 帧数字迷宫 工程陷阱 版本与分辨率记载混乱,先断言形状再开工
3 EndoScene 同源 300 帧 数据泄漏 在 EndoScene 训练即"见过"ColonDB 大半
4 混训后 unseen 声明失效 评估误用 ≥5 种划分协议并存,裸数字不可比
5 15 序列的帧级 i.i.d. 幻觉 偏倚陷阱 有效独立样本只有 15,CI 需序列级 bootstrap
6 mDice 掩盖漏检与边界失败 评估误用 Dice 0.75 也可漏 36% 息肉、差 118 px 边界
7 黑边/反光无标注 预处理陷阱 社区镜像全部计入背景,需裁剪或 ignore
8 低对比度+小息肉+光照脆弱 偏倚陷阱 白平衡/模糊是 EFR 主要来源,光度增强慎用

⚠️ 坑点 1:mask 是"覆盖全域"的粗糙 ROI,不是精细轮廓(分类:标签理解)

问题:ColonDB 标注目标是"息肉整体覆盖区域"(whole area covering the polyp),边界为粗描而非贴边精绘;EndoScene 重标注甚至专门补了黑边 void 类,反证原始 mask 相当粗。直接把 mask 边界当真值边界训练/评估,会系统性误估边界能力。
症状:预测 mask 比 GT 略"胖"或"瘦"一圈;按像素 Dice 不差但可视化边界抖动明显;换到精细标注数据集(如 ClinicDB 系)成绩虚降。
解决

  1. 简单方法:评估时生成 5 px 边界带(见 §6.3 boundary_band),把边界带从 IoU 统计中单独分层报告,不与内部区域混算。
  2. 进阶方法:训练时对边界带像素降权或忽略:loss = (pixel_loss * (1 - band * w_band)).mean(),避免网络浪费容量拟合粗边界噪声。
  3. SOTA 方法:联合 HD95/NSD@3px 边界指标评估(见坑点 6),并采用边界感知损失(boundary loss)或.active contour 正则;标注精细度对性能的影响已被量化——精确轮廓 mask 训练灵敏度 99.6%,粗 20% 膨胀框降至 94.84%。
    参考ERS 数据集综述(arXiv:2201.08746)Vázquez et al. 2017(PMC5549472)Norouziazad et al. 2026, Front. Med.

⚠️ 坑点 2:300 vs 380 帧、13 vs 15 序列、574×500 vs 500×574 的数字迷宫(分类:工程陷阱)

问题:原始 CVC 版是"15 段视频、300 帧标注(每段约 20 帧)“;PraNet 镜像是"380 帧、15 序列”;Tajbakhsh 2015 记"300 帧、15 个独特息肉";部分论文记"13 名患者";分辨率在各论文里 574×500 与 500×574 混写(宽高约定不同)。照抄任何单一来源的数字都可能出错。
症状:加载后形状断言失败;mask 与图像转置错位(模型输出与 GT 错位 90°,mDice 掉到 0.1 量级);论文间样本数对不上账。
解决

  1. 简单方法:加载后断言 img.size == (574, 500)(PIL 返回 (W, H)),mask 用 np.asarray 得到 (500, 574),全程以 H×W 记忆。
  2. 进阶方法:在数据卡/README 固化版本描述——“PraNet TestDataset 380 帧镜像(2020 打包)”,并将配对检查写入 Dataset 构造函数(见 §6.4 断言)。
  3. SOTA 方法:引用数字时回溯到原始协议存档(Zenodo DOI 10.5281/zenodo.5579392)并注明"截至日期";审计显示二手表格转录错误真实存在(SANet ColonDB 0.753 被综述误抄为 0.752)。
    参考PraNet(arXiv:2006.11392)Tajbakhsh et al. 2015Metrics or Mirage(arXiv:2607.08203)

⚠️ 坑点 3:EndoScene/CVC-300 与 ColonDB 的 300 帧同源重叠(分类:数据泄漏)

问题:EndoScene(912 帧)= CVC-ClinicDB(612) + ColonDB 同源 300 帧合并而成。凡在 EndoScene 训练划分上训练、再在 ColonDB 上报告"零样本泛化"的工作,至少 300/380 帧是模型见过的,泛化声明不成立。
症状:与同行相比 ColonDB mDice 异常偏高(尤其在声称"从未见过 ColonDB"的前提下);把 EndoScene 换成 CVC-300 训练后成绩"神奇地"接近内部测试水平。
解决

  1. 简单方法:审计训练集清单——凡出现 EndoSceneCVC-300CVC-T 字样,立即将 ColonDB 从"unseen 测试集"中除名。
  2. 进阶方法:以文件名/像素哈希做跨集重叠检测:对训练集与 ColonDB 各建 set(hashlib.md5(img_bytes).hexdigest()) 后求交集,任何非空交集都要在论文中披露。
  3. SOTA 方法:只采用社区固化协议(PraNet TestDataset 的 1,450 帧训练 + 380 帧测试);PraNet 作者自己也声明"只用 EndoScene 的 CVC-T 测试子集,因为部分 CVC-612 可能在训练中被见过"——同理适用于 ColonDB。
    参考PraNet(arXiv:2006.11392)息肉分割综述(arXiv:2401.11734)Cuza Daniela 学位论文(Unipd)

⚠️ 坑点 4:混训后"unseen"声明失效,成绩不可比(分类:评估误用)

问题:把 Kvasir-SEG、CVC-ClinicDB(甚至 ColonDB 自己)混合后随机划分再测 ColonDB,是另一类常见的协议漂移:它既不是 PraNet 协议的零样本,也不是内部测试,但常被塞进同一张对比表。审计确认 ≥5 种不兼容划分并存,仅划分选择就造成 >3 pp 的 Dice 差异。
症状:自己复现的基线成绩比原论文差/好 3–10 pp;两篇论文"同数据集同指标"的数字对不上;审稿人质疑可比性。
解决

  1. 简单方法:论文表格加"协议"列(训练集构成 + 测试集来源 + 是否零样本),禁止无协议裸数字。
  2. 进阶方法:固定使用 PraNet TestDataset 的帧级清单(Zenodo 包可直接下载),训练/测试不增删一帧;复现时先跑 U-Net(ColonDB mDice ≈ 0.512)与 PraNet(≈ 0.709)校准管线。
  3. SOTA 方法:报告 5 次随机种子的均值 ± 标准差并做显著性检验;引用时用原始论文 PDF 数字而非二手表格(转录错误已见诸审计)。
    参考Metrics or Mirage(arXiv:2607.08203)Zenodo 协议包

⚠️ 坑点 5:380 帧只有 15 个序列,帧级 i.i.d. 假设高估性能(分类:偏倚陷阱)

问题:每段序列约 20 帧来自同一息肉、同一黏膜背景,帧间高度相关。把 380 帧当独立样本,会低估置信区间、高估稳定性;而患者级有效样本量只有 15。
症状:跨折/跨种子成绩波动远小于真实世界;对"新患者新检查"的外推声明缺乏支撑;bootstrap 置信区间异常窄。
解决

  1. 简单方法:报告指标时附"序列级"聚合(先在每序列内平均,再对 15 个序列求均值±标准差)。
  2. 进阶方法:序列级 bootstrap(重采样 15 个序列 1,000 次)给出 95% CI;本数据集所有排名结论都应接受该 CI 检验。
  3. SOTA 方法:需要患者级结论时,换用多中心数据(PolypGen 六中心、BKAI-IGH),或在 ColonDB 原始版中恢复 sequence_id 后做留一序列交叉验证;审计显示 27 篇论文仅 1 篇做了真实多中心外部验证。
    参考ERS 综述(arXiv:2201.08746)FCB-SwinV2 论文(泄漏实证)Metrics or Mirage

⚠️ 坑点 6:mDice 一枝独秀,漏检与边界失败被掩盖(分类:评估误用)

问题:PraNet 时代固化的六指标(mDice/mIoU/Fβw/Sα/Eφmax/MAE)全是区域重叠或像素误差类,25/27 篇论文不报 Hausdorff 距离。审计实测:一个 mDice 0.75 的预测可同时漏掉约 36% 的息肉且 HD95 达 118 px——在临床上分别对应"漏癌"与"切缘错误"。
症状:榜单排名与临床直觉相反;"最佳模型"随指标改变(换 HD95/NSD 后排名反转);小息肉召回从未被单独报告。
解决

  1. 简单方法:在 mDice 之外必报 recall 与 HD95(或 NSD@3px),并对面积 <10% 的样本做尺寸分层报告。
  2. 进阶方法:用统一评分器(如 MetricsReloaded 包)计算全部指标,禁止 Matlab/Python 评测器混用——同一模型在两种评测器下数字可差 0.003(PraNet 0.709 vs 0.712 即有评测实现差异成分)。
  3. SOTA 方法:采用息肉分割报告清单(PSRC):协议 + 统一评分器 + 尺寸分层 + 显著性检验 + 边界指标,五项全报。
    参考Metrics or Mirage(arXiv:2607.08203)Polyp-PVT 官方仓库(Matlab 评测说明)

⚠️ 坑点 7:黑边与镜面反光没有独立标注,默认算背景(分类:预处理陷阱)

问题:原始 ColonDB mask 只标息肉;图像四周的无效黑边、管腔暗区与镜面反光高光在社区镜像里全部计入"背景"。EndoScene 直到 2017 年才补 void/lumen/反光类。用全图算 loss 时,网络被迫把黑边也"分割正确",浪费容量且扭曲指标。
症状:预测图四角出现伪影;MAE 被大量"容易的黑边像素"稀释得偏低;与使用 void 类的方法对比时指标系统性偏移。
解决

  1. 简单方法:预处理时检测并中心裁剪黑边(§6.3 detect_black_border),训练与测试保持同一裁剪策略。
  2. 进阶方法:将黑边像素在 loss 中 ignore(reduction='none' 后乘有效区掩码),指标也只在有效区内计算。
  3. SOTA 方法:如需 void 类监督,改用 EndoScene 四类版本做训练研究,但切勿将其与 ColonDB 测试混用(见坑点 3)。
    参考Vázquez et al. 2017(PMC5549472)ERS 综述

⚠️ 坑点 8:低对比度 + 小息肉 + 光照脆弱,漏检主战场(分类:偏倚陷阱)

问题:ColonDB 平均对比度 0.59(范围 0.28–0.93),息肉面积占比低至 0.29%、均值 7.4%;WM-DOVA 论文本身就指出小息肉是漏检率的主要来源。鲁棒性实验显示 PraNet 在 ColonDB 上扰动后错误发现率(EFR)达 8.56%,对白平衡与模糊类扰动最脆弱——恰是内镜实操中最常见的成像劣化。
症状:整图 mDice 尚可但小息肉样本召回崩塌;把模型搬到不同医院/不同内镜设备后成绩大幅跳水;亮度/白平衡稍变即出现整帧漏检。
解决

  1. 简单方法:按息肉面积分层(<5%、5–20%、>20%)报告召回;对 <5% 层单独设置验收阈值。
  2. 进阶方法:谨慎使用光度增强——固定白平衡相关抖动幅度,避免让网络学到"靠白平衡线索识别病变";用合成扰动(模糊/白平衡/血液遮挡)做压力测试并报告 EFR。
  3. SOTA 方法:引入多尺度/小目标专用设计(Polyp-PVT 的 CIM 模块、相似性聚合 SAM 模块即为此设计,ColonDB mDice 0.808),并在多中心数据(PolypGen)上验证光照鲁棒性。
    参考息肉分割综述(arXiv:2401.11734)CUHK 鲁棒性评估报告WM-DOVA(PMID 25863519)

§6.6 数据增强建议

类别 操作 说明
✅ 安全 随机水平/垂直翻转 息肉无解剖方向先验,社区标配
✅ 安全 小角度旋转(±15°) 模拟镜体姿态变化
✅ 安全 随机裁剪后缩放回 352×352 配合 mask 同步最近邻变换
✅ 安全 轻度高斯噪声/轻微模糊 提升成像噪声鲁棒性
❌ 危险 大幅度亮度/对比度/白平衡抖动 ColonDB 本身低对比(均值 0.59),模型会依赖白平衡线索,实测 EFR 最高(坑点 8)
❌ 危险 弹性形变/网格畸变 息肉形态学特征(边界山谷结构)被破坏,影响边界学习
❌ 危险 灰度反转/通道打乱 内镜红绿色谱有临床语义(血管/反光)
❌ 危险 对测试帧做任何随机增强 测试协议必须确定性(§6.4 的 Dataset 即如此设计)

§6.7 模型推荐

模型 ColonDB mDice(零样本) 适用场景 备注
PraNet(Res2Net-50) 0.709 快速基线/实时原型 ~50 FPS @ 352×352,单卡 24 GB 可训
TransFuse-L 0.781 CNN+Transformer 折中 MICCAI 2021,平衡精度与速度
SANet 0.753 轻量浅注意力 训练开销低
Polyp-PVT(PVTv2-B2) 0.808 当前推荐默认 CFM/CIM/SAM 三模块,小目标友好
SegFormer-B2 0.811 通用分割底座迁移 需自行按协议复训
U-Net 0.512 管线校准下界 用于验证评估实现正确性

模型选型补充说明:表中前五名均为零样本设定(ColonDB 未参与训练);SegFormer 一行取自其按 PraNet 协议复训后的公开对比数字,未随论文原生发布 ColonDB 权重,复现时以官方语义分割代码库 + 协议训练集自行训练为准。U-Net 的价值不在分数而在"标定"——它是检验你评测器是否正确的第一块试金石。

§6.8 硬件需求

任务 最低配置 推荐配置 说明
380 帧推理 + 指标计算 CPU 4 核 / 8 GB RAM 任意 6 GB GPU 全量 <2 分钟
按 PraNet 协议复训(1,450 帧,20 epoch) 1× GPU 11 GB(batch 4) 1× RTX 3090/4090 24 GB(batch 8) PraNet 原文约 0.5 小时/20 epoch(TITAN RTX)
Polyp-PVT 复训 1× GPU 16 GB 1× GPU 24 GB PVTv2-B2 骨干 + 352×352 输入
序列级 bootstrap(1,000 次) CPU 4 核 CPU 8 核 纯指标重算,分钟级

显存估算依据:352×352 输入 + Res2Net/PVTv2 骨干,batch 8 约占 8–14 GB;ColonDB 本体(380 帧 + mask)常驻内存不超过数百 MB,dataloader 缓存策略可选"全部载入内存"——这也是小数据集在调试迭代上的隐藏优势。

§6.9 评估指标代码

import numpy as np

def dice_score(pred: np.ndarray, gt: np.ndarray) -> float:
    """pred/gt: 二值图 {0,1},同一形状。返回单帧 Dice。"""
    inter = np.logical_and(pred, gt).sum()
    denom = pred.sum() + gt.sum()
    return 2.0 * inter / denom if denom > 0 else 1.0

def iou_score(pred: np.ndarray, gt: np.ndarray) -> float:
    inter = np.logical_and(pred, gt).sum()
    union = np.logical_or(pred, gt).sum()
    return inter / union if union > 0 else 1.0

def recall_score(pred: np.ndarray, gt: np.ndarray) -> float:
    """漏检敏感指标:息肉像素被命中的比例(坑点 6 要求必报)。"""
    gt_sum = gt.sum()
    return np.logical_and(pred, gt).sum() / gt_sum if gt_sum > 0 else 1.0

def dice_per_size(df_rows):
    """按息肉面积分层报告:rows 含 (dice, gt_area_ratio)。"""
    import pandas as pd
    df = pd.DataFrame(df_rows, columns=["dice", "area"])
    bins = [0, 0.05, 0.20, 1.0]
    labels = ["<5%", "5-20%", ">20%"]
    df["bin"] = pd.cut(df["area"], bins=bins, labels=labels)
    return df.groupby("bin", observed=True)["dice"].agg(["mean", "count"])

完整六指标(Fβw/Sα/Eφmax/MAE)建议直接使用 PraNet 官方 Matlab 评测工具箱以对齐论文数字;Python 复算时务必注明评测器版本(两种实现的数字不可混表)。

分层评估的操作顺序:先逐帧算 Dice 并记录 gt_area_ratio,再调用 dice_per_size 得到三个尺寸层的均值与样本数,最后对 <5% 层单独设验收线(例如"召回不低于 0.70")。注意 <5% 层在 380 帧中的样本数有限,逐层结论应配合 bootstrap 置信区间一起报告,避免小样本层的大幅波动被误读为模型退化。

补充 HD95(95% Hausdorff 距离)与序列级 bootstrap 的最小实现:

from scipy.ndimage import distance_transform_edt, binary_erosion
import numpy as np

def hausdorff95(pred: np.ndarray, gt: np.ndarray) -> float:
    """95% Hausdorff 距离(像素)。pred/gt: {0,1} 二值数组。"""
    if pred.sum() == 0 or gt.sum() == 0:
        return float("nan")                      # 空预测/空 GT 单独记录
    surface_pred = pred & ~binary_erosion(pred)
    surface_gt = gt & ~binary_erosion(gt)
    d_gt = distance_transform_edt(~gt)
    d_pred = distance_transform_edt(~pred)
    return float(max(np.percentile(d_gt[surface_pred], 95),
                     np.percentile(d_pred[surface_gt], 95)))

def bootstrap_ci_sequence(dices_by_seq, n_boot: int = 1000, seed: int = 0):
    """序列级 bootstrap 95% CI:dices_by_seq 为 {sequence_id: [每帧 dice]}。"""
    rng, seqs = np.random.default_rng(seed), list(dices_by_seq.keys())
    stats = []
    for _ in range(n_boot):
        pick = rng.choice(seqs, size=len(seqs), replace=True)
        stats.append(np.mean([np.mean(dices_by_seq[s]) for s in pick]))
    return float(np.percentile(stats, 2.5)), float(np.percentile(stats, 97.5))

§6.10 MLOps 笔记

  • 数据版本化:以 Zenodo DOI(10.5281/zenodo.5579392)+ 解压后 md5 清单锁定测试集版本;ColonDB 的"版本混乱"(坑点 2)让这一点从加分项变成必做项。
  • 实验追踪:把"训练集构成清单"(900/550 帧来源)与协议名写入每次 run 的 metadata,防止日后把混训实验误标为零样本(坑点 4)。
  • 评测器单例:整个团队固定一个指标实现(或 Matlab 工具箱,或统一 Python 包),在 CI 中用 U-Net=0.512/PraNet=0.709 两点做回归测试。
  • 模型卡必填:报告 ColonDB 成绩时注明"单中心(巴塞罗那)、帧级零样本、n_sequence=15",禁止患者级泛化表述(坑点 5)。
  • 上线前动作:任何接近部署的模型,额外跑 PolypGen/BKAI-IGH 多中心外部验证 + 白平衡/模糊扰动 EFR 压测(坑点 8)。

常见返工错误清单(来自社区讨论与审计文献的高频模式):把 masks/ 读成 RGB 三通道后阈值判断出错(应以单通道读取);测试时误用了 shuffle=True 导致指标与文件名错位;输出 sigmoid 前后各做一次归一化;用 Image.BILINEAR 插值 mask 造成 0.5% 面积膨胀;忘记把输出从 352×352 上采样回 574×500 就与 GT 比较,导致 mDice 系统性偏低约 2–5 个百分点。这六条都能被 §6.1 的自检与 §6.4 的确定性 Dataset 提前拦截。


§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
中心偏倚 全部帧来自巴塞罗那单中心、同一内镜批次 联合多中心数据(PolypGen)训练/评估
选择偏倚 仅含息肉帧、专家刻意挑选视觉差异大的帧,无阴性样本 检测类任务需自配阴性集;勿声明筛查灵敏度
尺寸偏倚 息肉面积均值 7.4%,<10% 小病灶为主但极少 <0.5% 极端样本 尺寸分层评估;小目标模块(Polyp-PVT CIM)
标注偏倚 单团队标注、无一致性统计、边界粗糙 ROI 边界敏感指标 + 边界带降权(坑点 1)
基准过拟合 五个老基准被反复测试,方法可能隐性适配 保留私有留出集;定期引入新基准
版本偏倚 300/380 帧、13/15 序列记载混乱,二手转录错误已实证 回溯原始协议存档,锁定帧清单

§7.2 标注质量

标注为单团队手工 ROI,语义明确(息肉/非息肉)但边界精度中等:原始版附轮廓 mask 说明作者意识到边界信息重要;EndoScene 重标注补充 void/lumen/反光类则是对原始质量的官方承认。无标注者间一致性数字公布;同类 CVC 标注经临床医生合作验证。对边界敏感的应用(切缘规划),建议将本数据集定位为"区域级"而非"边界级"参考标准。

标注质量维度 现状 对使用者的影响 应对
边界精度 粗描 ROI 型,非贴边精绘 边界类指标(HD/NSD)下限被标注本身钳制 报告边界指标时注明"含标注误差下限"
语义完备性 无 void/lumen/反光类(原始版) 黑边与反光被算作背景,污染 loss 中心裁剪 + ignore 区(坑点 7)
一致性可验证性 无标注者数与一致性统计 无法量化标签噪声水平 以固定种子抽帧人工复核抽检
病理深度 无组织学亚型/恶性度 分割模型不能外推病理结论 明确声明任务边界(§2.3)

§7.3 泛化性

场景 失效风险 证据
跨医院/跨设备 高:单中心单设备批次,U-Net 从内部 0.823 跌至 ColonDB 0.512(-37.8%) PraNet 论文 Table 2
小息肉检出 高:面积 <5% 样本召回显著低于整图均值;小息肉是漏检主因 综述统计 + WM-DOVA 论文
光照/白平衡漂移 高:PraNet 在 ColonDB 扰动 EFR 8.56%,白平衡/模糊类最脆弱 CUHK 评估报告
低对比度场景 中高:平均对比度 0.59,为五基准中最低之一 arXiv:2401.11734
病理亚型判别 不可评估:mask 无组织学信息 数据集定义

§7.4 伦理

数据来自临床结肠镜检查的回顾性帧,发布方未公布伦理审批细节与患者知情同意流程(2012 年建库时期的欧洲实践)。数据不含患者标识与临床元数据,属天然脱敏;官方条款限研究/教育用途、禁止商业用途。涉及真实患者影像的二次分发应保留 CVC 与 Hospital Clinic 的版权声明。

对出版合规的实务提示:多数期刊与会议要求注明数据集来源与许可——引用本数据集时同时给出 WM-DOVA 论文引用(官方要求)与许可描述(研究/教育用途)即可满足常见核查;若审稿人追问患者同意,如实答复"数据集发布方未随包公布同意流程,发布主体为 CVC-UAB 与 Hospital Clinic 合作框架",不要代为虚构。训练生成的模型若用于论文图示,应避免展示可辨识的罕见特征帧并遵守原始许可的非商业限制。

§7.5 公平性

患者人口学信息未发布,无法评估年龄/性别/种族亚组性能差异;地域上仅覆盖西班牙单中心人群。若模型仅凭 ColonDB 类单中心数据验证即部署,可能放大对未见于训练分布人群的性能差异——公平性审计需依赖 PolypGen(含英国/意大利/法国/埃及/挪威六中心)等多源数据。此外,帧级评估会掩盖亚组差异:即便总体 mDice 相当,不同病灶位置(乙状结肠弯曲段 vs 横结肠平直段)的召回也可能显著分化,建议在自定义评估中按位置聚类分层——尽管这需要回到原始版恢复序列归属。

§7.6 数据漂移

十年间内镜设备从 SD 向 HD 演进(对比 Kvasir-SEG 最高 1,920×1,072),ColonDB 的 574×500 白光帧代表了旧一代成像;新设备带来的更高清晰度、NBI/染色模式与更宽视野都会构成协变量漂移。用本基准衡量的"泛化",本质是对"旧白光、低对比、单中心"分布的迁移能力;模型更新换代或设备升级后应重新校准,不能沿用历史分数。

漂移类型 表现 监测方式
设备代际漂移 SD 574×500 白光 → 现代 HD 1,920×1,080 新采集帧上复测并对比分数衰减
成像模式漂移 白光 → NBI/染色内镜 Piccolo 类含 NBI 数据上验证
人群与中心漂移 单中心巴塞罗那 → 多中心多人群 PolypGen 六中心外部验证
基准老化漂移 方法代代适配同一 380 帧 保留私有留出集,定期轮换基准

§7.7 DAIMS 24 项评估

# 检查项 状态 说明
1 宽格式 每帧一条记录,图像与 mask 同名配对,可直接建 DataFrame 索引
2 唯一标识 文件名即帧 ID,1–380 无歧义(原始版为序列+帧号复合键)
3 特殊字符 文件名纯 ASCII 数字,无空格/Unicode 陷阱
4 重复行 选帧阶段剔除相似帧,无重复样本
5 缺失编码 ⚠️ mask 全量覆盖;但非信息区域编码仅原始版携带,社区镜像缺失
6 标签标识 单类二值 mask,{0,255} 语义清晰
7 罕见类分组 ⚠️ 小息肉(<5% 面积)为关键亚群但无官方分组元数据,需自行按 mask 面积分箱
8 偏倚评估 官方无偏倚声明;单中心/选择偏倚需研究者自行量化
9 数据字典 无官方字段字典,格式知识散落在论文与社区仓库
10 信息性缺失解释 ⚠️ 非信息 mask/轮廓 mask 的用途仅见于原始论文语境,无正式文档
11 设备记录 内镜型号/厂商/采集参数未公布
12 共线性 无表格协变量,共线性问题不适用
13 编码映射 无 ICD-11/SNOMED 标签映射文件(本 Wiki §2 已补概念层映射)
14 时间戳处理 ⚠️ 无逐帧时间戳;序列时序仅原始版文件组织隐含
15 划分建议 ⚠️ 无官方划分;社区协议固化但需自行组装且版本敏感
16 泄漏讨论 ⚠️ 官方未讨论;文献已有充分实证(EndoScene 同源、序列相关),本 Wiki §5.3 汇总
17 标签分布 ⚠️ 无官方统计;面积占比 0.29%–63.1%(均值 7.4%)来自二手综述
18 测量偏倚 无标注者间一致性数据,标注精度不可量化验证
19 外部验证建议 ⚠️ 数据集本身即外部验证工具,但官方无使用指南;协议陷阱需读审计文献
20 版本记录 无版本号/变更日志;300/380 帧版本混乱即是直接后果
21 预处理脚本 官方无;依赖社区(PraNet/Polyp-PVT 仓库)
22 合规要求 ⚠️ 研究/教育用途、禁商用条款存在但分散且非机器可读
23 多模态对齐 图像-mask 一对一同名对齐,零对齐成本
24 去标识化 影像不含患者标识与临床元数据,天然脱敏

DAIMS 评分:12.5 / 24(✅×8 + ⚠️×9×0.5 + ❌×7×0)

评分解读:该分数刻画的是一个"标注即用、治理缺失"的典型 2012 世代学术数据集:凡涉及像素与配对的工程维度(宽格式、唯一标识、对齐、去标识化)全部满分,因为单类别二值分割的数据形态天然简单;而凡涉及数据治理的维度(数据字典、版本记录、设备记录、一致性统计、官方划分)几乎全空。⚠️ 项集中在"信息存在但需要研究者自证"的地带——划分、泄漏、标签分布都有社区答案但没有官方背书。

与同族数据横向对照可以更清楚地看到分数的含义:CVC-ClinicDB 因临床元数据与官方挑战背书在治理项上略占优,Kvasir-SEG 因官方 train/test 划分文件在"划分建议"项直接满分,而 ColonDB 的独特短板是"版本记录"——它是三者中唯一存在 300/380 双版本且无变更日志的数据集。这不影响它当考场,但显著抬高了"写论文"的尽责成本。

对你意味着什么:如果你只需要一个免费的零样本考场,开箱即用(今天就能跑通 §6.1);如果你要写论文或上生产,必须自己补齐四件事——锁定帧清单版本(Zenodo DOI + md5)、固化协议声明、按序列聚合报 CI、补边界与尺寸分层指标。预期多花一天工程时间;跳过这四步的风险是被审稿人/合规部门用 §6.5 的坑点逐条击中。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
CVC-ColonDB 380 帧(PraNet 协议零样本) CVC-UAB 二值分割 mDice 0.709 / mIoU 0.640(PraNet) 较其 CVC-ClinicDB 内部 0.899 下降约 21.1% 未见域成绩系统性低于内部;SFA 从 0.817 崩至 0.469 说明部分模型泛化极差
CVC-ColonDB 380 帧(TransFuse-L) CVC-UAB 二值分割 mDice 0.781 / mIoU 0.706 较内部 0.942 下降约 17.1% CNN+Transformer 融合可缩小域差距
CVC-ColonDB 380 帧(Polyp-PVT) CVC-UAB 二值分割 mDice 0.808 / mIoU 0.727 较内部 0.937 下降约 13.8% PVT 骨干 + CIM/SAM 对未见域更稳
CVC-ColonDB 380 帧(U-Net) CVC-UAB 二值分割 mDice 0.512 / mIoU 0.444 较内部 0.823 下降约 37.8% 纯 CNN 编解码器域外崩溃最剧烈
CVC-ColonDB 380 帧(SANet) CVC-UAB 二值分割 mDice 0.753 / mIoU 0.670 较内部 0.904 下降约 16.7% 颜色交换增广对域外色彩偏移有针对性缓解
CVC-ColonDB 300 帧(Tajbakhsh 检测系统) ASU+Mayo 息肉检测/定位 FROC 灵敏度 88.0% @ 0.1 FP/帧 其 ASU-Mayo 私有库仅 48% 跨库灵敏度差 40 pp,检测泛化难度直观化
ColonDB 合成扰动鲁棒性 CUHK 项目 扰动下分割 PraNet EFR 8.56%(Dice 阈值 0.25) 白平衡/模糊类错误占比最高 光照相关扰动是 ColonDB 场景的首要脆弱点

矩阵阅读指南:前三行说明"架构越现代,域外跌幅越小但仍超 13%";第四行(U-Net)是反面基准——内部 0.823 的"好模型"域外近乎腰斩,说明内部分数本身不构成泛化证据;第五行切换任务类型(检测),88.0% 与 48.0% 的跨库对比是整个领域"跨库敏感"最早最直观的量化记录;第六行则提醒:即使 mDice 很高的模型,光照扰动下的错误发现率也可能是部署不可接受的量级。


§8 基准性能与生态

§8.1 排行榜

以下为 PraNet 固定协议(Kvasir-SEG 900 + CVC-ClinicDB 550 训练,ColonDB 380 帧全量零样本测试)下的代表性成绩:

排名 模型 mDice / mIoU 年份 关键技术 完整引用 代码
1 SegFormer-B2 0.811 / 0.736 2021 分层 Transformer 编码器 + 轻量 MLP 解码器 Xie et al., 2021, NeurIPS. arXiv:2105.15203 NVlabs/SegFormer
2 Polyp-PVT 0.808 / 0.727 2023 PVTv2 骨干 + CFM/CIM/SAM 三模块 Dong et al., 2023, CAAI Artificial Intelligence Research, 2:9150015. DOI 10.26599/AIR.2023.9150015 DengPingFan/Polyp-PVT
3 TransFuse-L 0.781 / 0.706 2021 CNN 与 Transformer 并行双支 + BiFSP 融合 Zhang, Liu & Hu, 2021, MICCAI 2021, Part I, pp 14–24. DOI 10.1007/978-3-030-87193-2_2 ying-fu/TransFuse
4 SANet 0.753 / 0.670 2021 颜色交换增广 + 浅注意力模块 Wei et al., 2021, MICCAI 2021. arXiv:2108.00882 taozh2017/SANet
5 PraNet 0.709 / 0.640 2020 并行部分解码 + 反向注意力 Fan et al., 2020, MICCAI 2020 (Oral). arXiv:2006.11392 DengPingFan/PraNet
6 U-Net 0.512 / 0.444 2015 编解码 + 跳跃连接 Ronneberger et al., 2015, MICCAI 2015. DOI 10.1007/978-3-319-24574-4_28 无官方仓库(社区复现众多)
7 SFA 0.469 / 0.347 2019 选择性特征聚合 + 区域-边界约束 Fang et al., 2019, MICCAI 2019. arXiv:1908.04202 社区复现

可比性警告:以上数字不可直接横比——不同论文使用不同评测实现(Matlab 工具箱 vs Python),同一模型数字可差 0.003(PraNet 在不同论文中记为 0.709/0.712);审计证实二手转录错误真实存在(SANet 0.753 被误抄为 0.752);且 ≥5 种划分协议并存,仅划分选择即可造成 >3 pp 差异。引用任何数字前回到原始论文 PDF 核对。

§8.2 SOTA 总结与选型建议

ColonDB 上 2020–2023 的进步轨迹(PraNet 0.709 → Polyp-PVT 0.808,约 +10 pp)明显慢于内部测试集(Kvasir-SEG 同期 0.898→0.917,约 +2 pp 但基数更高),印证"域外成绩才是硬骨头"。选型建议:追求协议一致与可复现,选 PraNet/Polyp-PVT(官方协议与权重齐全);追求部署速度,选 SANet 或 PraNet(~50 FPS);追求边界与小病灶质量,选 Polyp-PVT 并追加 HD95/NSD 评估;做方法学研究,务必先跑 U-Net(0.512)校准管线再谈创新。

两点趋势判断值得注意:其一,Transformer 骨干(PVTv2、SegFormer)在 ColonDB 上的优势(0.78–0.81 区间)主要来自小目标与伪装场景的表征能力,而不是对低对比度的根本解决——未见的真实中心仍可能下滑;其二,审计文献提醒"最佳模型随指标改变",若以 HD95 而非 mDice 排名,前排次序会重排——因此选型前先确定临床最关心的失效模式(漏检还是边界),再选指标,最后才看榜单。

§8.3 评测协议

官方协议:输入缩放 352×352,输出上采样回 574×500 与原尺寸 GT 比较;指标为 mDice、mIoU、Fβw、Sα、Eφmax、MAE 六项(PraNet Matlab 工具箱为事实标准)。推荐补充:recall、HD95/NSD@3px、按息肉面积分层(<5%/5–20%/>20%)、5 种子均值±标准差与显著性检验。禁止事项:混用不同评测器数字、无协议声明裸报数字、把混训模型成绩与零样本成绩同表排名。

指标 含义 临床对应 ColonDB 典型值域(PraNet 协议)
mDice 预测与 GT 的逐帧 Dice 均值 病灶勾画总体质量 0.469(SFA)–0.811(SegFormer)
mIoU 交并比均值 重叠一致性 较 mDice 低约 0.07–0.12(如 0.808→0.727)
Fβw 加权 F 度量 局部像素精度修正 0.379–0.803
结构度量 区域结构相似性 0.634–0.872
Eφmax 增强对齐度 全局与局部对齐 0.764–0.924
MAE 像素平均绝对误差 越低越好 0.029–0.094
recall(建议补充) 息肉像素命中率 漏检直接代理 均值掩盖逐层差异,须分层
HD95/NSD@3px(建议补充) 边界距离/表面 Dice 切缘质量 25/27 论文缺失,强烈建议补报
数据集 规模 关系 联合使用建议
Kvasir-SEG 1,000 帧(332×487 至 1,920×1,072) 主训练集(取 900) PraNet 协议标准搭配
CVC-ClinicDB 612 帧(384×288) 主训练集(取 550) 同上;同门姊妹数据集
EndoScene/CVC-300 912 帧 / 测试 60 含 ColonDB 300 同源帧 仅作扩展测试,严禁与 ColonDB 互混
ETIS-LaribPolypDB 196 帧(1,225×966) 平行零样本测试集 高分辨率困难场景补充
PolypGen 1,537 帧、六中心 真多中心外部验证 泛化声明的最终考场
BKAI-IGH 1,200 帧(越南) 亚洲人群外部验证 跨人群公平性检查
HyperKvasir 110,079 帧(348 帧像素标注) 半监督预训练池 大规模未标注内镜数据,预训练后可再在 ColonDB 终测

组合使用示范:主流论文的标准组合是"Kvasir-SEG + CVC-ClinicDB 训练 → ColonDB/ETIS/CVC-300 零样本终测";若要升级证据等级,再加"HyperKvasir 自监督预训练 → 同一协议微调 → ColonDB 终测 + PolypGen 外部验证",即可把"泛化"叙述从单中心扩展到多中心。

§8.5 关键论文 Top 8

  1. Bernal et al., 2015 — WM-DOVA maps for accurate polyp highlighting in colonoscopy: Validation vs. saliency maps from physicians. Computerized Medical Imaging and Graphics, 43:99-111. DOI 10.1016/j.compmedimag.2015.02.007 — CVC 官方指定引用;奠定山谷边界模型与 CVC 数据库标注体系,点名小息肉为漏检主因。
  2. Tajbakhsh, Gurudu & Liang, 2015 — Automated polyp detection in colonoscopy videos using shape and context information. IEEE Transactions on Medical Imaging, 35(2):630-644. DOI 10.1109/TMI.2015.2487997 — 首次系统把 ColonDB 300 帧用为检测基准(88.0% @ 0.1 FP/帧),引用 1,395+。
  3. Vázquez et al., 2017 — A Benchmark for Endoluminal Scene Segmentation of Colonoscopy Images. Journal of Healthcare Engineering, 2017. PMCID PMC5549472 — 将 ColonDB 与 ClinicDB 扩展为 EndoScene 四类标注基准,确立泛化评估范式。
  4. Fan et al., 2020 — PraNet: Parallel Reverse Attention Network for Polyp Segmentation. MICCAI 2020 (Oral). arXiv:2006.11392 — 打包 380 帧 TestDataset,固化全领域沿用至今的零样本协议。
  5. Zhang, Liu & Hu, 2021 — TransFuse: Fusing Transformers and CNNs for Medical Image Segmentation. MICCAI 2021. DOI 10.1007/978-3-030-87193-2_2 — 双支融合路线代表,ColonDB 0.781。
  6. Wei et al., 2021 — Shallow Attention Network for Polyp Segmentation. MICCAI 2021. arXiv:2108.00882 — 颜色交换增广针对内镜色彩偏移,ColonDB 0.753。
  7. Dong et al., 2023 — Polyp-PVT: Polyp Segmentation with Pyramid Vision Transformers. CAAI Artificial Intelligence Research, 2:9150015. DOI 10.26599/AIR.2023.9150015 — 当前 ColonDB 最强开源基线之一(0.808),小目标与伪装模块设计。
  8. Urooj, Ul Abdien & Madan, 2026 — Metrics or Mirage? An Audit of Evaluation Inconsistencies in Colonoscopy Polyp Segmentation Benchmarks. arXiv:2607.08203 — 27 篇论文系统审计:划分不一致、HD 缺失、无显著性检验,ColonDB 是其核心解剖对象。

§8.6 社区活跃度

ColonDB 本体无独立社区(官方页面为静态项目页);其活跃度寄生在息肉分割模型生态上:PraNet 与 Polyp-PVT 的 GitHub 仓库是事实上的协议维护中心(README 持续更新数据链接与评测说明),Nanni 等人在 Zenodo 维护标准协议包(下载量千余次量级)。动辄数百篇论文沿用其协议意味着:新方法发布后数周内即会出现可对标的 ColonDB 数字,但协议漂移问题(§6.5 坑点 4)也随论文数量同步增殖。

参与生态的三条务实路径:其一,复现与对标——从 PraNet 仓库起步,用官方评测工具箱出数字;其二,方法学贡献——划分一致性、指标选型、转录纠错(Metrics or Mirage 即为此类工作的范例)在该领域引用回报很高;其三,数据侧贡献——为原始版恢复序列归属、发布按序列划分的基准变体,都是社区尚未饱和的空白点。

§8.7 生态快照

资源 类型 链接 推荐理由
PraNet 官方仓库 代码+数据镜像 github.com/DengPingFan/PraNet TestDataset 与 Matlab 评测工具箱的事实标准
Polyp-PVT 官方仓库 代码+权重 github.com/DengPingFan/Polyp-PVT 当前推荐默认模型,ColonDB 0.808
Zenodo 协议包 数据存档 zenodo.org/records/5579392 DOI 存档、4.0 GB、五数据集标准划分
CVC colon-qa 项目页 官方主页 mv.cvc.uab.es/projects/colon-qa/cvc-colondb 原始版获取入口
Metrics or Mirage 审计 方法学论文 arxiv.org/abs/2607.08203 使用前必读的协议陷阱清单
EndoScene 基准论文 论文 PMC5549472 理解 ColonDB 标注体系的扩展语境

(Star 数截至 2026-09;ColonDB 相关资源以协议维护为主要活跃形态。)


§9 相关资源与引用

§9.1 官方与社区资源

§9.2 BibTeX 完整引用

@article{bernal2015wmdova,
  title     = {WM-DOVA maps for accurate polyp highlighting in colonoscopy:
               Validation vs. saliency maps from physicians},
  author    = {Bernal, Jorge and S{\'a}nchez, F. Javier and
               Fern{\'a}ndez-Esparrach, Gloria and Gil, Debora and
               Rodr{\'i}guez, Cristina and Vilari{\~n}o, Fernando},
  journal   = {Computerized Medical Imaging and Graphics},
  volume    = {43},
  pages     = {99--111},
  year      = {2015},
  publisher = {Elsevier},
  doi       = {10.1016/j.compmedimag.2015.02.007}
}

@article{tajbakhsh2015automated,
  title   = {Automated Polyp Detection in Colonoscopy Videos Using Shape and
             Context Information},
  author  = {Tajbakhsh, Nima and Gurudu, Suryakanth R. and Liang, Jianming},
  journal = {IEEE Transactions on Medical Imaging},
  volume  = {35},
  number  = {2},
  pages   = {630--644},
  year    = {2015},
  doi     = {10.1109/TMI.2015.2487997}
}

@article{vazquez2017benchmark,
  title   = {A Benchmark for Endoluminal Scene Segmentation of Colonoscopy Images},
  author  = {V{\'a}zquez, David and Bernal, Jorge and S{\'a}nchez, F. Javier and
             Fern{\'a}ndez-Esparrach, Gloria and L{\'o}pez, Antonio M. and
             Romero, Adriana and Drozdzal, Michal and Courville, Aaron},
  journal = {Journal of Healthcare Engineering},
  year    = {2017},
  note    = {PMCID: PMC5549472}
}

@inproceedings{fan2020pranet,
  title     = {PraNet: Parallel Reverse Attention Network for Polyp Segmentation},
  author    = {Fan, Deng-Ping and Ji, Ge-Peng and Zhou, Tao and Chen, Geng and
               Fu, Huazhu and Shen, Jianbing and Shao, Ling},
  booktitle = {Medical Image Computing and Computer Assisted Intervention (MICCAI)},
  year      = {2020},
  note      = {Oral; arXiv:2006.11392}
}

@article{dong2023polypPVT,
  title   = {Polyp-PVT: Polyp Segmentation with Pyramid Vision Transformers},
  author  = {Dong, Bo and Wang, Wenhai and Fan, Deng-Ping and Li, Jinpeng and
             Fu, Huazhu and Shao, Ling},
  journal = {CAAI Artificial Intelligence Research},
  volume  = {2},
  pages   = {9150015},
  year    = {2023},
  doi     = {10.26599/AIR.2023.9150015}
}

@inproceedings{zhang2021transfuse,
  title     = {TransFuse: Fusing Transformers and CNNs for Medical Image Segmentation},
  author    = {Zhang, Yining and Liu, Haofan and Hu, Qiang},
  booktitle = {Medical Image Computing and Computer Assisted Intervention (MICCAI)},
  pages     = {14--24},
  year      = {2021},
  doi       = {10.1007/978-3-030-87193-2_2}
}

@misc{urooj2026metrics,
  title         = {Metrics or Mirage? An Audit of Evaluation Inconsistencies in
                   Colonoscopy Polyp Segmentation Benchmarks},
  author        = {Urooj, Aisha and Ul Abdien, Zain and Madan, Neelu},
  year          = {2026},
  howpublished  = {arXiv:2607.08203}
}

§9.3 引用指南

  • 使用数据本体:引 Bernal et al. 2015(WM-DOVA,CVC 官方指定)与 Tajbakhsh et al. 2015(基准协议源头),并注明所用的版本(300 帧原始版或 380 帧社区镜像)。
  • 沿用 PraNet 协议:引 Fan et al. 2020,并注明"全部 380 帧作零样本测试"。
  • 引用成绩数字:回溯原始论文 PDF,注明协议与评测器;引用二手表格时须交叉核对(已实证存在转录错误)。
  • 协议协议存档:数据分发引用 Zenodo DOI 10.5281/zenodo.5579392。
  • 方法学讨论:涉及划分/指标可比性批评时引 Urooj et al. 2026 审计,避免重复其已记录的争论。
  • 扩展标注讨论:涉及 void/lumen/反光类语义时引 Vázquez et al. 2017(EndoScene 基准)。

§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途
大语言模型(CodeBuddy,fast-model) 本页面的资料整理、初稿撰写与代码示例生成

§10.2 AI 参与范围

AI 负责基于检索到的公开文献进行信息整合、结构化撰写、代码示例与表格生成;全部关键数字(规模、日期、DOI、基准成绩、引用数)均要求溯源至公开来源并写入 FACTS 清单;医学概念映射(ICD-11/SNOMED CT)与临床解释由人工编辑复核。AI 未参与:数字的原创采集、许可条款的法律解释、以及任何对患者人群的主观推断;凡检索无法证实的信息(如设备型号、标注者人数)一律标注为"未公布"而非生成补全。

§10.3 输入来源列表

  1. Bernal et al., 2015, Computerized Medical Imaging and Graphics, 43:99-111. DOI 10.1016/j.compmedimag.2015.02.007
  2. Tajbakhsh, Gurudu & Liang, 2015, IEEE Transactions on Medical Imaging, 35(2):630-644. DOI 10.1109/TMI.2015.2487997
  3. Vázquez et al., 2017, Journal of Healthcare Engineering. PMCID PMC5549472
  4. Fan et al., 2020, MICCAI (Oral). arXiv:2006.11392
  5. Wei et al., 2021, MICCAI. arXiv:2108.00882
  6. Zhang, Liu & Hu, 2021, MICCAI. DOI 10.1007/978-3-030-87193-2_2
  7. Dong et al., 2023, CAAI Artificial Intelligence Research, 2:9150015. DOI 10.26599/AIR.2023.9150015
  8. Urooj, Ul Abdien & Madan, 2026, arXiv:2607.08203
  9. 息肉分割深度学习时代综述, 2024, arXiv:2401.11734
  10. ERS 内镜数据集综述, 2022, arXiv:2201.08746
  11. Nanni et al., 息肉分割标准协议包, Zenodo. DOI 10.5281/zenodo.5579392
  12. Norouziazad et al., 2026, Frontiers in Medicine, 12:1657123. DOI 10.3389/fmed.2025.1657123
  13. CUHK FYP LYU2308 多模型鲁棒性评估报告, 2023–2024
  14. Polyp 分割系统综述, 2024, Artificial Intelligence Review. DOI 10.1007/S10462-023-10621-1
  15. CVC colon-qa 官方项目页(mv.cvc.uab.es)与 PraNet/Polyp-PVT 官方 GitHub README

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED 映射、流行病学) 千方病案医学编辑部 逐条对照 ICD-11/SNOMED 浏览器与原始文献 ✅ 已通过/已验证
§3-§4 数据规格与字段字典 千方病案医学编辑部(数据工程) 对照官方页面、Zenodo 包与论文表格逐项核对 ✅ 已通过/已验证
§5-§6 划分策略、代码与 8 个坑点 千方病案医学编辑部(数据工程) 代码逻辑走查 + 坑点逐条溯源至论文/审计 ✅ 已通过/已验证
§7-§8 质量评估、DAIMS 与排行榜 千方病案医学编辑部 基准数字回溯原始论文 PDF 核对 ✅ 已通过/已验证
§0/§9/§10 免责声明与引用 千方病案医学编辑部 许可条款与引用格式逐条复核 ✅ 已通过/已验证

§10.5 AI 生成章节标注

本页面主体内容由 AI 辅助生成(资料整合、行文与代码),经 §10.4 所列人工审核流程逐模块校验后发布;数字与引用的最终准确性由人工审核者负责。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核日期一致)

页面状态:published(全部内容已完成审核并发布)

返回 AI-Ready 数据集