信息速览

CholecT50 — 腹腔镜手术动作三元组数据集 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | CholecT50(胆囊切除手术动作三元组数据集) |
| 英文全称 | Cholecystectomy Action Triplet Dataset (CholecT50) |
| 别名/简称 | CholecT45(45 视量子集)、CholecT40(40 视频前代)、Surgical Action Triplet Dataset |
| 疾病分类 | 胆石病(ICD-11:DC11 胆石病 / DC11.3 胆囊或胆囊管结石不伴胆囊炎或胆管炎 / DC11.Z 未特指胆石病) |
| SNOMED CT | 74040009 Cholelithiasis(胆石病)/ 274031008 Laparoscopic cholecystectomy(腹腔镜胆囊切除术)(详见 §2.2) |
| 数据模态 | 腹腔镜内窥镜视频(1 fps 帧)+ 逐帧动作三元组标签 + 器械尖端边界框(5 视频) |
| AI 任务类型 | 手术动作三元组识别、三元组检测/定位、器械存在检测、动词/目标识别、手术阶段识别(多标签分类 + 弱监督定位) |
| 样本总数 | 50 段视频 / 约 100,900 帧 / 151,000 个三元组实例 / 约 13,000 个边界框 |
| 数据格式 | PNG 图像帧(854×480×3)+ 每视频 JSON 标注 + TXT 标签映射文件 |
| 许可证 | CC BY-NC-SA 4.0(署名-非商业性使用-相同方式共享) |
| 访问级别 | 申请审核(经官方仓库指引获取,须署名引用,禁止商业用途) |
| DUO 标签 | NCU(非商业),PUB(须引用发表来源) |
| 语言 | 英语(标签术语体系与文档) |
| 首发日期 | 2022-02-12(CholecT45,首个公开发布版) |
| 最后更新 | 2023-02-20(CholecT50 Release 2.0,50 视频完整版) |
| 发布机构 | CAMMA 研究组(ICube, University of Strasbourg, CNRS / IHU Strasbourg,法国) |
| 官方主页 | https://camma.u-strasbg.fr/datasets/ |
| 下载地址 | https://github.com/CAMMA-public/cholect50(经官方仓库下载指引获取) |
| DOI | 10.1016/j.media.2022.102433(关联论文 Rendezvous,数据集本身无独立 DOI) |
| 引用次数 | 137+(Scopus/CrossRef,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方划分、官方 PyTorch/TF 数据加载器与 ivtmetrics 评估库齐备;扣分项:需申请获取、总大小未公开、边界框仅覆盖 5 段视频 |
| 页面状态 | published |
§0 E-E-A-T 审核声明
本页面由千方病案医学编辑部按 AI-Ready Wikipedia 规范撰写,采用 AI 辅助起草加人工交叉审核流程。
- 医学审核者:千方病案医学编辑部,交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、胆囊切除术临床背景)、§7 偏倚分析。
- 数据工程审核者:千方病案医学编辑部交叉审核。医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CholecT50 以 CC BY-NC-SA 4.0 许可发布,禁止商业用途,再分发须采用相同许可并署名引用原始论文;获取与使用细节以 CAMMA 官方数据集页与 GitHub 仓库的现行条款为准。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? CholecT50 是一套腹腔镜胆囊切除术(俗称"打洞取胆"微创手术)的内窥镜录像数据集,由法国斯特拉斯堡的 CAMMA 研究团队整理发布。它包含 50 段真实手术录像,每秒抽取 1 帧共约 100,900 张图像,并由专家外科医生逐帧标注了"哪把器械、在做什么动作、作用在哪个组织"——例如〈抓钳, 分离, 胆囊〉——这样一条完整描述称为一个"动作三元组"。
为什么重要? 传统的手术视频 AI 只能识别"现在处于手术的哪个阶段",粗粒度且缺乏细节。三元组标注把理解精度推进到"器械与组织的具体交互"层面,这是手术室实时智能辅助(如危险操作提醒、自动手术报告)的关键一步。CholecT50 及其前代是这一方向的第一个大规模公开基准,并衍生出 MICCAI 2021/2022 两届国际挑战赛。
我能用它做什么? 训练和评估手术动作三元组识别模型(视频级多标签分类)、弱监督的三元组检测定位模型(5 段测试视频带边界框)、器械存在检测、手术阶段识别等任务;官方提供划分方案、数据加载器与评估指标库,可以开箱即用地复现与对比基准。
§1.1 摘要
CholecT50 由法国斯特拉斯堡大学医院(University Hospital of Strasbourg)的腹腔镜胆囊切除术内窥镜视频构成:45 段来自公开的 Cholec80 数据集,5 段来自其内部超集 Cholec120。视频以 1 fps 抽帧,分辨率 854×480,由专家外科医生逐帧标注〈器械, 动词, 目标〉三元组:6 类器械、10 类动词、15 类目标组合成 100 个三元组类别,共 151,000 个实例;同时提供 7 类手术阶段标签,并为 5 段视频标注了约 13,000 个器械尖端边界框及框-三元组匹配关系。数据集按"可复现性、可及性、彻底性"三原则发布了 5 个官方变体(含 k 折交叉验证划分),并配套 ivtmetrics 评估指标库与 PyTorch/TensorFlow 官方数据加载器。该数据集支撑了 CholecTriplet2021(三元组识别)与 CholecTriplet2022(三元组检测)两届 MICCAI 挑战赛,形成了手术细粒度活动识别的标准评测生态。为保护患者隐私,所有腹腔外视角帧在采集时即替换为纯黑帧。数据以 CC BY-NC-SA 4.0 许可公开发布(CAMMA 数据集页;Nwoye et al., 2022)。
§1.2 战略价值
维度一:任务定义的开创性。 在 CholecT40/45/50 出现之前,手术视频理解主要停留在阶段(phase)与步骤(step)等粗粒度层面。动作三元组〈器械, 动词, 目标〉首次将"工具-组织交互"形式化为可计算的多标签分类问题,同时要求模型完成三个组件的识别与彼此间的数据关联(association),难度显著高于阶段识别——2021 挑战赛上 19 支队伍的最佳 mAP 也仅 38.1%,说明该任务远未解决,为后续数年提供了明确的科研空间(Nwoye et al., 2023)。
维度二:评测生态的完备性。 CholecT50 不只是数据:官方划分论文标准化了训练/验证/测试协议与评估指标(arXiv:2204.05235),ivtmetrics 库统一了 recognition 与 detection 两类任务的度量,官方数据加载器覆盖 PyTorch 与 TensorFlow,官方仓库还持续维护排行榜、数据重叠分析与合并建议。对一个中等规模的数据集而言,这种"数据 + 协议 + 代码 + 排行榜"四位一体的生态在医学影像领域并不多见,显著降低了公平比较的门槛。
维度三:向下游临床价值的延展。 三元组识别的细粒度信息直接服务于手术安全场景:例如对 Calot 三角区"电凝钩-分离-胆囊管"这类关键交互的实时识别,可以支撑危险操作预警与关键安全视野(Critical View of Safety)的自动核查,也可用于术后自动生成手术报告。CholecT50 是通向这些应用的标准训练场。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注粒度 | 与 CholecT50 的差异 |
|---|---|---|---|---|
| CholecT50 | 50 视频 / 约 100,900 帧 | 腹腔镜视频 1 fps | 100 类动作三元组 + 7 阶段 + 5 视频边界框 | 本文主角;细粒度"器械-动词-目标"交互 |
| Cholec80 | 80 视频 | 腹腔镜视频 | 7 手术阶段 + 7 类器械(工具存在) | 粗粒度阶段/器械任务;45 段视频与 CholecT50 同源重叠 |
| CholecT45 | 45 视频 | 腹腔镜视频 1 fps | 同 CholecT50 类别体系 | CholecT50 的首公开发布子集,2021 挑战赛所用 |
| CholecT40 | 40 视频 | 腹腔镜视频 1 fps | 三元组(早期类别体系) | 首个三元组数据集(Tripnet 论文),类别体系未标准化 |
| Endoscapes | 201 视频 | 腹腔镜视频 | 场景分割 + 目标检测 + CVS 评估 | 面向关键安全视野评估而非动作三元组 |
| CholecTrack20 | 20 视频 | 腹腔镜视频 | 多类器械多视角跟踪 + 阶段 | 面向器械轨迹跟踪任务 |
| MultiBypass140 | 140 视频 | 腹腔镜视频 | 阶段 + 步骤 + 术中不良事件 | 换术式(胃旁路),多中心 |
对比要点:若研究目标是"器械在什么组织上做什么",CholecT50 目前仍是类别体系最完整、生态最成熟的公开选择;若目标是阶段识别或器械分割,Cholec80 与 Endoscapes 规模更大,但需注意与 CholecT50 的视频重叠(详见 §5.3 与坑点 1)。
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2020 | CholecT40(Tripnet 论文) | 首个手术动作三元组数据集,40 段视频,早期类别体系 |
| 2022-02-12 | CholecT45 公开发布 | CholecT50 的 45 视频子集(全部来自 Cholec80),首个公开版本,CC BY-NC-SA 4.0 |
| 2022-04 | 官方划分与指标论文 | 发布 5 个官方变体与 ivtmetrics 评估库(arXiv:2204.05235) |
| 2022-04/05 | 官方数据加载器 | PyTorch(2022-04-29)与 TensorFlow v1/v2(2022-05-02)加载器上线 |
| 2022 | CholecTriplet2022 挑战赛 | 任务升级为三元组检测(弱监督定位),5 段测试视频带边界框 |
| 2022-05 | Rendezvous 论文发表 | 数据集主论文见刊 Medical Image Analysis(vol. 78, 102433) |
| 2023-02-20 | CholecT50 Release 2.0 | 完整 50 视频公开发布(二进制存在性标签);边界框标注计划于 Release 3.0 开放 |
| 2025-09-17 | 数据重叠分析发布 | 官方 camma_dataset_overlaps 仓库给出与 Cholec80/Endoscapes 的重叠清单与合并建议 |
§1.5 典型应用场景
- 手术动作三元组识别:输入 1 fps 视频帧序列,输出 100 维多标签向量(哪些三元组正在发生),是数据集的核心任务与两届挑战赛主线。
- 弱监督三元组检测/定位:在仅有视频级标签训练的条件下,定位每个三元组对应的器械(边界框回归 + 类别关联),2022 挑战赛任务。
- 器械存在/动词/目标单独识别:100 类三元组可分解为 6 器械、10 动词、15 目标的独立多标签任务,适合作为中间表征学习。
- 手术阶段识别:利用 7 类阶段标签开展阶段转移建模,可与 Cholec80 阶段任务互验(注意视频重叠)。
- 手术报告生成与上下文感知辅助的前置组件:细粒度动作流可作为手术室实时决策支持、术后结构化报告生成系统的语义底座。
§2 医学背景
§2.1 疾病与手术的 ICD-11 映射
CholecT50 的全部视频均为腹腔镜胆囊切除术,该手术最主要的适应证是症状性胆石病及其并发症。
| 标签/概念 | ICD-11 编码 | ICD-11 中文名称 | 说明 |
|---|---|---|---|
| 胆石病(主要适应证) | DC11 | 胆石病(Cholelithiasis) | 胆囊或胆道内结石形成,症状性者首选胆囊切除术 |
| 无并发症胆囊结石 | DC11.3 | 胆囊或胆囊管结石,不伴胆囊炎或胆管炎 | 择期腹腔镜胆囊切除术的典型适应证 |
| 未特指胆石病 | DC11.Z | 胆石病,未特指 | 病历中未进一步分类时使用 |
§2.2 SNOMED CT 映射
| 标签/概念 | SNOMED CT 码 | 术语名称 | 备注 |
|---|---|---|---|
| 胆石病 | 74040009 | Cholelithiasis (disorder) | 手术主要适应证的疾病概念 |
| 腹腔镜胆囊切除术 | 274031008 | Laparoscopic cholecystectomy (procedure) | 数据集全部 50 段视频所记录的手术操作 |
说明:CholecT50 的标签体系(器械/动词/目标/阶段)为计算机视觉任务定义,本身没有一一对应的 SNOMED CT 编码;上表映射的是数据集所涉及的临床实体(手术操作及其适应证),用于跨术语系统的检索与病历关联。
§2.3 疾病简介与临床任务
胆石病是全球最常见的消化系统疾病之一,腹腔镜胆囊切除术则是治疗症状性胆结石的标准术式,也是全球最常施行外科手术之一(Rendezvous 论文引言,引 Shaffer 2006、Majumder et al. 2020)。手术的关键风险点在于 Calot 三角区的解剖:外科医生需要在此辨认胆囊管与胆囊动脉并分别夹闭离断,同时避免损伤胆总管——胆管损伤是腹腔镜胆囊切除术最严重的并发症之一,因此"关键安全视野"(Critical View of Safety, CVS)的达成与留证已成为被广泛推荐的安全标准。
CholecT50 对应的临床任务链可概括为:
| 临床任务 | 在数据集中的体现 | 潜在用途 |
|---|---|---|
| 术中工作流感知 | 7 类手术阶段标签 | 手术进度自动记录、手术室排程 |
| 工具-组织交互识别 | 100 类动作三元组 | 危险操作实时提醒(如电凝接近胆管) |
| 器械使用监测 | 6 类器械存在标签 | 器械清点、手术技能评估 |
| 解剖结构交互定位 | 15 类目标 + 5 视频边界框 | 关键解剖区域可视化、CVS 辅助核查 |
手术步骤与三元组任务的对应关系:一台标准腹腔镜胆囊切除术的主干步骤(套管置入与气腹、腹腔探查、Calot 三角区暴露、胆囊管与胆囊动脉的辨认夹闭离断、胆囊自肝床剥离、标本装袋取出、冲洗止血)恰好横跨了数据集中绝大多数动词-目标组合——这也是为什么"阶段识别"与"三元组识别"在同一术式上形成粗细两级互补的任务体系。
| 手术主干步骤 | 高频相关动词(示例) | 高频相关目标(示例) |
|---|---|---|
| 套管置入/探查 | grasp、irrigate | 腹壁、网膜 |
| Calot 三角分离 | dissect、grasp | 胆囊管、胆囊动脉、结缔组织 |
| 夹闭离断 | clip、cut | 胆囊管、胆囊动脉 |
| 胆囊剥离 | dissect、coagulate、retract | 胆囊、肝床 |
| 取出与收尾 | aspirate、irrigate | 液体、术野 |
(上表为任务理解辅助,动词/目标的完整官方清单以 label_mapping.txt 为准。)
§2.4 患者人群概况
| 维度 | 情况 |
|---|---|
| 数据来源 | 法国斯特拉斯堡大学医院(University Hospital of Strasbourg) |
| 手术类型 | 腹腔镜胆囊切除术(单一术式,50 例手术) |
| 采集年份 | 官方未逐视频公开(45 段源自 Cholec80 视频库,5 段源自内部 Cholec120) |
| 年龄/性别 | 数据集不含患者人口学元数据(匿名化发布,未公开逐例人口学信息) |
| 人种/地域 | 单中心(法国东北部),人群构成未单独披露 |
| 就医类型 | 择期/急诊构成未公开;术式均为标准腹腔镜胆囊切除 |
⚠️ 需要强调:CholecT50 是"手术视频 + 动作标注"数据集,不包含患者病历、检验或人口学字段。凡需患者层面协变量的研究(如公平性分析)应另行获取配套临床数据或使用包含该类信息的数据集。
§2.5 临床价值定位
手术数据科学(Surgical Data Science)的核心目标是提升手术的可观测性、标准化与安全性。三元组级别的交互识别位于"粗粒度阶段识别"与"像素级场景解析"之间,是当前最具性价比的细粒度语义层:它不需要逐帧密集标注即可训练(视频级弱标签),却能回答"正在对哪个结构做什么操作"这类直接关联手术安全的问题。CholecT50 使这一层的研究具备了可复现的基准,其挑战赛产出的方法已开始向手术安全核查、技能评估与自动报告等下游场景迁移。
§2.6 金标准参考表
| 维度 | 说明 |
|---|---|
| 参考划分 | 官方 5 个变体(详见 §3.0/§5.1);推荐研究用途使用 CholecT50 (cross-val) k 折划分,对比挑战赛成绩使用 CholecT50 (challenge) |
| 标注方式 | 专家外科医生逐帧人工标注(1 fps);5 段视频另有器械尖端边界框 + 框-三元组匹配标注 |
| 标注者 | 多位专家外科医生;官方划分按标注者贡献比例分层抽样以降低标注偏倚(arXiv:2204.05235) |
| 标注性质 | 二元存在性标签(该帧某三元组是否出现);每个三元组实例以 15 项向量编码,包含组件类别与(如有)归一化边界框 |
| 一致性 | 标注者间一致性统计量未见公开报告 |
| 权威基准 | CholecTriplet2021(识别,mAP 4.2%–38.1%)、CholecTriplet2022(检测,box mAP 最高 4.49%)两届挑战赛联合论文 |
补充说明:与多数医学影像数据集"单读者单遍标注"的做法不同,本数据集的标注粒度(一帧多实例、组件级分解、框级匹配)更接近自然语言处理的实体关系标注复杂度。理解这一点有助于合理设定对标注噪声与模型上限的预期——2021 挑战赛全体方法均值仅 23.3%±9.9% mAP,任务难度本身就定义了"金标准"的语义边界。
§3 数据集规格
§3.0 版本抉择矩阵
CholecT50 存在 5 个官方变体,选错变体会使实验结果与文献不可比,务必按下表选择:
| 你的需求 | 推荐版本 | 大小/构成 | 理由 |
|---|---|---|---|
| 训练新模型并评估全部 100 类 | CholecT50 (cross-val) | 50 视频,k 折交叉验证划分 | 官方首推;k 折交替评估覆盖全部类别,规避单一测试集的类缺失 |
| 与 CholecTriplet 挑战赛成绩对比 | CholecT50 (challenge) | 与挑战赛一致的固定划分(5 段测试视频带边界框) | 与 2021/2022 挑战赛论文数字直接可比 |
| 复现 Rendezvous 原论文 | CholecT50(原版) | 35 训练 / 10 验证 / 5 测试 | 与 2022 年 RDV 论文表格逐视频对应 |
| 快速原型 / 资源受限 | CholecT45 (cross-val) | 45 视频,k 折划分 | 略小的数据量;2021 挑战赛即基于 CholecT45 |
| 复现 Tripnet(2020) | CholecT40 | 40 视频,早期类别体系 | 仅用于历史对比;类别体系与 T50 不同,结果不可混用 |
§3.1 模态详情
- 腹腔镜视频帧:原始内窥镜视频按 1 fps 均匀抽帧,每帧以 6 位零填充序号命名(
000000.png),像素分辨率 854×480×3(RGB)。帧按视频分目录存放(videos/VIDxx/)。 - 三元组标签:每视频一个 JSON 文件(
labels/VIDxx.json),内含类别字典与逐帧标注;帧可对应零个、一个或多个三元组实例。 - 阶段标签:7 类手术阶段,逐帧提供,帧内所有实例的阶段标签相同。
- 空间标注:5 段视频(挑战赛测试集)提供器械尖端边界框,坐标按图像宽高归一化,并附带框-三元组匹配标签。
- 脱敏处理:腹腔外视角帧在发布时已整帧替换为纯黑帧(RGB 0,0,0)。
§3.2 各子集样本数
| 子集/变体 | 视频数 | 帧数 | 三元组实例数 | 边界框数 |
|---|---|---|---|---|
| CholecT50(完整版) | 50 | 约 100,900 | 151,000 | 13,000(5 视频) |
| CholecT45(子集) | 45 | 约 90,500 | 137,900 | — |
| CholecT40(前代) | 40 | —(官方论文未随 T50 表格发布) | —(早期体系) | — |
类别构成(CholecT50):100 个三元组类别 = 6 器械 × 10 动词 × 15 目标的合法组合;另有 7 个手术阶段类别(arXiv:2204.05235, Table 1)。
§3.3 数据格式
| 内容 | 格式 | 说明 |
|---|---|---|
| 图像帧 | PNG(854×480×3) | 文件名 6 位零填充序号;黑帧 = 腹腔外视角脱敏 |
| 逐帧标注 | JSON(每视频 1 个) | 含 video/fps/num_frames/categories/annotations/info/licenses 字段 |
| 标签映射 | TXT(label_mapping.txt) |
6 列:三元组 ID → 器械 ID、动词 ID、目标 ID、器械-动词对 ID、器械-目标对 ID |
| 官方加载器 | Python(PyTorch/TF) | 仓库根目录 dataloader_pth.py 与 dataloader_tf.py |
JSON 标注文件内部结构(docs/README-Format.md):
| 顶层字段 | 类型 | 说明 |
|---|---|---|
video |
int | 视频 ID |
fps |
int | 抽帧率(通常为 1) |
num_frames |
int | 抽帧总数 |
categories |
dict | 各任务类别字典:triplet / instrument / verb / target / phase(ID → 类别名) |
annotations |
dict | 帧号 → 该帧三元组实例列表;每实例为 15 项向量(ID、置信度 SC、归一化框 BX/BY/BW/BH、三元组/器械/动词/目标/阶段信息等),-1 表示对应项为空 |
info |
text | 数据集描述:名称、日期、版本、bbox 格式、版权等 |
licenses |
text | 许可证 ID、名称与链接 |
§3.4 存储大小
官方发布渠道未公开数据包总大小。可参考的规模事实:50 个视频目录共约 100,900 张 854×480 PNG 帧(1 fps),标签为轻量 JSON;实际下载体积以官方下载指引(docs/README-Downloads.md)为准。建议磁盘预留按数十 GB 量级规划(含解压与工作副本)。
§3.5 标注方式
| 标注对象 | 方式 | 说明 |
|---|---|---|
| 动作三元组 | 人工逐帧标注 | 专家外科医生在 1 fps 帧序列上标注〈器械,动词,目标〉组合;支持一帧多实例 |
| 器械/动词/目标存在性 | 由三元组分解 | 二进制存在性标签可从三元组标注自动分解得到(dataloader 直接返回四组向量) |
| 手术阶段 | 人工逐帧标注 | 7 类阶段 |
| 器械尖端边界框 | 人工空间标注(仅 5 视频) | 归一化坐标 + 框-三元组匹配标签 |
§3.6 标注者资质与一致性
标注由具有腹腔镜胆囊切除术专业经验的专家外科医生完成。官方划分论文明确说明:训练/验证/测试各划分按标注者贡献比例分配视频,以最小化标注偏倚对模型学习的影响(arXiv:2204.05235, §2.1)。标注者人数、逐标注者工作量与标注者间一致性(如 Cohen’s kappa)未见公开报告,使用时应将"标注风格差异"视为系统性不确定性来源之一。
§3.7 采集周期
官方未公开逐视频采集日期。可确认的时间线索:45 段视频来自 Cholec80 视频库、5 段来自其内部超集 Cholec120(同一术式、同一中心);CholecT45 于 2022-02-12 公开发布,CholecT50 Release 2.0 于 2023-02-20 发布。
§3.8 地域覆盖
单一中心:法国斯特拉斯堡大学医院(法国东北部阿尔萨斯地区)。无多中心数据,泛化性评估须依赖外部数据集(见 §7.3)。
§3.9 设备规格
- 图像分辨率:854×480×3(1 fps 抽帧后)。
- 术式:标准多孔腹腔镜胆囊切除术;具体腹腔镜设备型号、原始帧率与白平衡设置官方未公开。
- 帧内含电凝烟雾、反光、器械遮挡等真实腹腔镜图像挑战,官方挑战赛材料将视觉挑战列为难度因素之一。
内窥镜图像的典型视觉挑战(来自挑战赛论文对结果的分析视角):
| 挑战 | 表现 | 对建模的影响 |
|---|---|---|
| 电凝烟雾 | 器械与组织边界模糊 | 目标(target)识别是最难组件(挑战赛最高 AP 仅 46.4%) |
| 金属反光与高光 | 器械外观随角度剧变 | 器械外观先验不稳定,需强增广 |
| 遮挡与出画 | 器械部分可见或移出视野 | 存在性标签与可见性不一致的边界样本 |
| 相机运动 | 视野快速平移/缩放 | 帧间对应关系断裂,时序模型需运动鲁棒设计 |
| 近距特写 | 组织充满画面、器械不可见 | "无器械帧"负样本的重要来源 |
§3.10 深度溯源链
| 层级 | 溯源内容 |
|---|---|
| 手术实施 | 斯特拉斯堡大学医院,腹腔镜胆囊切除术 |
| 视频采集 | 内窥镜录像(45 段进入 Cholec80 公开库,5 段保留于内部 Cholec120) |
| 抽帧 | 1 fps 均匀抽帧 → 854×480 PNG,腹腔外视角帧黑化脱敏 |
| 标注 | 专家外科医生逐帧三元组/阶段标注;5 视频补充边界框 |
| 发布 | CAMMA 数据集页 + GitHub 仓库(Release 2.0,2023-02-20,CC BY-NC-SA 4.0) |
| 质量控制 | 官方划分论文(可复现性/可及性/彻底性三准则)+ ivtmetrics 标准化评估 + 挑战赛独立评测 |
§4 数据结构
§4.0 目录树
数据解压后的官方目录结构(docs/README-Format.md):
CholecT50/
├── videos/
│ ├── VID01/
│ │ ├── 000000.png
│ │ ├── 000001.png
│ │ ├── 000002.png
│ │ ├── ...
│ │ └── N.png
│ ├── VID02/
│ │ ├── 000000.png
│ │ └── ...
│ ├── ...
│ └── VIDNN/
│ └── ...
├── labels/
│ ├── VID01.json
│ ├── VID02.json
│ ├── VID03.json
│ ├── ...
│ └── VIDNN.json
├── label_mapping.txt
├── LICENSE
└── README.md
要点:videos/ 下每视频一个文件夹(VID 前缀 + 两位编号,与 Cholec80 的 Video 编号一一对应);labels/ 下每视频一个 JSON;label_mapping.txt 是三元组 ID 到组件 ID 的 6 列映射表。
§4.1 DAIMS 字段字典
核心字段一览(8 列:字段/类型/说明/示例值/AI 用途/观测误差/信息性缺失编码/取值范围):
| 字段 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| video | Integer | 视频 ID(JSON 内字段) | 1 | 划分/分组键 | 无 | 无 | 1–50(VID 前缀对应) |
| fps | Integer | 抽帧率 | 1 | 时间轴还原 | 无 | 无 | 1 |
| num_frames | Integer | 该视频抽帧总数 | 5000 | 数据量统计 | 无 | 无 | 视频相关 |
| frame_id | Integer | 帧序号(=PNG 文件名去掉零填充) | 23 | 帧级对齐 | 无 | 无 | 0–N |
| triplet(类别 ID) | Integer | 〈器械,动词,目标〉组合类别 | 1 =〈grasper, dissect, gallbladder〉 | 主任务标签 | 标注者间风格差异 | -1 表示空 | 0–99 |
| instrument | Integer | 器械类别 ID | 0 = grasper | 子任务标签 | 部分遮挡漏检 | -1 表示空 | 0–5 |
| verb | Integer | 动词类别 ID | 2 = dissect | 子任务标签 | 动作边界主观 | -1 表示空 | 0–9 |
| target | Integer | 目标解剖类别 ID | 0 = gallbladder | 子任务标签 | 视野受限误判 | -1 表示空 | 0–14 |
| phase | Integer | 手术阶段 ID | 3 | 阶段识别任务 | 阶段边界主观 | -1 表示空 | 0–6 |
| IV / IT 配对 ID | Integer | 器械-动词 / 器械-目标组合 ID | 2 / 0 | 关联子任务 | 同上 | -1 表示空 | 各自类别表 |
| BX/BY/BW/BH | Float | 归一化边界框(左/上/宽/高,仅 5 视频) | 0.42/0.31/0.10/0.15 | 检测与定位 | 尖端点标注转框的主观性 | -1 表示无框 | 0–1 |
| SC | Float | 置信度:真值恒为 1,预测为概率 | 1.0 | 评估协议 | 无(真值) | — | 0–1 |
| annotations[frame] | List | 帧到三元组实例列表的映射 | {"0": [...]} |
多实例建模 | — | 空列表 = 无动作 | 0–多实例 |
说明:
label_mapping.txt提供三元组 ID 与组件 ID 的完整双向映射(6 列),是自行拆解/组装标签时的事实标准;示例首行1,0,2,0,2,0表示三元组 ID 1 = 器械 0(grasper)+ 动词 2(dissect)+ 目标 0(gallbladder)。
§4.2 标签分布
- 类别体系:100 个三元组类别(6 器械、10 动词、15 目标)+ 7 个手术阶段;器械-动词与器械-目标配对另有独立 ID 体系。
- 实例规模:151,000 个三元组实例分布在约 100,900 帧上,平均每帧约 1.5 个并发三元组实例;一帧内可有零个、一个或多个实例(arXiv:2204.05235, Table 1)。
- 长尾形态:官方论文与挑战赛报告均确认类别高度不平衡——少数高频三元组占据多数实例,大量罕见三元组实例数极少,以致单一固定测试集中某些类别完全缺席(这是官方推荐 k 折交叉验证的直接原因,见坑点 6)。
- 逐类实例计数表建议用
labels/*.json自行统计(约 20 行代码即可完成,见 §6.3),发布包内未附逐类 CSV。
器械类别一览(6 类,官方术语体系):
| 器械(官方名) | 中文 | 典型交互 |
|---|---|---|
| Grasper | 抓钳 | 抓持、牵拉胆囊或组织(官方示例三元组〈grasper, dissect, gallbladder〉即以 grasper 为器械) |
| Hook | 电钩 | 分离、电凝(Calot 三角区解剖的主力器械) |
| Bipolar | 双极电凝钳 | 电凝止血 |
| Scissors | 剪刀 | 剪切离断 |
| Irrigator | 冲洗器 | 冲洗术野 |
| Clipper | 施夹钳 | 施加血管/管道夹 |
动词与目标:10 类动词涵盖抓取(grasp)、牵拉(retract)、分离(dissect)、电凝(coagulate)、钳夹(clip)、剪切(cut)、冲洗(irrigate)、吸引(aspirate)等;15 类目标涵盖胆囊(gallbladder)、胆囊管(cystic duct)、胆囊动脉(cystic artery)、肝(liver)等解剖与术野结构。完整 ID → 名称映射以数据包内 label_mapping.txt 与各 JSON 的 categories 字典为唯一权威来源,本页不逐项复述以防转录误差。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 视频总数 | 50(45 来自 Cholec80 + 5 来自 Cholec120) | 官方 GitHub README |
| 抽帧总数 | 约 100,900(1 fps) | arXiv:2204.05235 Table 1 |
| 三元组实例总数 | 151,000 | arXiv:2204.05235 Table 1 |
| 器械尖端边界框 | 约 13,000(5 段视频) | arXiv:2204.05235 Table 1 |
| 类别数 | 100 三元组 / 6 器械 / 10 动词 / 15 目标 / 7 阶段 | arXiv:2204.05235 |
| 平均每帧并发实例 | 约 1.5 | 由上两项推算 |
| Rendezvous 划分 | 训练 35 / 验证 10 / 测试 5 视频 | arXiv:2204.05235 Table 2 |
| 挑战赛测试集 | 5 段视频(VID32、VID80、VID78、VID42、VID111,含边界框) | arXiv:2204.05235 / 2302.06294 |
§4.4 数据层级
数据集(50 例手术)
└── 手术(video,VIDxx)
└── 帧(frame,1 fps,000000.png …)
└── 三元组实例(instance,0/1/多个)
├── 组件标签:instrument / verb / target / phase
└── 空间标注(仅 5 视频):器械尖端边界框 + 框-三元组匹配
层级要点:患者层级在此即"手术例"层级(一台手术对应一位患者的胆囊切除);帧之间有强时序自相关(见坑点 2);实例层级是多标签多实例(multi-instance)结构,与常见"每帧一个标签向量"的设定不同。
§4.5 缺失值与信息性缺失
| 编码/现象 | 含义 | 正确处理 |
|---|---|---|
| 实例向量值为 -1 | 该字段空缺/不存在(如无边界框时 BX/BY/BW/BH = -1) | 向量化时置 0 并与"真 0 类别"区分开 |
| 帧标注为空列表 | 该帧无任何三元组发生(如纯观察或转场) | 保留为全零多热向量,属有效负样本 |
| 全黑帧(RGB 0,0,0) | 腹腔外视角,脱敏替换产生 | 训练/评估前过滤;勿当作"无动作"负样本参与指标 |
| 早期 release 缺边界框 | Release 2.0 的 50 视频仅有存在性标签,边界框随挑战赛协议提供 5 视频 | 检测任务须使用 challenge 变体与对应评测 |
§5 划分与使用建议
§5.1 官方划分
Rendezvous 原版划分(复现 2022 RDV 论文):训练 35 / 验证 10 / 测试 5 视频;测试集为 VID32、VID80、VID78、VID42、VID111。各划分内按标注者贡献比例分配,以降低标注偏倚(arXiv:2204.05235, Table 2)。
CholecT50 (cross-val) 官方 k 折划分:将 50 段视频组织为交替测试的折,逐折轮换测试集,使全部 100 类三元组都能在完整数据上得到评估;官方 dataloader 通过 test_fold 参数选择折,dataset_variant 参数选择变体。这是官方推荐的研究默认设置。
CholecT50 (challenge) 划分:与 CholecTriplet2021/2022 挑战赛一致;2022 挑战赛的 5 段测试视频额外带器械尖端边界框,用于弱监督检测评测。
§5.2 社区惯例与划分策略建议
- 对比文献时先确认对方用的变体:同一模型在不同变体上的数字差异可观(官方基准论文专门做了各变体对比)。
- 自定义划分时以"视频"为最小单元,且必须先排除与外部预训练集重叠的视频(见 §5.3)。
- 若关心罕见类性能,优先用 cross-val 逐折报告均值 ± 标准差,而非单折数字。
§5.3 泄漏风险(重点)
- 跨数据集视频重叠:45 段视频与 Cholec80 完全同源(ID 一一对应),另有 5 段来自 Cholec120;Cholec80 的官方 train/val/test 与 CholecT50 的划分互相交叉。官方 2025-09-17 发布的 camma_dataset_overlaps 给出精确重叠清单:例如 Cholec80-train 与 CholecT50-test 重叠 4 段(VID06、VID10、VID14、VID32 对应的 Cholec80 视频 6、10、14、32),Cholec80-test 与 CholecT50-train 重叠 12 段。若用 Cholec80 预训练再在 CholecT50 上评测,等于在测试视频上预训练过。官方给出的合并建议是:保留完整的 CholecT50 与 Endoscapes 划分,从 Cholec80 中剔除重叠视频。
- 帧级随机划分泄漏:1 fps 相邻帧几乎相同且共享器械状态,帧级随机切分会让测试信息经训练集"渗入"。任何划分必须以视频为单位。
- 同手术多视角/多片段:本数据集每视频即一台手术,不存在同手术拆分问题;但跨数据集合并(M2CAI16 等)时同样要按视频 ID 去重。
§5.4 交叉验证建议
使用官方 cross-val 变体 + test_fold 逐折评估,报告 100 类 mAP 的折间均值与标准差;折数与折构成以数据包内划分文件为准(加载器 list_dataset_variants() 可枚举全部支持变体)。不要在折上做超参数挑选后又报告该折成绩——超参搜索应固定在训练折内部。
§5.5 外部验证建议
- 跨中心:用其他机构的胆囊切除视频(如 Endoscapes 的 201 段视频)做零样本/微调迁移,报告 mAP 相对内部测试的衰减。
- 跨术式:将三元组识别模型迁移到 MultiBypass140(胃旁路)等数据集,检验类别体系外泛化。
- 跨器械/设备:结合 EndoVis 器械挑战数据检验外观变化鲁棒性。
- 目前尚无大规模标准化跨中心三元组基准,外部验证结果应自带划分说明,避免与 CholecT50 内部数字直接混排。
§5.6 划分选择与去重的代码化检查
# ============================================================
# 划分选择 + 跨数据集去重断言(防坑点 1 / 坑点 2)
# 前提:从官方 overlaps 仓库获取重叠视频 ID 清单
# ============================================================
CHOLECT50_VIDS = {1, 2, 4, 5, 6, 8, 10, 12, 13, 14, 15, 18, 22, 23, 25,
26, 27, 29, 31, 32, 35, 36, 40, 42, 43, 47, 48, 49, 50,
51, 52, 56, 57, 60, 62, 65, 66, 68, 70, 73, 74, 75, 78,
79, 80, 92, 96, 103, 110, 111} # 官方 50 视频编号
CHOLEC80_OVERLAP = {6, 10, 14, 32, 42, 50, 78, 49, 52, 56, 57, 60,
62, 65, 66, 68, 70, 75, 79, 43, 47, 48, 8, 12,
29, 1, 2, 4, 5, 13, 15, 18, 22, 23, 25, 26, 27,
31, 35, 36, 40, 51, 73, 74, 80} # 与 Cholec80 重叠(官方清单)
def assert_no_overlap(pretrain_vids):
leaked = pretrain_vids & CHOLECT50_VIDS
assert not leaked, f"预训练集与 CholecT50 重叠视频: {sorted(leaked)},必须剔除"
# 划分记录:把所用变体与折号写入实验配置
config = {
"dataset_variant": "cholect50-crossval",
"test_fold": 1,
"pretrain_dedup": "camma_dataset_overlaps@2025-09",
}
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
官方在 CholecTriplet2022 仓库提供了 Colab 一键入门(含样例数据与最简模型,CAMMA-public/cholectriplet2022)。完整数据需经官方指引获取后挂载到云端磁盘(Colab/自备 GPU 实例均可);数据体量为数十 GB 级,建议先传对象存储再拉取,避免每次开机重传。
§6.1 快速上手(官方 Dataloader)
# ============================================================
# 快速上手:官方 dataloader(PyTorch)
# ------------------------------------------------------------
# 目录结构预期(dataset_dir 指向解压后的数据集根目录):
# dataset_dir/
# ├── videos/VID01/000000.png ... # 50 个视频帧文件夹
# ├── labels/VID01.json ... # 每视频一个标注文件
# └── label_mapping.txt # 6 列三元组-组件映射
# dataloader 内部按 dataset_variant 名拼接官方划分定义,
# 并在 dataset_dir 之下寻找 videos/ 与 labels/。
# 最小可用子集:任一 VIDxx 帧文件夹 + labels/VIDxx.json 即可
# 跑通单视频读取;完整训练需官方划分覆盖的全部视频。
# 依赖:pip install pillow torch torchvision ivtmetrics
# ============================================================
import dataloader_pth as dataloader
from torch.utils.data import DataLoader
# 初始化数据集:变体 + 测试折 + 增强列表
dataset = dataloader.CholecT50(
dataset_dir="/path/to/dataset/cholect50/", # 数据根目录
dataset_variant="cholect50-crossval", # 官方 k 折变体(推荐)
test_fold=1, # 交叉验证折号
augmentation_list=["original", "vflip", "hflip", "contrast", "rot90"],
)
# 构建训练/验证/测试集
train_dataset, val_dataset, test_dataset = dataset.build()
# 可用变体与增强自省
print(dataset.list_dataset_variants()) # 全部官方变体
print(dataset.list_augmentations()) # 全部内置增强
# 训练/验证用普通 DataLoader;测试集按视频构建(逐视频评测)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, prefetch_factor=3)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=True)
test_loaders = [DataLoader(v, batch_size=32, shuffle=False) for v in test_dataset]
# 迭代格式:img 与四组标签向量 (instrument, verb, target, ivt)
for img, (lb_i, lb_v, lb_t, lb_ivt) in train_loader:
... # lb_ivt: 100 维多热向量(主任务);lb_i/lb_v/lb_t: 组件子任务
注意:TensorFlow 用户把 import dataloader_pth as dataloader 换成 import dataloader_tf as dataloader,其余 API 一致;TF v1 需用 Iterator 手写取数循环(见官方仓库示例)。
§6.2 数据获取
| 事项 | 说明 |
|---|---|
| 发布方 | CAMMA 研究组(ICube, University of Strasbourg / IHU Strasbourg) |
| 官方入口 | CAMMA 数据集页 → CholecT50 → GitHub 仓库 |
| 下载指引 | docs/README-Downloads.md(仓库内获取方式与使用条款以该文档现行版本为准) |
| 许可证 | CC BY-NC-SA 4.0:署名引用 + 非商业 + 相同方式共享 |
| 使用义务 | 使用数据集须引用 Rendezvous 论文(Nwoye et al., MedIA 2022);再分发须同许可 |
| 咨询邮箱 | camma.dataset@gmail.com |
| 当前版本 | Release 2.0(2023-02-20,50 视频存在性标签;边界框按挑战赛协议提供 5 视频) |
# 获取后的典型布局与校验(伪流程)
# 1) 按官方指引取得数据包并解压到磁盘
# 2) 结构自检:确认 50 个视频帧目录与 50 个 JSON 标注齐全
ls dataset/cholect50/videos | wc -l # 期望 50
ls dataset/cholect50/labels | wc -l # 期望 50
# 3) 环境安装
pip install pillow torch torchvision ivtmetrics
§6.3 预处理全流程
<details>
<summary><strong>展开完整预处理代码(黑帧过滤 → 尺寸标准化 → 标签向量化)</strong></summary>
# ============================================================
# 预处理三步:黑帧过滤 → 尺寸标准化 → 标签向量化
# 输入:dataset_dir/videos/VIDxx/*.png + labels/VIDxx.json
# 输出:可直接进模型的张量与多热标签
# ============================================================
import json, numpy as np
from pathlib import Path
from PIL import Image
ROOT = Path("/path/to/dataset/cholect50")
VID = "VID01"
# --- 1) 黑帧过滤(腹腔外视角脱敏帧) -------------------------
def is_black_frame(img: Image.Image, thresh: float = 2.0) -> bool:
# 官方黑帧为整帧 RGB(0,0,0);容差 2 防御压缩噪声
arr = np.asarray(img.convert("RGB"), dtype=np.float32)
return float(arr.mean()) < thresh
# --- 2) 帧读取与标准化(854x480 → 256x256 等比缩放) ----------
def load_frame(png: Path, size: int = 256) -> np.ndarray:
img = Image.open(png).convert("RGB")
if is_black_frame(img):
return None # 调用侧跳过该帧
img = img.resize((size, size), Image.BILINEAR)
return np.asarray(img, dtype=np.float32) / 255.0
# --- 3) 标签向量化:JSON 标注 → 多热向量 ----------------------
# categories 字典给出 ID→类别名;annotations 给出逐帧实例列表。
# label_mapping.txt 提供 triplet→(i,v,t,iv,it) 的 6 列映射。
def build_multihot(json_path: Path):
data = json.loads(json_path.read_text())
cat_triplet = {int(k): v for k, v in data["categories"]["triplet"].items()}
frame_ids = sorted(int(k) for k in data["annotations"].keys())
n_triplet = len(cat_triplet) # 100
labels = np.zeros((len(frame_ids), n_triplet), dtype=np.float32)
for row, fid in enumerate(frame_ids):
for inst in data["annotations"][str(fid)]:
tid = int(inst["triplet"]) # 实例向量含 triplet 类别 ID
if tid >= 0: # -1 = 空(见 §4.5)
labels[row, tid] = 1.0
return frame_ids, labels
# 最小可用子集示例:单视频帧序列 + 标签
frame_ids, labels = build_multihot(ROOT / "labels" / f"{VID}.json")
print(VID, "frames:", len(frame_ids), "pos frames:", int((labels.sum(1) > 0).sum()))
</details>
工程提示:逐类实例统计(§4.2 长尾画像)只需对全部 JSON 汇总 tid 计数即可,无需额外标注文件。
§6.4 PyTorch DataLoader 完整示例
<details>
<summary><strong>展开自定义 Dataset:JSON + PNG 最小解析(教学向)</strong></summary>
# ============================================================
# 自定义 Dataset:演示 JSON+PNG 的最小解析(教学向)
# 生产环境建议直接用官方 dataloader_pth.CholecT50(见 §6.1)
# ============================================================
import json
from pathlib import Path
import numpy as np
import torch
from PIL import Image
from torch.utils.data import Dataset, DataLoader
class CholecT50Video(Dataset):
"""单个视频的帧级三元组多标签数据集。"""
def __init__(self, root: str, vid: str, size: int = 256):
self.root, self.vid, self.size = Path(root), vid, size
meta = json.loads((self.root / "labels" / f"{vid}.json").read_text())
self.frame_ids = sorted(int(k) for k in meta["annotations"].keys())
self.labels = np.zeros((len(self.frame_ids), 100), dtype=np.float32)
for r, fid in enumerate(self.frame_ids):
for inst in meta["annotations"][str(fid)]:
tid = int(inst["triplet"])
if tid >= 0:
self.labels[r, tid] = 1.0
def __len__(self):
return len(self.frame_ids)
def __getitem__(self, idx):
png = self.root / "videos" / self.vid / f"{self.frame_ids[idx]:06d}.png"
img = Image.open(png).convert("RGB")
arr = np.asarray(img, dtype=np.float32)
if arr.mean() < 2.0: # 黑帧 → 复用相邻帧占位
png = self.root / "videos" / self.vid / f"{self.frame_ids[max(0, idx-1)]:06d}.png"
img = Image.open(png).convert("RGB")
img = img.resize((self.size, self.size), Image.BILINEAR)
x = np.asarray(img, dtype=np.float32) / 255.0
x = torch.from_numpy(x).permute(2, 0, 1) # HWC → CHW
y = torch.from_numpy(self.labels[idx])
return x, y
ds = CholecT50Video("/path/to/dataset/cholect50", "VID01")
dl = DataLoader(ds, batch_size=32, shuffle=True, num_workers=4, pin_memory=True)
</details>
<details>
<summary><strong>展开训练 + 逐视频评估骨架(官方推荐评测姿势,含 video_end)</strong></summary>
# ============================================================
# 训练 + 逐视频评估骨架(官方推荐评测姿势,含 video_end)
# ============================================================
import ivtmetrics
model = build_your_model() # 详见 §6.7 模型推荐
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
criterion = torch.nn.BCEWithLogitsLoss()
metrics = ivtmetrics.Recognition(num_class=100)
for epoch in range(20):
model.train()
for x, y in dl:
loss = criterion(model(x.cuda()), y.cuda())
loss.backward(); optimizer.step(); optimizer.zero_grad()
model.eval()
with torch.no_grad():
for video_loader in test_loaders: # 官方划分:按视频测试
for x, y in video_loader:
pred = torch.sigmoid(model(x.cuda())).cpu()
metrics.update(y, pred)
metrics.video_end() # 关键!触发逐视频 AP 汇总
print(metrics.overall_metrics(return_precision=True))
</details>
§6.5 坑点 8 个(真实失败模式)
⚠️ 坑点 1:用 Cholec80 预训练污染 CholecT50 测试集(分类:数据泄漏)
问题:CholecT50 的 45 段视频与 Cholec80 同源(VID01 ↔ Video01,编号一一对应),另 5 段来自 Cholec120。用 Cholec80(或 M2CAI16)预训练后直接在 CholecT50 上评测,模型等于见过测试视频,成绩虚高且不可发表复现。
症状:论文或实验中"Cholec80 预训练 + CholecT50 微调"的数字明显高于从头训练;审稿人用官方重叠清单一查即穿。
解决:
- 简单方法:预训练前从预训练集中剔除与 CholecT50 全部 50 段视频重叠的 ID(官方 camma_dataset_overlaps 仓库给出完整清单与脚本)。
- 进阶方法:合并多数据集训练时按官方推荐"保留完整 CholecT50 与 Endoscapes 划分、调整 Cholec80 划分"(Cholec80 剔除 4+1+17 段重叠视频)。
- SOTA 方法:在论文中显式报告去重后的预训练集构成,并给出与"无重叠预训练"的对照实验。
参考:CAMMA Dataset Overlaps 官方仓库(2025-09-17);CholecT50 官方 README"Video Overlap"节。
⚠️ 坑点 2:帧级随机划分造成时序泄漏(分类:数据泄漏)
问题:1 fps 相邻帧画面几乎相同(器械位置连续变化),若按帧随机划分训练/测试,测试帧的近邻就在训练集里,指标虚高。
症状:自建划分的 mAP 比官方视频级划分高出数十个百分点;模型"看起来"学会了一切。
解决:
- 简单方法:任何自定义实验都以视频为最小划分单元(官方变体均如此)。
- 进阶方法:在视频内做时序建模(如滑动窗口)时,窗口只作训练增强,评估仍按完整视频切分。
- SOTA 方法:交叉验证按官方 cross-val 折执行,报告折间均值 ± 标准差,杜绝单折偶然性。
参考:官方划分论文(划分三准则:可复现性/可及性/彻底性)。
⚠️ 坑点 3:五个官方变体混用导致结果不可比(分类:标签理解)
问题:CholecT50 (cross-val)、(challenge)、原版、CholecT45 (cross-val)、CholecT40 五个变体的划分与类别体系不同(CholecT40 为未标准化的早期体系);拿不同变体上的数字排榜是系统性错误。
症状:复现数字对不上文献;排行榜对比出现"莫名"的 5–15 个百分点落差。
解决:
- 简单方法:实验前用
dataset.list_dataset_variants()枚举变体并在配置中显式记录所用变体名。- 进阶方法:跨论文对比时只与"同变体 + 同指标"的数字比较;挑战赛成绩对应 (challenge) 变体,RDV 论文对应原版。
- SOTA 方法:主表用 cross-val 折均值,附表用 (challenge) 变体对照挑战赛,两者分开报告。
参考:官方 README"Dataset Variants"节;官方基准论文。
⚠️ 坑点 4:黑帧未过滤污染训练与评估(分类:预处理陷阱)
问题:腹腔外视角帧在发布时被整帧替换为纯黑(RGB 0,0,0)。黑帧携带"无腹腔内容"的伪特征,进入训练会让模型学到捷径;进入测试会稀释按帧统计的指标。
症状:模型在真手术帧上表现尚可但对全黑输入输出高置信三元组;按帧统计的准确率与逐视频 AP 出现背离。
解决:
- 简单方法:读取时计算帧均值,
mean < 2判为黑帧直接跳过(见 §6.3 代码)。- 进阶方法:数据集元信息层面预先统计各视频黑帧区间,构建帧索引时剔除;评估协议在黑帧上不累计指标。
- SOTA 方法:官方 dataloader 已内置增强与读取管线,优先使用其帧枚举逻辑,避免重复造轮子引入不一致。
参考:官方 README-Format.md(黑帧说明)。
⚠️ 坑点 5:忘记 metrics.video_end() 导致 video-wise AP 错误(分类:评估误用)
问题:ivtmetrics 的视频级 AP 需要在一个视频的预测全部累计后调用
video_end()结束该视频;遗漏后帧级累计与视频级汇总混杂,AP 数字失真。
症状:AP 值异常偏低/偏高且逐折结果抖动;官方示例中该调用被注释为 “important for video-wise AP”。
解决:
- 简单方法:测试循环严格按"逐视频 DataLoader → 累计 → video_end()"结构(见 §6.4 代码)。
- 进阶方法:把评测封装为
evaluate(model, test_loaders)函数,video_end()写在每视频循环末尾,杜绝遗漏。- SOTA 方法:直接采用官方 RDV/RDV-Det 评测脚本作为参考实现,对照自研管线输出。
参考:官方 dataloader 用法;ivtmetrics。
⚠️ 坑点 6:长尾类别 + 单一测试集,整体 mAP 掩盖罕见类失败(分类:偏倚陷阱)
问题:151,000 个实例高度集中于少数高频三元组;固定 5 视频测试集无法覆盖全部 100 类,整体 mAP 主要由头部类决定。
症状:整体 mAP 30%+ 的模型在罕见类(如特定器械-罕见目标组合)上 AP 为 0;论文结论"性能良好"与逐类表自相矛盾。
解决:
- 简单方法:同时报告总体与逐类 AP,标注 AP=0 的类别数。
- 进阶方法:用官方 cross-val 折轮换,使每类都有测试机会;报告头部/中部/尾部三段分层 mAP。
- SOTA 方法:对尾部类采用重加权/重采样或组件级(IV/IT 配对)迁移,挑战赛 Top 方法普遍采用组件注意力与集成策略。
参考:CholecTriplet2021 挑战赛联合论文(逐类分析);官方划分论文。
⚠️ 坑点 7:把 recognition 数字与 detection 数字混排(分类:评估误用)
问题:三元组识别(帧级多标签)与三元组检测(器械定位 + 关联)是两个难度悬殊的任务;检测在 IoU 0.5 下即使 SOTA 也只有约 4.49 box mAP,与识别的 30%+ 完全不可比。
症状:把 detection 的 AP 写进 recognition 对比表;或以"detection AP 低"论证"识别模型差"。
解决:
- 简单方法:报告时显式区分任务名(recognition / localization / detection)与 IoU 阈值。
- 进阶方法:detection 结果引用 ivtmetrics 的 Detection 接口协议与官方 challenge 的 JSON 输出格式。
- SOTA 方法:对照 RDV-Det baseline 与 2022 挑战赛冠军 ResNet-CAM-YOLOv5 的协议细节(置信阈值、IoU、Top-K)再下结论。
参考:CholecTriplet2022 挑战赛论文;官方评测脚本仓库。
⚠️ 坑点 8:标签解析错误:四组向量、15 项实例向量与 -1 空值(分类:工程陷阱)
问题:官方 dataloader 返回 (instrument, verb, target, ivt) 四组标签向量,而 JSON 原始标注是每实例 15 项向量(ID/SC/归一化 bbox/组件与阶段等),混用两套表示或忽略 -1 空值编码会导致标签错位。
症状:训练 loss 下降但评估指标异常低;自解析标签与官方 dataloader 对不上;边界框画到图像外。
解决:
- 简单方法:直接用官方 dataloader 的标签输出,勿手写解析;如需 bbox,注意坐标已按图像宽高归一化(乘回 854/480)。
- 进阶方法:自解析时以
label_mapping.txt6 列映射为唯一事实标准,过滤tid < 0的实例,真值 SC 恒为 1 可作断言校验。- SOTA 方法:为解析管线写单测:随机抽 20 帧,对比自解析多热向量与官方 dataloader 输出逐位一致后才放行。
参考:官方 README-Format.md(标注格式与 15 项向量定义)。
§6.6 数据增强(安全 ✅ / 危险 ❌)
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | original / vflip / hflip / contrast / rot90 |
官方 dataloader 内置增强列表;腹腔镜镜像翻转在实践中广泛使用 |
| ✅ 安全 | 轻度颜色抖动、高斯模糊 | 模拟内窥镜白平衡漂移与烟雾散射,保持解剖判读性 |
| ✅ 安全 | 时间窗滑动采样 | 时序模型的标准做法,窗口内帧连续 |
| ❌ 危险 | 90° 以外任意角度旋转、大幅剪切 | 破坏腹腔镜"重力-器械"先验与视野构图,产生不真实样本 |
| ❌ 危险 | 大幅随机裁剪(>20%) | 器械常贴近画幅边缘,裁掉尖端会同时破坏三元组与框标注 |
| ❌ 危险 | 跨帧乱序、时间维度打乱 | 摧毁动作时序语义;对 RNN/Transformer 时序分支是直接噪声 |
| ❌ 危险 | 翻转/旋转后不更新边界框 | 5 段视频的框标注必须与几何增强同步变换 |
§6.7 模型推荐
| 模型 | 任务 | 年份 | 一句话说明 | 适用建议 |
|---|---|---|---|---|
| Tripnet | 识别 | 2020 | 首个三元组识别网络(CholecT40),多任务分解 I/V/T | 历史基线 |
| Rendezvous (RDV) | 识别 | 2022 | CAGAM 空间注意力 + MHMA 语义注意力;官方 baseline,代码与权重公开 | 复现首选起点 |
| Trequartista | 识别 | 2022 | 2021 挑战赛冠军(APIVT 38.1%),集成策略 | 冲榜参考 |
| MCIT-IG | 检测 | 2023 | 器械感知 Transformer + 交互图,弱监督检测强方法 | detection 方向 |
| RDV-Det | 检测 | 2022 | RDV 的检测扩展(CAM 提框 + 启发式关联),官方 detection baseline | detection 起点 |
| ResNet-CAM-YOLOv5 | 检测 | 2023 | 2022 挑战赛冠军(box mAP 4.49) | detection 对比上限 |
| MTTT / Distilled-Swin | 识别/检测 | 2022-2023 | 挑战赛优秀方案(Swin Transformer / 知识蒸馏路线) | 架构参考 |
§6.8 硬件需求
| 任务 | 建议配置 | 说明 |
|---|---|---|
| 三元组识别(帧级多标签) | 单卡 ≥11 GB 显存(如 2080Ti/3080 级)+ 32 GB 内存 | 输入 256×256、batch 32 时单卡可训;官方 baseline 权重可直接推理 |
| 时序模型(滑动窗口) | 单卡 ≥16 GB 显存 | 序列长度 8–16 帧时显存约翻倍 |
| 三元组检测(CAM+框) | 单卡 ≥16 GB 显存 | 需同时跑分类分支与定位分支 |
| 全量 k 折交叉验证 | 上述配置 × 折数次训练时长 | 建议脚本化排队执行并记录每折配置 |
| 存储 | ≥100 GB 空闲磁盘 | 数据包解压 + 工作副本 + 实验输出 |
(以上为社区实践量级估计,官方未发布硬件要求;以官方 baseline 代码的默认 batch size 为准。)
§6.9 评估指标代码
# ============================================================
# ivtmetrics:官方标准化评估库(recognition + detection)
# 安装:pip install ivtmetrics 或 conda install -c nwoye ivtmetrics
# ============================================================
import ivtmetrics
# --- 三元组识别(100 类多标签)---
m = ivtmetrics.Recognition(num_class=100)
# 训练循环内逐 batch 累计(y_true/y_pred 均为 [B,100])
for x, y in video_loader:
pred = torch.sigmoid(model(x.cuda())).cpu()
m.update(y, pred)
m.video_end() # 每个视频结束后必须调用
overall = m.overall_metrics(return_precision=True)
# 返回:各类 AP、mAP、AP@IV / AP@IT 配对指标、Top-K 准确率等
# --- 三元组检测/定位(5 段带框测试视频)---
# ivtmetrics 同时提供 detection 度量(IoU 匹配的 box mAP 协议),
# 输出格式遵循 CholecTriplet2022 挑战赛的 JSON 预测文件约定,
# 参见官方 cholectriplet2022 仓库 eval.py 的调用方式。
指标口径速查:AP(逐类平均精度)、APIVT(完整三元组)、APIV/APIT(器械-动词 / 器械-目标配对)、APT/APV(单组件)、Top-K 准确率、video-wise AP(视频级汇总);检测任务另有 IoU 0.5 下的 box mAP。
检测(detection)评测要点:2022 挑战赛将 5 段测试视频的器械尖端边界框留作评测专用(训练不可见),评测读取模型输出的 JSON 预测(逐帧的三元组-边界框实例列表),在 IoU 0.5 下执行三元组-框匹配并统计 box mAP 与定位 AP。官方 cholectriplet2022 仓库提供自校验器(self-validator)与 eval.py,提交前本地跑通即可避免格式类废卷;预测文件同时支持 list-of-list(.txt)与 list-of-dict(.json)两种格式。
§6.10 MLOps 笔记
时序窗口采样与类不平衡处理(扩展自 §6.4 的帧级 Dataset):
<details>
<summary><strong>展开时序窗口 Dataset 与长尾重加权代码</strong></summary>
# ============================================================
# 时序窗口 Dataset:滑窗为时序模型提供上下文帧
# 训练技巧:长尾类的 BCE 正类权重(pos_weight)重加权
# ============================================================
import numpy as np
import torch
from torch.utils.data import WeightedRandomSampler
class CholecT50Window(torch.utils.data.Dataset):
"""滑动窗口:返回连续 W 帧 + 中心帧标签(窗口不跨视频)。"""
def __init__(self, base_ds, window: int = 8):
self.base, self.W = base_ds, window
self.n = len(base_ds) - window + 1
def __len__(self):
return max(self.n, 0)
def __getitem__(self, idx):
frames, label = [], None
for j in range(idx, idx + self.W):
x, y = self.base[j]
frames.append(x)
label = y # 官方以中心帧语义为窗口标签
return torch.stack(frames), label
# 类不平衡:按帧内正类稀有度赋采样权重(示例用三元组计数近似)
pos_counts = ds.labels.sum(0) # 逐类正帧数
frame_weight = 1.0 / max(1.0, float(
ds.labels @ (1.0 / np.maximum(pos_counts, 1.0))))
sampler = WeightedRandomSampler(
weights=torch.tensor([frame_weight] * len(ds), dtype=torch.double),
num_samples=len(ds), replacement=True)
window_ds = CholecT50Window(ds, window=8)
window_dl = torch.utils.data.DataLoader(
window_ds, batch_size=8, sampler=sampler, num_workers=4)
# 损失端等价做法:BCEWithLogitsLoss(pos_weight=稀有类权重向量)
# pos_weight = (N - pos) / pos,逐类计算后 clip 到 [1, 50]
</details>
工程实践清单:
- 配置即代码:把
dataset_variant / test_fold / augmentation_list写进实验配置文件并与 checkpoint 一起存档,防止"换折忘记"。 - 数据版本:以 Release 2.0(2023-02-20)为准锁定数据版本号;边界框相关的检测实验单独记录挑战赛协议版本。
- 去重断言:训练脚本启动时校验预训练集与 CholecT50 视频交集为空(坑点 1,§5.6 有现成代码),失败即中止。
- 评测回归:用官方 RDV baseline 权重跑通 ivtmetrics 全流程一次,把输出数字作为评测管线的黄金对照。
- 长尾监控:训练日志中跟踪逐类 AP 而不仅是 mAP;发布模型卡时附尾部类表现。
- 可复现性:固定随机种子、记录
dataloader.list_dataset_variants()的返回以留存当时支持变体清单。 - 推理部署:识别模型输出为 100 维 sigmoid 概率,部署时按业务选定阈值(挑战赛惯例 0.5)并记录;黑帧过滤逻辑必须与训练一致地进入推理预处理。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 单中心偏倚 | 全部视频来自斯特拉斯堡一家医院,术者习惯与设备单一 | 高 | 外部数据集迁移评估;多中心数据集(如 MultiBypass140)互补 |
| 标注者偏倚 | 多位外科医生标注风格存在差异;一致性未公开 | 中 | 官方划分已按标注者分层;研究时报告折间方差 |
| 长尾类偏倚 | 100 类实例高度不均,尾部类样本稀缺 | 高 | k 折覆盖全部类;分层报告;重加权/集成 |
| 术式单一 | 仅胆囊切除术,动词/目标分布反映该术式 | 中 | 明确任务边界;跨术式迁移实验 |
| 时间漂移 | 视频采集年份未逐例公开,设备演进可能引入年代混杂 | 中 | 官方未提供采集元数据,无法逐例校正;结论外推需谨慎 |
§7.2 标注质量
标注由专家外科医生逐帧完成,覆盖全部约 100,900 帧;5 段视频的边界框附框-三元组匹配标签,官方在划分设计中显式控制了标注者分布。未公开项:标注者间一致性系数、逐帧复核率、歧义帧(如烟雾遮挡)的处理规范。参考性佐证:2021 挑战赛 19 支队伍的方法在识别任务上仅达 4.2%–38.1% mAP,说明该标注体系定义的任务本身具有高难度而非标注噪声主导(Nwoye et al., 2023)。
§7.3 泛化性
| 目标场景 | 失效风险 | 证据/依据 |
|---|---|---|
| 其他医院胆囊切除 | 中-高:设备配色、术者手法差异 | 单中心数据;官方建议关注数据重叠与合并策略 |
| 机器人手术(RAS) | 高:器械形态与视野动力学不同 | 数据集仅含传统腹腔镜器械类别 |
| 急性炎症/复杂病例 | 中:组织水肿、渗血改变目标外观 | 类别体系未含病理状态维度 |
| 多语种/多中心合并训练 | 取决于去重执行 | 官方 overlaps 仓库即为该场景提供清单 |
§7.4 伦理与合规
- 知情与审批:视频采集于斯特拉斯堡大学医院临床流程,CAMMA 团队与临床合作方(含 IRCAD/IHU Strasbourg)共同管理;患者知情与伦理审批由数据提供方负责执行,二次使用须遵循 CC BY-NC-SA 4.0 与官方条款。
- 脱敏:腹腔外视角帧整帧黑化(RGB 0,0,0),发布内容为脱敏后的内窥镜影像与动作标签,不含患者身份信息或人口学元数据。
- 许可约束:非商业使用;再分发须同许可;署名引用 Rendezvous 论文。
- 不适用声明:基于该数据集的模型不可直接用于临床诊断决策,须经独立临床验证。
§7.5 公平性
数据集不包含患者人口学字段(年龄、性别、人种等均未随数据发布),无法开展基于患者属性的亚组公平性分析;这是手术视频类数据集的普遍局限。如研究需要公平性维度,应在获取配套临床数据并在合规审批下进行,或选择含人口学元数据的数据集。器械-目标语义层面不存在人为的群体划分,但术者个体风格可能构成"群体"维度的隐藏偏倚(见 §7.1 标注者偏倚)。
§7.6 数据漂移
- 设备/年代漂移:视频来自跨度未公开的采集期,腹腔镜分辨率与白平衡随年代变化;部署时如遇新型 4K 荧光腹腔镜,需评估外观域差异。
- 术式实践漂移:胆囊切除实践(如 CVS 强制留证)随指南演进,标注中动词-目标组合的频率分布可能随年代变化。
- 监测建议:上线系统按月跟踪输入帧的器械直方图与阶段分布,与 CholecT50 训练分布做 PSI/卡方检验,超阈值触发再训练评审。
可执行的漂移监测面板:
| 监测项 | 统计方法 | 告警阈值(示例) | 处置动作 |
|---|---|---|---|
| 器械存在分布 | 与训练集逐类频率比(PSI) | PSI > 0.2 | 评审新器械/新设备引入 |
| 帧级正类密度 | 每帧正类数均值漂移 | 相对漂移 > 30% | 检查术式构成变化 |
| 黑帧比例 | 术前/术后段黑帧占比 | 突变 > 2 倍 | 排查采集流程变更 |
| 分辨率/宽高比 | 输入流元数据直方图 | 出现新桶 | 触发预处理适配评审 |
| 阶段时长分布 | 各阶段帧占比 | 卡方 p < 0.01 | 与临床团队复盘术式演进 |
(阈值为工程经验起点,应按业务容错成本校准。)
§7.7 DAIMS 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ⚠️ | 原始为 JSON 嵌套标注;经官方 dataloader 转换可得帧级多热宽表 |
| 2 | 唯一标识 | ✅ | 视频 ID(VIDxx)+ 6 位帧序号全局唯一,跨数据集 ID 可对应 |
| 3 | 特殊字符 | ✅ | 类别名与文件名均为规范 ASCII,无特殊字符风险 |
| 4 | 重复行 | ✅ | 帧与实例键唯一;跨数据集同源视频需按 ID 去重(见坑点 1) |
| 5 | 缺失编码 | ✅ | -1 显式编码空值(无框、无类别等) |
| 6 | 标签标识 | ✅ | categories 字典提供 ID→类别名完整映射 |
| 7 | 罕见类分组 | ⚠️ | 长尾严重但官方未提供罕见类分组或分层建议 |
| 8 | 偏倚评估 | ✅ | 官方按标注者分层划分;挑战赛论文含系统性方法学分析 |
| 9 | 数据字典 | ✅ | README-Format.md + label_mapping.txt 构成完整字典 |
| 10 | 信息性缺失解释 | ✅ | 黑帧=腹腔外视角脱敏,官方明确解释 |
| 11 | 设备记录 | ⚠️ | 分辨率与抽帧率有记录;设备型号与采集参数未公开 |
| 12 | 共线性 | ⚠️ | 器械-动词-目标组件强相关,官方未讨论组件共线性影响 |
| 13 | 编码映射 | ✅ | label_mapping.txt 6 列实现三元组↔组件双向映射 |
| 14 | 时间戳处理 | ⚠️ | 仅提供帧序号(1 fps 隐含时间);真实时间戳与采集日期缺失 |
| 15 | 划分建议 | ✅ | 5 个官方变体 + 划分论文详述协议 |
| 16 | 泄漏讨论 | ✅ | 官方专设 overlaps 仓库讨论跨数据集泄漏 |
| 17 | 标签分布 | ⚠️ | 论文报告总量;发布包未附逐类分布表,需自行统计 |
| 18 | 测量偏倚 | ⚠️ | 标注者间一致性未公开,测量偏倚只能间接评估 |
| 19 | 外部验证建议 | ⚠️ | 挑战赛协议可作参考,但无官方跨中心外部验证指南 |
| 20 | 版本记录 | ✅ | CholecT40→45→50 演进清晰,news 日志与 release 语义明确 |
| 21 | 预处理脚本 | ✅ | 官方 PyTorch/TF dataloader + 内置增强列表 + ivtmetrics |
| 22 | 合规要求 | ✅ | CC BY-NC-SA 4.0 条款与署名义务明确 |
| 23 | 多模态对齐 | ✅ | PNG 文件名与 JSON annotations 键严格对齐(单模态内部对齐) |
| 24 | 去标识化 | ✅ | 腹腔外视角帧黑化脱敏,无人口学元数据发布 |
DAIMS 评分:18.5 / 24
评分解读:良好——标识、字典、划分、合规与脱敏体系完整且生态成熟(官方加载器、评估库、泄漏清单一应俱全);扣分集中于元数据维度(设备记录、时间戳、标注者一致性、逐类分布表缺失)与长尾类治理。
对你意味着什么:可以直接把它当"基准即服务"使用——官方 dataloader + cross-val + ivtmetrics 三件套能撑起绝大多数论文实验;但开工前要自己补三件事:跑一遍逐类实例统计并固化为资产、在训练入口写死跨数据集去重断言、把黑帧过滤纳入数据管线测试。若研究依赖采集时间或设备型号等元数据,此数据集无法满足,需要另寻来源。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| CholecT45 ↔ CholecT50 交叉基准 | CAMMA(官方基准论文) | 识别 | 官方复现模型在两数据集划分上的 mAP 对照 | 见基准论文各表 | 划分与指标标准化后跨变体可比;视频重叠是首要干扰源 |
| CholecTriplet2021 多团队盲测 | 全球 19 支队伍(MICCAI) | 识别 | mAP 4.2%–38.1% | 基线 RDV 约 32.7% | 任务难度高;器械-目标关联比器械-动词更易学(强模型) |
| CholecTriplet2022 多团队盲测 | 全球 10 支队伍(MICCAI) | 检测(IoU 0.5) | box mAP 0.08%–4.49%;定位 AP 最高 41.9% | 相比识别任务大幅下降 | 弱监督定位可行但远未解决;严格 IoU 下检测 AP 极低 |
说明:截至 2026-09,尚无以同行评审形式发表的、覆盖多家外部医院的大规模三元组识别跨中心验证;跨中心泛化证据主要来自上述挑战赛多团队协议与官方重叠分析,使用时应自带划分与去重说明。
§8 基准性能与生态
§8.1 排行榜(三元组识别,CholecT50 (challenge) 变体)
CholecTriplet2021 挑战赛(测试于 CholecT45/50 挑战赛划分):
| 排名 | 模型/团队 | APIVT(mAP) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | Trequartista | 38.1% | 2022 | 多模型集成、注意力融合 | Nwoye C.I. et al., 2023, Medical Image Analysis 86:102803. DOI: 10.1016/j.media.2023.102803 | 见挑战赛论文附录 |
| 2 | SIAT-CAMI | 35.8% | 2022 | APIT 子任务强优化 | 同上(联合论文) | 部分团队开源 |
| 3 | HFUT-MedIA | 32.9% | 2022 | 多任务分支 | 同上(联合论文) | 部分团队开源 |
| — | RDV(官方基线) | 约 32.7% | 2022 | CAGAM + MHMA | Nwoye C.I. et al., 2022, Medical Image Analysis 78:102433. DOI: 10.1016/j.media.2022.102433 | 官方开源 |
| — | 全体参赛方法 | 4.2%–38.1% | 2022 | 19 支队伍算法汇总 | Nwoye C.I. et al., 2023, Medical Image Analysis 86:102803 | 见论文 |
⚠️ 数字不可直接比较的原因:挑战赛榜基于固定 5 视频测试集与当届协议(含 Top-K 与置信阈值约定),与 cross-val 折均值的统计口径不同;不同论文的预训练策略(是否去重 Cholec80,见坑点 1)亦会显著影响结果。
Top-K 准确率对照(CholecTriplet2021 挑战赛报告,识别任务):
| 模型/团队 | Top-5 | Top-10 |
|---|---|---|
| RDV(官方基线) | 69.35 | 84.38 |
| Tripnet(官方基线) | 67.89 | 83.99 |
| Trequartista(冠军) | 68.50 | 82.40 |
| HFUT-MedIA(季军) | 65.05 | 85.35 |
| 全体方法均值 ± 标准差 | 53.1±18.3 | 67.5±22.3 |
解读:Top-10 下头部方法准确率超过 80%,说明模型已能把正确三元组排进前列;但 Top-1 的 mAP 仍低于 40%,瓶颈在于精确的置信度排序与尾部类区分——这也是评估时必须同时报告 mAP 与 Top-K 的原因。
三元组检测(CholecTriplet2022,IoU 0.5):冠军 ResNet-CAM-YOLOv5(Wintegral GmbH)box mAP 4.49;官方基线 RDV-Det 及 10 支队伍方法分布于 box mAP 0.08%–4.49%、定位 AP 0.3%–41.9%(Nwoye C.I. et al., 2023, arXiv:2302.06294;Papers with Code 榜单,截至 2026-09)。
§8.2 SOTA 总结与选型建议
- 识别任务:以官方 RDV 为起点复现(代码与权重公开),参照 Trequartista 的集成思路冲高;Swin 类骨干与组件级注意力是 2021-2023 挑战赛迭代的主线。
- 检测任务:从 RDV-Det 基线出发;MCIT-IG 证明"目标嵌入 + 交互图"能降低误关联,是当前较优的弱监督检测路线。
- 务实建议:除非专门研究检测,多数应用(报告生成、进度感知)用识别模型 + 器械存在检测即可覆盖;检测数字(约 4% mAP)尚不足以支撑精确空间辅助的落地叙事。
选型速查:
| 你的目标 | 推荐起点 | 参考上限(挑战赛/文献) | 注意事项 |
|---|---|---|---|
| 复现基线、发首篇论文 | RDV(PyTorch) | APIVT 约 32.7%(原版划分) | 官方权重可直接验证评测管线 |
| 冲识别 SOTA | RDV 变体 + 集成/强骨干 | APIVT 38.1%(Trequartista) | cross-val 折均值才是稳妥口径 |
| 弱监督定位研究 | RDV-Det → MCIT-IG 路线 | 定位 AP 41.9% / box mAP 4.49% | IoU 0.5 极严格,论文叙事需谨慎 |
| 工程原型(报告/进度) | 识别模型 + 器械存在分支 | 按业务自定义 | 部署阈值与黑帧过滤写进预处理 |
| 跨数据集泛化研究 | cross-val 训练 + 外部数据零样本 | 无公开标准化上限 | 先做 overlaps 去重(坑点 1) |
§8.3 评测协议
- 数据变体与划分按 §3.0 矩阵选择并写明于论文。
- 识别任务:100 类逐帧多标签预测,ivtmetrics
Recognition,逐视频累计后video_end(),报告 APIVT(主指标)与 APIV/APIT/APT/APV/Top-K。 - 检测任务:预测帧级三元组-边界框实例(JSON),ivtmetrics Detection 协议,IoU 0.5 下报告 box mAP 与定位 AP。
- 交叉验证:cross-val 变体逐折评估,报告均值 ± 标准差。
- 公平性:预训练集去重声明(坑点 1);统一置信阈值与 Top-K 设置。
§8.4 相关数据集
| 数据集 | 关系 | 用法建议 |
|---|---|---|
| Cholec80 | 45/50 视频同源 | 阶段/器械预训练来源;必须去重(坑点 1) |
| Cholec120 | 5 段视频来源(内部库,未公开发布) | 不可单独获取;注意对应 VID92-111 区段 |
| CholecT45 / CholecT40 | 前代版本 | 历史对比与小规模实验 |
| Endoscapes | 同中心不同标注体系(分割/检测/CVS) | 跨任务迁移与外部验证 |
| CholecTrack20 | 同团队跟踪数据集 | 器械轨迹延伸研究 |
| MultiBypass140 | 同团队跨术式数据集 | 泛化性评估 |
§8.5 关键论文 Top 8
- Tripnet — C.I. Nwoye, D. Srivastav, et al., 2020, MICCAI (LNCS 12263:364-374). DOI: 10.1007/978-3-030-59710-8_36 — 首次形式化手术动作三元组并发布 CholecT40。
- Rendezvous(主论文) — C.I. Nwoye, T. Yu, C. Gonzalez, B. Seeliger, P. Mascagni, D. Mutter, J. Marescaux, N. Padoy, 2022, Medical Image Analysis 78:102433. DOI: 10.1016/j.media.2022.102433 — 提出 RDV 模型并发布 CholecT50。
- 官方划分与指标 — C.I. Nwoye et al., 2022, arXiv:2204.05235 — 5 个官方变体、评测协议与 ivtmetrics 库。
- CholecTriplet2021 — C.I. Nwoye et al., 2023, Medical Image Analysis 86:102803. DOI: 10.1016/j.media.2023.102803 — 19 支队伍识别基准与方法学分析。
- CholecTriplet2022 — C.I. Nwoye et al., 2023, arXiv:2302.06294 — 从识别到检测(弱监督定位)的挑战赛总结。
- Cholec80(视频来源库) — A.P. Twinanda, S. Shehata, D. Mutter, J. Marescaux, M. de Mathelin, N. Padoy, 2017, IEEE Transactions on Medical Imaging 36(4) — EndoNet 与 Cholec80 阶段/器械基准。
- MCIT-IG — 2023, MICCAI (LNCS). DOI: 10.1007/978-3-031-43996-4_48 — 混合监督三元组检测,弱监督定位路线代表。
- CholecTrack20 — C.I. Nwoye, K. Elgohary, A. Srinivas, F. Zaid, J.L. Lavanchy, N. Padoy, 2025, CVPR — 同团队多视角器械跟踪延伸。
§8.6 社区活跃度
- GitHub 主仓库约 53 stars、12 个 issue(4 开 8 关)(截至 2025-04,RepositoryStats);仓库本身更新克制,重心在数据与文档而非代码迭代。
- 两届 MICCAI 挑战赛(grand-challenge.org 平台)聚合了持续的方法流;ivtmetrics 在 pip/conda 双渠道分发。
- 数据集主论文引用 137+(Scopus,截至 2026-09),呈持续增长态势。
- 官方维护的 overlaps 分析(2025-09)表明团队仍在活跃响应社区的数据治理需求。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/规模(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| cholect50 仓库 | 数据+加载器 | GitHub | 约 53 stars(2025-04 统计) | 数据格式/划分/下载的官方事实源 |
| ivtmetrics | 评估库 | PyPI | pip/conda 双渠道 | 识别与检测指标的事实标准 |
| cholectriplet2022 仓库 | 评测脚本 | GitHub | 含 Colab 快速入门 | detection 协议与 JSON 评测流程 |
| RDV / RDV-Det 代码 | 模型基线 | CAMMA-public 组织页 | 权重公开 | 复现官方基线 |
| camma_dataset_overlaps | 数据治理 | GitHub | 2025-09 发布 | 跨数据集去重清单 |
| CAMMA 数据集页 | 门户 | camma.u-strasbg.fr/datasets | — | 全家桶入口与引用规范 |
| grand-challenge 挑战赛页 | 赛事 | cholectriplet2021.grand-challenge.org | 两届 | 历史提交与协议存档 |
§9 相关资源与引用
§9.1 官方资源列表
- 数据集主页(含下载与引用要求):CAMMA Datasets
- GitHub 主仓库(数据格式/划分/加载器):CAMMA-public/cholect50
- 数据格式文档:docs/README-Format.md
- 下载指引:docs/README-Downloads.md
- 评估库:ivtmetrics(PyPI)(
pip install ivtmetrics) - 挑战赛存档:CholecTriplet2021、CholecTriplet2022 仓库
- 数据重叠分析:CAMMA-public/camma_dataset_overlaps
- 咨询邮箱:camma.dataset@gmail.com
新用户上手顺序建议:
- 读数据集页与 GitHub README,确认许可义务(CC BY-NC-SA 4.0 + 署名引用)。
- 按下载指引获取数据,解压后用 §4.0 目录树核对结构完整性。
- 跑官方 Colab 样例或 §6.1 代码,确认 dataloader 与 ivtmetrics 环境可用。
- 统计逐类实例分布(§4.2),建立对长尾形态的直觉。
- 用 §5.6 去重断言检查你的预训练集,再启动正式训练。
- 所有评测走 ivtmetrics(§6.9),对比数字前先核对变体与协议(§3.0、§8.3)。
§9.2 BibTeX 引用块
<details>
<summary><strong>展开完整 BibTeX(主论文 / 挑战赛 / 划分论文)</strong></summary>
@article{nwoye2022rendezvous,
author = {Nwoye, Chinedu Innocent and Yu, Tong and Gonzalez, Cristians and
Seeliger, Barbara and Mascagni, Pietro and Mutter, Didier and
Marescaux, Jacques and Padoy, Nicolas},
title = {Rendezvous: Attention mechanisms for the recognition of surgical
action triplets in endoscopic videos},
journal = {Medical Image Analysis},
volume = {78},
pages = {102433},
year = {2022},
doi = {10.1016/j.media.2022.102433}
}
@article{nwoye2023cholectriplet2021,
author = {Nwoye, Chinedu Innocent and Alapatt, Deepak and Yu, Tong and
Vardazaryan, Armine and others},
title = {CholecTriplet2021: A benchmark challenge for surgical action
triplet recognition},
journal = {Medical Image Analysis},
volume = {86},
pages = {102803},
year = {2023},
doi = {10.1016/j.media.2023.102803}
}
@article{nwoye2022splits,
author = {Nwoye, Chinedu Innocent and Gonzalez, Cristians and Yu, Tong and
Mascagni, Pietro and Mutter, Didier and Padoy, Nicolas},
title = {Data splits and metrics for method benchmarking on surgical
action triplet datasets},
journal = {arXiv preprint arXiv:2204.05235},
year = {2022}
}
</details>
§9.3 引用指南
- 使用数据本身(任一变体)→ 引用主论文(nwoye2022rendezvous)。
- 使用官方划分或 ivtmetrics → 追加引用 nwoye2022splits。
- 与挑战赛方法对比 → 追加引用对应挑战赛联合论文(nwoye2023cholectriplet2021 或 CholecTriplet2022 arXiv:2302.06294)。
- 引用本 Wiki 页面 → 使用页面顶部 schema_org 中的
citeAs字段。
§10 AI 使用声明卡
§10.1 本页面使用的 AI 模型
- 千方医数集写作 Agent(fast-model,CodeBuddy Code 平台),负责资料检索、初稿撰写与结构化排版。
§10.2 AI 参与范围
AI 参与:检索公开资料并提炼事实清单、生成各章节初稿、代码示例编写、表格与 JSON-LD 构建。人工参与:医学与数据工程交叉审核、事实抽查核验、最终发布决定。所有规模数字、基准数字与日期均溯源至 §10.3 所列来源,未经来源支撑的数值一律未写入。
事实核验方法:规模数字(50 视频/100,900 帧/151,000 实例/13,000 边界框/类别体系)与官方数据集页、arXiv:2204.05235 Table 1、README-Format.md 三方互证;基准数字(38.1%、4.49% 等)与挑战赛联合论文原文核对;版本日期与官方 README News 日志核对;引用数取自 Scopus/CrossRef 计量的第三方聚合页并标注查询时间。数据集总大小、逐类实例计数、标注者人数等官方未公开字段一律未给出数值。
§10.3 输入来源列表
- C.I. Nwoye et al., 2022, Medical Image Analysis 78:102433. DOI: 10.1016/j.media.2022.102433(Rendezvous 主论文)
- C.I. Nwoye et al., 2022, arXiv:2109.03223(主论文预印本)
- C.I. Nwoye et al., 2022, arXiv:2204.05235(官方划分与指标基准论文)
- C.I. Nwoye et al., 2023, Medical Image Analysis 86:102803. DOI: 10.1016/j.media.2023.102803(CholecTriplet2021 联合论文)
- C.I. Nwoye et al., 2023, arXiv:2204.04746(CholecTriplet2021 预印本)
- C.I. Nwoye et al., 2023, arXiv:2302.06294(CholecTriplet2022 论文)
- CAMMA 数据集页 https://camma.u-strasbg.fr/datasets/
- CholecT50 官方 GitHub 仓库 README https://github.com/CAMMA-public/cholect50
- CholecT50 数据格式文档 docs/README-Format.md(官方仓库)
- CAMMA-public/camma_dataset_overlaps 仓库(2025-09-17 重叠分析)
- CAMMA-public/cholectriplet2022 仓库(评测脚本与 Colab 入门)
- C.I. Nwoye et al., 2020, MICCAI(Tripnet,CholecT40)
- A.P. Twinanda et al., 2017, IEEE TMI(EndoNet/Cholec80)
- MCIT-IG,2023, MICCAI. DOI: 10.1007/978-3-031-43996-4_48
- Papers with Code:CholecTriplet2022 榜单(截至 2026-09)
- PlumX/Scopus 引用计量(Rendezvous,137+,截至 2026-09)
- WHO ICD-11 浏览器:DC11 胆石病编码
- AMBOSS:Cholecystectomy 临床知识条目
- RepositoryStats:cholect50 仓库统计(截至 2025-04)
- HAL 开放档案:hal-03765190(Rendezvous 全文与作者机构)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与版本时间轴 | 千方病案医学编辑部 | 与官方 README/News 逐条比对 | ✅ 已通过 |
| §2 医学背景(ICD-11/SNOMED/临床) | 千方病案医学编辑部 | ICD-11 编码与文献交叉核对 | ✅ 已验证 |
| §3 规格与 §4 数据结构 | 千方病案医学编辑部 | 与 README-Format.md 逐项比对 | ✅ 已通过 |
| §5 划分与泄漏讨论 | 千方病案医学编辑部 | 与官方划分论文/overlaps 仓库比对 | ✅ 已验证 |
| §6 代码示例与八个坑点 | 千方病案医学编辑部 | API 对照官方文档逐条核验 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与原文及引文快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.1-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核
最后人工审核日期:2026-09-05(与 §0 审核声明一致)
页面状态:published(全部内容已完成审核并发布)
