PitVis — 经鼻垂体手术视频工作流数据集 AI-Ready Wikipedia

首个内窥镜垂体手术公开视频数据集:25 段训练视频、12 类步骤与 19 类器械逐秒标注

来源 University College London (WEISS) / National Hospital for Neurology and Neurosurgery url: https://rdr.ucl.ac.uk/articles/dataset/PitVis_Challenge_Endoscopic_Pituitary_Surgery_videos/26531686发布时间: 2026-09-13最后更新: 2026-09-25 阅读 29
PitVis — 经鼻垂体手术视频工作流数据集 AI-Ready Wikipedia

信息速览

数据集名称PitVis — 经鼻垂体手术视频工作流数据集 AI-Ready Wikipedia
数据类型33 段手术视频(25 段公开),12 类手术步骤逐秒标注,19 类器械标注,24 FPS 720p MP4,CC BY-NC-SA 4.0 免费下载
规模33 段手术视频(对应 33 例经鼻垂体手术,其中 25 例公开)
接入方式University College London (WEISS) / National Hospital for Neurology and Neurosurgery url: https://rdr.ucl.ac.uk/articles/dataset/PitVis_Challenge_Endoscopic_Pituitary_Surgery_videos/26531686
AI 就绪度

数据集封面

PitVis — 经鼻内窥镜垂体手术视频工作流数据集 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 PitVis(PitVis-2023 Challenge 数据集)
英文全称 Pituitary Vision (PitVis) 2023 Challenge: Endoscopic Pituitary Surgery videos
别名/简称 PitVis-2023;EndoVis 2023 PitVis 子挑战数据集
疾病分类(ICD-11) 垂体腺良性肿瘤(ICD-11 foundation entity 1871539651;ICD-10-CM 对应 D35.2)
SNOMED CT 254956000(垂体腺瘤);127024001(垂体肿瘤)
数据模态 手术视频(内窥镜)
AI 任务类型 手术步骤识别、器械识别、多任务工作流识别
样本总数 33 段手术视频(25 段公开训练 + 8 段内部测试)
数据格式 MP4 视频(24 FPS、720p)+ CSV 逐秒标注 + TXT/CSV 映射文件
许可证 CC BY-NC-SA 4.0
访问级别 开放(免费直接下载,无需注册)
首发日期 2023 年(挑战赛发布);2024 年(UCL 数据仓库公开发行)
最后更新 2024 年(UCL 仓库 v2 版)
发布机构 伦敦大学学院 WEISS + 英国国家神经病学与神经外科医院(NHNN)
官方主页 GitHub dreets/pitvis
下载地址 UCL Research Data Repository
DOI 10.5522/04/26531686
引用次数 1+(ScienceDirect 统计,截至 2026-09,主挑战论文 2025-12 刚刊出)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 有官方 20/5 划分建议、1 FPS 抽帧脚本与 baseline 模型,但需手动逐文件下载并自行实现 DataLoader
页面状态 published

§0 E-E-A-T 审核与免责

  • 医学审核:本条目医学背景(§2)、偏倚与局限性分析(§7)由千方病案医学编辑部交叉审核,参考《Medical Image Analysis》2025 年 PitVis-2023 挑战赛论文及 UCL 团队同行评审文献。
  • 数据工程审核:千方病案医学编辑部交叉审核,医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
  • 审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。PitVis 以 CC BY-NC-SA 4.0 许可发布(禁止商业用途与再分发),官方声明数据"cannot be distributed",二次分发需遵守相同方式共享条款。DUO 标签不适用于本数据集,具体使用限制以 UCL 仓库页面与挑战赛官方协议为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? PitVis(Pituitary Vision,垂体视觉)是目前唯一公开的经鼻内窥镜垂体手术视频数据集,由伦敦大学学院(UCL)WEISS 中心与英国国家神经病学与神经外科医院(NHNN)为 MICCAI 2023 内窥镜视觉挑战赛(EndoVis 2023)整理发布,包含 25 段公开训练手术视频与逐秒标注的手术步骤、手术器械标签(Das et al., 2025)。

为什么重要? 垂体腺瘤切除术(经蝶入路,eTSA)的手术空间极小、器械更换频繁、视野易被血液遮挡,是手术 AI 领域长期缺乏公开数据的"空白区"。PitVis 是该术式第一个带步骤与器械双标注的公开基准,直接填补了神经外科手术工作流识别的数据空白,并提供了 9 支国际团队、18 份投稿的基准结果(arXiv 2409.01184)。

我能用它做什么? 训练视频级手术步骤识别模型(12 类)、器械识别模型(19 类)、步骤+器械多任务模型;研究时空建模(LSTM/TCN/Transformer)与时间平滑策略;构建手术教学自动索引、手术记录自动生成等下游应用的原型系统。注意:8 段测试视频由组织方保留不公开,公开数据只能复现训练侧,完整评测需按官方协议提交。

§1.1 摘要

PitVis 的原始视频来自 NHNN 常规手术录像:25 段公开训练视频录制于 2021-07-02 至 2022-12-28,另有 8 段测试视频录制于 2018-12-06 至 2021-01-07,仅由组织方持有用于评测。原始录制为可变帧率(720p 至 2160p,Karl Storz Hopkins 望远镜 + AIDA 存储系统),上传至 Medtronic 的 Touch Surgery Ecosystem 平台完成脱敏(患者体外区域模糊)后,用 HandBrake 统一转码为 24 FPS、720p 的 MP4 文件(arXiv 2409.01184)。

标注为逐秒粒度:手术步骤由两名神经外科受训医师独立标注并经讨论达成共识,词表共 14 条,其中步骤 11(gasket seal construct)与步骤 13(nasal packing)因样本量不足被移出评测,实际评测 12 类;器械标注由第三方公司 Anolytics 完成,经一名受训医师与一名研究员核验,全部标注最终由顾问神经外科医师审核,共 19 类(含"无器械"与"遮挡"特殊类),每秒最多标注两把器械(HuggingFace 数据卡)。

2023 年 10 月 8 日挑战赛在 MICCAI 2023(温哥华)EndoVis 系列下举办,52 人注册下载数据,最终 9 支团队、6 个国家提交 18 份模型。结论高度一致:引入时序上下文与多任务学习的模型全面胜出,步骤识别 Macro-F1 较纯空间模型提升逾 50%,器械识别提升逾 10%;纯空间模型的 Edit-score(时序一致性)不足 2%,最佳模型超过 46%(Das et al., 2025)。数据集以 CC BY-NC-SA 4.0 许可托管于 UCL Research Data Repository。

§1.2 战略价值

维度一:神经外科手术 AI 的"从 0 到 1"。 在 PitVis 出现之前,手术工作流识别研究几乎全部集中在腹腔镜普外科(如 Cholec80 胆囊切除术数据集),神经外科经蝶入路因术野小、器械形似度高、组织反光强而缺乏任何公开数据。PitVis 首次让社区可以在同一基准上比较时空模型,并证明腹腔镜领域的 SOTA 方法可迁移到这一"更难"的术式(Das et al., 2025)。对研究者而言,这是切入神经外科手术数据科学(Surgical Data Science)门槛最低的入口。

维度二:真实世界挑战的"试金石"。 与平稳推进的腹腔镜手术不同,eTSA 的步骤切换频率高且非线性——止血(haemostasis)步骤可在全程任意时点反复出现。PitVis 的基准结果清晰展示了单帧空间模型的系统性失败(Edit-score < 2%),使它成为验证时序建模、在线推理约束与预测平滑技术的理想试验场。UCL 团队正在将相关技术推向 NVIDIA 嵌入式设备的实时推理与临床前研究(UKRI Gateway to Research),PitVis 因此具有直接的转化通道。

§1.3 同类数据集横向对比

数据集 手术类型 公开视频数 标注粒度 任务标签 差异化
PitVis-2023 经鼻内窥镜垂体手术 25 训练 + 8 内部测试 逐秒 12 类步骤 + 19 类器械(多标签) 神经外科首个公开工作流基准,在线推理约束
Cholec80 腹腔镜胆囊切除术 80 逐帧(25 FPS) 7 类阶段 + 器械存在性 普外科最常用阶段识别基准
AutoLaparo 腹腔镜子宫内膜癌手术 21 逐帧 7 类任务 妇科长流程工作流
m2cai16 workflow 腹腔镜胆囊切除术 16 逐帧 多类工作流阶段 早期挑战赛数据,规模小

注:对比表中其他数据集的数字为社区通用统计值,以各数据集原始论文为准;PitVis 数字均来自官方论文(arXiv 2409.01184)。

§1.4 版本时间轴

时间 版本/事件 说明
2021-11 前驱研究(IDEAL stage 0) UCL 团队用 50 段私有视频 + Touch Surgery 建立 3 阶段/7 步骤词表(Khan et al., J Neurosurg 2022)
2022-03 方法学研究 50 段视频五折交叉验证,ResNet-50+LSTM 基线与时间平滑(Das et al., IJCAR 2022)
2023-10-08 EndoVis/PitVis-2023 挑战赛 MICCAI 2023 温哥华,9 团队 18 份投稿(arXiv 2409.01184)
2024-09 挑战赛总结论文公开 arXiv 2409.01184,同步在 Synapse 发布评测协议
2024 UCL 仓库公开发布 DOI 10.5522/04/26531686,当前 v2 版
2025-12 同行评审版刊出 Medical Image Analysis Vol.106, 103716(ScienceDirect)

§1.5 典型应用场景

  1. 手术步骤/阶段识别研究:以 12 类步骤标签训练视频分类模型,验证时空架构(CNN+LSTM、Swin+TCN、自回归 Transformer)在该术式上的表现。
  2. 器械识别与多任务学习:19 类器械的多标签识别可与步骤识别共享骨干网络,官方多任务综合指标 M3 直接支持这类比较(arXiv 2409.01184)。
  3. 自动手术记录与教学索引原型:逐秒预测结果可拼接为结构化手术时间线,用于操作记录草稿生成与手术视频按步骤检索的教学工具。
  4. 时序平滑与不确定性建模研究:数据集配套定义了预测波动性(volatility)指标与 modal/threshold 两种平滑函数,适合评测在线推理稳定性(Das et al., IJCAR 2022)。
  5. 挑战赛方法复现与算法课教学:25 段视频 + 官方 baseline 与评测脚本规模适中,适合作为研究生课程与 Kaggle 式内部竞赛的数据底座。

§2 医学背景

§2.1 ICD-11 编码映射表

本数据集的"诊断标签"不是疾病分类,而是手术步骤与器械;其对应疾病背景为垂体腺(蝶鞍区)良性肿瘤。下表给出核心概念的 ICD-11 映射:

概念 ICD-11 引用 中文名称 备注
垂体腺良性肿瘤 ICD-11 foundation entity 1871539651 垂体腺良性肿瘤 ICD-10-CM 对应 D35.2;PitVis 视频对应的手术适应证
垂体腺瘤(组织学主体) ICD-O 形态学编码 8272/0 垂体腺瘤 前叶腺上皮来源的良性肿瘤(Disease Ontology DOID:3829)
经蝶入路垂体切除术(手术场景) ICD-11 手术操作章节相关概念 经鼻内窥镜经蝶入路 本数据集全部视频采用的术式(eTSA)

§2.1b SNOMED CT 映射表

标签/概念 ICD-11 引用 SNOMED CT 术语
垂体腺瘤 ICD-O 8272/0 254956000 Pituitary adenoma (disorder)
垂体肿瘤(广义) entity 1871539651 127024001 Neoplasm of pituitary gland (disorder)
垂体腺良性肿瘤 entity 1871539651 92296004 Benign neoplasm of pituitary gland (disorder)

编码来源:NCBI MedGen C0032000 与 MONDO:0021439 交叉引用。使用前请以 SNOMED International 官方浏览器核对当前版本。

§2.2 疾病简介与流行病学

垂体腺瘤是起源于腺垂体(前叶)的良性上皮性肿瘤,临床上按激素分泌功能分为功能性(泌乳素瘤、生长激素瘤、ACTH 瘤等)与无功能性腺瘤。肿瘤向上生长可压迫视交叉引起视野缺损,功能性腺瘤则引起相应的内分泌亢进综合征。挑战赛官方资料引述:临床上显著的垂体肿瘤在人群中的估计患病率约为千分之一,若不治疗可致残致死(EndoVis 2023 / Awesome-Medical-Dataset 转述)。

经鼻内窥镜经蝶入路(endoscopic TransSphenoidal Approach, eTSA)是目前垂体腺瘤切除的"金标准"术式:内窥镜经鼻腔、蝶窦直达蝶鞍,无需开颅。该术式对手术协作要求极高——术野仅数厘米且常被血液、冲洗液与器械遮挡,步骤与器械切换频繁(Khan et al., J Neurosurg 2022)。这正是计算机视觉辅助(步骤提示、器械计数、自动手术记录)具有临床想象空间的原因。

§2.3 临床任务定义

PitVis 支撑的不是"筛查/诊断"任务,而是**手术工作流分析(Surgical Workflow Analysis, SWA)**三件套(Das et al., 2025):

任务 定义 输出 典型临床用途
步骤识别(Task 1) 对每秒视频帧分类到 12 类手术步骤(多分类) 逐秒步骤标签序列 手术教学自动索引、流程效率分析、异常提示
器械识别(Task 2) 对每秒帧识别最多两把在用器械(多标签,19 类) 逐秒器械标签 器械使用统计、护士 anticipated-ready 配合、耗材分析
多任务识别(Task 3) 单一模型同时输出步骤与器械预测 双输出序列 端到端手术 AI 助手(受算力与在线约束)

三个任务均为**在线(online)**设定:模型只允许使用当前帧及之前帧的信息,禁止使用未来帧——这与术中实时应用场景一致,也是 PitVis 评测协议区别于离线视频理解基准的核心特征(arXiv 2409.01184)。

§2.4 患者人群

维度 描述
来源机构 英国伦敦 National Hospital for Neurology and Neurosurgery(NHNN,UCLH 旗下)
手术时间 公开训练集 2021-07 至 2022-12;内部测试集 2018-12 至 2021-01(arXiv 2409.01184)
手术类型 经鼻内窥镜经蝶入路垂体(腺瘤)切除术
年龄/性别/种族 官方论文未公布人口统计学明细(视频已脱敏,无患者级元数据)
就医类型 三级转诊神经外科中心的择期肿瘤切除手术

§2.5 临床价值

基于 PitVis 训练的工作流识别模型可直接支撑三类临床场景:其一,教学与考核——自动将手术录像按步骤切分、统计术者操作时长分布,替代人工回看(前驱研究中步骤时长中位数:鞍区操作 28 分钟、鼻腔阶段 22 分钟、关闭阶段 14 分钟,Khan et al., J Neurosurg 2022);其二,手术记录自动化——生成结构化操作时间线草稿,降低文书负担;其三,术中辅助——实时步骤提示帮助洗手护士预判下一步器械需求、并为低年资术者提供流程上下文。这些场景均以"在线推理 + 时序稳定预测"为硬约束,也正是 PitVis 评测协议的设计初衷。

§2.6 金标准参考表

维度 划分 标注方式 标注者 性质
步骤标注 逐秒 人工双标注 + 共识 两名神经外科受训医师(DZK、JGH) 评测金标准
器械标注 逐秒 第三方标注公司 + 双重核验 Anolytics;受训医师 DZK + 研究员 AD 核验 评测金标准
最终审核 全量 专家审核 顾问神经外科医师(HJM) 质量兜底
步骤词表 14 条词表,12 类参与评测 Delphi 式词表定义(前驱研究确立 3 阶段/7 步骤后扩展) UCL 临床团队 官方分类学(HuggingFace 数据卡)

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐获取渠道 视频数 理由
复现挑战赛训练侧基准 UCL 仓库 DOI 10.5522/04/26531686(v2) 25 官方原始分发,含全部 CSV 标注与元数据
快速上手 / 教学演示 HuggingFace UCL-WEISS/PitVis-2023 25 load_dataset 一行加载,自带步骤/器械映射表
参加官方评测 / 提交模型 Synapse syn51232283 25 + 8(测试不公开) Docker 提交通道与官方评测脚本所在
研究挑战赛设计与报告规范 EndoVis 2023 官方页 + Zenodo 10.5281/zenodo.8315050 — 全部 2023 子挑战的统一引用与 BIAS 报告规范

§3.1 模态详情

单一模态:内窥镜手术视频。原始录制来自 Karl Storz Hopkins 硬性望远镜与 AIDA 存储系统,帧率与分辨率随设备代次变化(720p 至 2160p、可变 FPS)。所有视频经统一后处理:上传 Medtronic Touch Surgery Ecosystem 完成脱敏(患者体外区域模糊),HandBrake 转码为恒定 24 FPS、1280×720 的 H.264 MP4。官方 GitHub 提供 1 FPS 抽帧脚本,将视频转为逐秒 PNG 序列供模型消费(arXiv 2409.01184)。

§3.2 子集与样本数

子集 视频数 可见性 用途
公开训练集 25 公开下载 训练 + 自行验证(官方建议其中 5 段作验证:01、12、21、24、25)
内部测试集 8 组织方保留,不公开 挑战赛与后续官方评测
挑战赛投稿 18 份模型 / 9 团队 / 6 国 结果公开 基准比较(arXiv 2409.01184)

§3.3 数据格式

文件类型 格式 说明
手术视频 video_{n}.mp4(n = 1-25) 24 FPS、1280×720、HandBrake 转码
步骤+器械标注 annotations_{n}.csv 逐秒一行:int_video, int_time, int_step, int_instrument1, int_instrument2
步骤映射 map_steps.csv 整数标签 → 步骤英文名(14 条词表 + 特殊码)
器械映射 map_instrument.csv 整数标签 → 器械英文名(19 类 + 特殊码)
视频元数据 video_encoder_details.txt 转码参数说明
抽帧产物(可选) PNG(1 FPS) 官方脚本生成;挑战赛测试集即以该形式输入模型

§3.3b 完整标签词表

训练与建模前必须掌握的两张官方词表(来源:HuggingFace 数据卡 转载的 map_steps.csv 与 map_instrument.csv)。

手术步骤词表(14 条 + 特殊码,评估使用 12 类):

标签 英文名称 中文名称 参与评测
-1 operation_not_started / operation_ended / out_of_patient 手术未开始 / 已结束 / 患者体外 否(剔除)
1 nasal_corridor_creation 鼻腔通道建立 是
2 anterior_sphenoidotomy 蝶窦前壁开放 是
3 septum_displacement 鼻中隔移位 是
4 sphenoid_sinus_clearance 蝶窦清理 是
5 sellotomy 鞍底开窗 是
6 durotomy 硬膜切开 是
7 tumour_excision 肿瘤切除 是
8 haemostasis 止血 是
9 synthetic_graft_placement 人工移植物放置 是
10 fat_graft_placement 脂肪移植物放置 是
11 gasket_seal_construct 垫圈式重建 否(样本不足移除)
12 dural_sealant 硬膜封闭剂 是
13 nasal_packing 鼻腔填塞 否(样本不足移除)
14 debris_clearance 碎屑清理 是

器械词表(19 类多标签 + 特殊码):

标签 英文名称 中文名称
-2 no_secondary_instrument 无第二把器械
-1 out_of_patient 患者体外
0 no_visible_instrument / occluded_image_inside_patient 无可见器械 / 患者体内但画面被遮挡
1 bipolar_forceps 双极电凝镊
2 cottle Cottle 鼻中隔刀
3 cup_forceps 杯状钳
4 dural_scissors 硬膜剪
5 freer_elevator Freer 剥离器
6 haemostatic_foam 止血海绵/泡沫
7 irrigation_syringe 冲洗注射器
8 kerrisons Kerrison 咬骨钳
9 micro_doppler 微型多普勒探头
10 nasal_cutting_forceps 鼻腔剪切钳
11 pituitary_rongeurs 垂体咬钳
12 retractable_knife 伸缩刀
13 ring_curette 环形刮匙
14 spatula_dissector 铲状剥离器
15 stealth_pointer Stealth 导航探针
16 suction 吸引器
17 surgical_drill 手术钻
18 tissue_glue 组织胶水

前驱研究确立的 3 大阶段与上述 12 步骤的对应关系(用于阶段级汇总分析):鼻腔阶段 ≈ 步骤 1-3;鞍区阶段 ≈ 步骤 4-8;关闭阶段 ≈ 步骤 9-14。该映射为分析便利而设,官方未作为标签发布(阶段划分依据 Khan et al., J Neurosurg 2022)。

§3.4 存储大小

数据集以 30 余个独立文件分发(每段视频一个 MP4 文件 + 配套 CSV),官方页面未公布压缩包总大小;按 25 段、平均约 70 分钟、720p/24 FPS 的 H.264 视频估算,视频本体通常在数十 GB 量级,下载前请预留磁盘空间(估算依据见数据仓库文件列表)。

§3.5 标注方式

全人工标注,逐秒粒度。步骤与器械两类标签均带特殊编码:-1 表示"患者体外"(如镜头擦拭、手术室画面),-2 表示"无第二把器械",0 表示"患者体内但无可见器械/图像被遮挡"。评测时 -1 帧一律剔除(arXiv 2409.01184)。

§3.6 标注者资质与一致性

步骤标注由两名接受神经外科训练的医师(受训医师)独立完成,分歧经讨论共识解决;器械标注由专业标注公司 Anolytics 完成,因非临床出身,额外经一名神经外科受训医师与一名研究员核验;全部标注最终由顾问级神经外科医师审核后方可发布。官方论文指出标注的主要误差来源是人眼对步骤/器械的误判,通过多轮标注与核验压低,且发布后发现错误会立即更正并通知参与者;论文未公布标注者间一致性统计量(如 Cohen’s kappa)(arXiv 2409.01184)。

§3.7 采集周期

视频采集跨越约四年:内部测试集最早录制于 2018-12-06,公开训练集最晚录制于 2022-12-28。期间手术器械组合与术者构成存在自然演变,这是分析数据漂移时必须考虑的因素(arXiv 2409.01184)。

§3.8 地域覆盖

单中心:英国伦敦 NHNN。无多中心、多地域数据。

§3.9 设备规格

录制链路:Karl Storz Hopkins 望远镜 + Karl Storz AIDA 存储系统(英国);后处理:Touch Surgery Ecosystem(Medtronic/Digital Surgery)云平台;转码:HandBrake(开源);评测硬件:单核 NVIDIA Tesla V100 32GB(arXiv 2409.01184)。

§3.10 深度溯源链

患者 → NHNN 择期 eTSA 手术(书面同意研究使用) → 望远镜+AIDA 原始录制(可变 FPS,720p-2160p) → Touch Surgery Ecosystem 上传与脱敏(体外模糊) → HandBrake 统一转码(24 FPS、720p MP4) → 逐秒人工标注(步骤:双医师共识;器械:Anolytics+核验) → 顾问医师终审 → UCL 仓库公开发布(CC BY-NC-SA 4.0,arXiv 2409.01184)。


§4 数据结构

§4.0 目录树

解压后目录结构如下(n 为视频编号 01-25):

pitvis/
├── video_01.mp4                  # 手术视频(24 FPS, 1280x720)
├── video_02.mp4
├── ...
├── video_25.mp4
├── annotations_01.csv            # 逐秒步骤+器械标注
├── annotations_02.csv
├── ...
├── annotations_25.csv
├── map_steps.csv                 # 步骤整数标签 -> 英文名
├── map_instrument.csv            # 器械整数标签 -> 英文名
└── video_encoder_details.txt     # 转码与编码元数据

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
int_video Integer 视频编号 25 样本分组键 无 无 1-25
int_time Integer 视频内秒偏移 2012 时间轴对齐 转码后秒粒度,亚秒信息丢失 无 0-视频时长
int_step Integer 手术步骤标签 5 Task 1 分类目标 人眼误判(多轮标注压低) -1=out_of_patient / 未开始 / 结束 -1, 1-14
int_instrument1 Integer 第一把器械标签 16 Task 2 多标签目标 标注公司初标+双人核验 0=无可见器械/遮挡,-1=患者体外 -1, 0-18
int_instrument2 Integer 第二把器械标签 8 Task 2 多标签目标 同上 -2=无第二把器械 -2, -1, 0-18
map_steps.csv 映射表 步骤标签→英文名 5 = sellotomy 类别名解码 无 无 14 行
map_instrument.csv 映射表 器械标签→英文名 16 = suction 类别名解码 无 含特殊码行 22 行
video_encoder_details.txt 元数据 转码参数 24 FPS/720p 复现预处理 无 无 —

§4.2 标签分布

社区镜像(Awesome-Medical-Dataset)对 1 FPS 抽帧产物(共 120,024 张 PNG)的逐秒标签统计如下(来源;与官方 CSV 可能存在小差异,训练前请以仓库内 annotations_*.csv 实测为准):

标签 步骤名称 秒数
-1 operation_ended / out_of_patient 等 10,851
1 nasal_corridor_creation 2,902
2 anterior_sphenoidotomy 11,243
3 septum_displacement 1,386
4 sphenoid_sinus_clearance 18,336
5 sellotomy 17,132
6 durotomy 6,431
7 tumour_excision 28,836
8 haemostasis 14,117
9 synthetic_graft_placement 3,536
10 fat_graft_placement 2,388
11 gasket_seal_construct 841(评测移除:样本不足)
12 dural_sealant 910
13 nasal_packing 72(评测移除:样本不足)
14 debris_clearance 1,043

§4.3 关键统计

  • 公开训练视频 25 段:平均 72.8±7.2 分钟(不含患者体外时间),中位 69.2±6.4 分钟;内部测试视频 8 段:平均 60.9±5.6 分钟、中位 65.7±5.3 分钟(arXiv 2409.01184)。
  • 全部视频统一为 1280×720 @ 24 FPS;官方按 1 FPS 抽帧后共约 120,024 帧可用(社区镜像统计,来源)。
  • 器械分布极端不平衡:no_visible_instrument 与 suction(吸引器)在时间上占主导,稀有器械(如 surgical_drill 手术钻)样本极少(挑战赛总结)。
  • 前驱研究显示仅约 50% 的手术按词表编号顺序线性执行全部步骤——止血等步骤可在全程反复插入(Khan et al., J Neurosurg 2022)。
  • 官方论文附有步骤转移概率矩阵(如步骤 4 → 步骤 5 的转移概率为 54%),可用于构建时序先验或校验预测序列合理性(arXiv 2409.01184)。
  • 类别极少与极多的差距超过三个数量级(步骤 7 约 28,836 秒 vs 步骤 13 约 72 秒),任何基于均匀类先验的采样或损失设计都需重新校准(镜像统计)。

§4.4 数据层级

机构(NHNN,单中心)
└── 患者/手术(1 段视频 = 1 例手术)
    └── 视频(24 FPS MP4,约 60-75 分钟)
        └── 秒(标注粒度,int_time)
            └── 帧(24 帧/秒,视频原生;1 FPS 抽帧后每秒 1 帧 PNG)

§4.5 缺失值与信息性缺失编码

编码 出现字段 含义 评测处理
-1 int_step out_of_patient / operation_not_started / operation_ended 帧被剔除,不参与指标计算
-1 int_instrument* out_of_patient 同上
0 int_instrument* 患者体内但无可见器械 / 图像被遮挡 参与评测(算作合法类别)
-2 int_instrument2 无第二把器械 参与评测(合法类别)

官方文档明确"A -2 in the int_instrument2 column is indicative of no annotation"——它不是数据缺失错误,而是一种信息性编码(arXiv 2409.01184)。


§5 划分与使用建议

§5.1 官方划分

挑战赛官方给出建议但未强制的划分:25 段公开视频中取 20 段训练、5 段验证(视频编号 01、12、21、24、25);划分按步骤与器械标签分布设计,使各类别标注量保持约 4:1 的训练/验证比例,与工作流识别领域惯例一致。8 段测试视频全程未向参赛者提供,仅以 1 FPS PNG 序列经 Docker 提交评测(arXiv 2409.01184)。

§5.2 社区惯例划分

社区存在两类做法:其一沿用官方 20/5 视频级划分;其二(如部分镜像教程)将 1 FPS 抽帧产物按约 8:2 随机划分为图像级训练/验证集。后者实现简单但存在下文 §5.3 所述的严重泄漏问题,仅适合快速调通管线,不宜用于报告指标。

§5.3 划分策略与泄漏风险(重点)

  • 帧级随机划分 = 硬泄漏:相邻秒的帧几乎相同(24 FPS 视频每秒 24 帧,画面变化极小),按图像随机划分会让验证集充斥训练集的"孪生帧",指标虚高数十分位。正确做法是以视频为单位划分。
  • 同一术者跨视频:单中心数据中同一术者可能参与多段视频,严格实验可按术者分组做分组交叉验证(术者身份官方未逐段公布,需注意该维度不可精确控制)。
  • "患者体外"帧的处理:这些帧(镜头擦拭、手术室画面)不属于任何手术步骤,训练与评测均应剔除 -1,否则模型会把"擦镜头"学成一个步骤类。
  • 时间平滑后再评测:官方指标包含 Edit-score,先出原始帧级预测、再叠加平滑函数是协议内操作;但平滑参数只能在验证集上调,不能触碰官方测试提交。

§5.4 交叉验证建议

按视频分组做五折交叉验证(每次约 20/5 段),保持各类别秒数比例近似(分层按视频聚合标签分布)。参考前驱研究:50 段视频五折下 ResNet-50+LSTM weighted-F1 为 0.84(3 阶段)/ 0.74(7 步骤),可作为基线量级预期(Das et al., IJCAR 2022)。

# 官方 20/5 划分 + 按视频聚合的分层五折(防泄漏关键:group=视频编号)
import pandas as pd
import numpy as np
from sklearn.model_selection import StratifiedGroupKFold

DATA_ROOT = "/data/pitvis"
OFFICIAL_VAL_IDS = {1, 12, 21, 24, 25}   # 官方建议验证集(arXiv 2409.01184)

def load_all_labels(data_root: str) -> pd.DataFrame:
    frames = []
    for vid in range(1, 26):
        ann = pd.read_csv(f"{data_root}/annotations_{vid:02d}.csv")
        ann["video_id"] = vid
        frames.append(ann)
    return pd.concat(frames, ignore_index=True)

ann_all = load_all_labels(DATA_ROOT)
# 每段视频的"主导步骤"作为分层依据,视频编号作为组
video_dom = (ann_all[ann_all.int_step != -1]
             .groupby("video_id")["int_step"]
             .agg(lambda s: s.value_counts().idxmax()))
groups = video_dom.index.to_numpy()
y = video_dom.to_numpy()
sgkf = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=42)
for fold, (tr, va) in enumerate(sgkf.split(groups, y, groups)):
    print(f"fold {fold}: val_videos={sorted(groups[va])}")
# 注意:官方验证集 5 段应始终保留一份"金标准"划分结果,五折仅用于稳健性分析

§5.5 外部验证建议

PitVis 是该术式唯一公开数据集,外部验证只能通过:(1) 其他中心的私有 eTSA 视频;(2) 跨术式迁移实验(如在 Cholec80 上预训练再微调);(3) 官方测试通道(若重新开放)。建议在论文中同时报告训练集五折与官方测试分数,并明确标注二者不可互相替代。

§6 AI 就绪指南 ⭐

§6.0 云端快速启动

在 Colab/Kaggle 中可直接从 HuggingFace 镜像加载(约需较大磁盘配额,建议挂载持久化目录):

# Google Colab / Kaggle 快速验证(视频为 MP4,建议先拉取 CSV 标注做 EDA)
import os
os.environ["HF_DATASETS_CACHE"] = "/content/pitvis_cache"
from datasets import load_dataset
# 镜像数据卡:https://huggingface.co/datasets/drdreets/PitVis-2023
ds = load_dataset("drdreets/PitVis-2023")   # 内含加载说明与划分建议
print(ds)

若只需标签映射表(几 KB),可从 UCL 仓库单独下载 map_steps.csv 与 map_instrument.csv,无需拉取全部视频。

下载完成后,建议先做一次数据审计(EDA)再开训练——以下脚本汇总每段视频的时长、有效标注秒数与类别分布,是发现"编码误用/划分泄漏"类问题最快的方式:

# EDA:全量 25 段视频的标注审计(时长/有效秒数/类别分布/特殊码占比)
import os
import pandas as pd
import matplotlib.pyplot as plt

DATA_ROOT = "/data/pitvis"

rows = []
for vid in range(1, 26):
    ann = pd.read_csv(os.path.join(DATA_ROOT, f"annotations_{vid:02d}.csv"))
    rows.append({
        "video": vid,
        "total_s": len(ann),
        "valid_s": int((ann.int_step != -1).sum()),
        "out_pct": round(100 * (ann.int_step == -1).mean(), 1),
        "n_steps_seen": ann.loc[ann.int_step != -1, "int_step"].nunique(),
        "no_inst2_pct": round(100 * (ann.int_instrument2 == -2)
                              .clip(upper=1).mean(), 1),
    })
eda = pd.DataFrame(rows)
print(eda.to_string(index=False))
print("\n总有效秒数:", eda.valid_s.sum())

# 类别分布直方图(对数刻度,直观呈现三个数量级的不平衡)
ann_all = pd.concat(
    [pd.read_csv(os.path.join(DATA_ROOT, f"annotations_{v:02d}.csv"))
     for v in range(1, 26)], ignore_index=True)
step_counts = (ann_all.loc[ann_all.int_step != -1, "int_step"]
               .value_counts().sort_index())
ax = step_counts.plot(kind="bar", logy=True, figsize=(10, 4), color="#2563EB")
ax.set_xlabel("int_step"); ax.set_ylabel("seconds (log)")
ax.set_title("PitVis step label distribution (log scale)")
plt.tight_layout(); plt.savefig("pitvis_step_dist.png", dpi=150)

审计输出中重点检查三件事:(1) out_pct 过高(>20%)的段落视频,说明大量时间花在患者体外;(2) n_steps_seen 少于 8 的视频,可能在分层划分时把稀有类整体挤进单折;(3) no_inst2_pct 接近 100% 的段落多为简单步骤时段,器械识别训练时权重应下调。

§6.1 快速上手

下面的代码假设你已经把 25 个 video_{n}.mp4 与 annotations_{n}.csv 下载到本地同一目录。目录结构预期:data_root 直接指向包含视频与 CSV 的扁平目录(见 §4.0 目录树);data_root 与文件名的拼接关系为 os.path.join(data_root, f"video_{n:02d}.mp4")。最小可用子集:先只用 1 段视频(如 video_01.mp4)+ 对应 CSV 跑通"抽帧→对齐→取批"闭环,再扩展到全部 25 段。

# 快速上手:加载单视频 + 逐秒标注,并抽出训练帧索引
import os
import pandas as pd
import cv2

DATA_ROOT = "/data/pitvis"          # 视频与 CSV 所在的扁平目录
video_id = 1

csv_path = os.path.join(DATA_ROOT, f"annotations_{video_id:02d}.csv")
ann = pd.read_csv(csv_path)          # 列: int_video, int_time, int_step, int_instrument1, int_instrument2
vid_path = os.path.join(DATA_ROOT, f"video_{video_id:02d}.mp4")

# 1) 读取视频帧率,确认与标注粒度(1 秒)的对齐关系
cap = cv2.VideoCapture(vid_path)
fps = cap.get(cv2.CAP_PROP_FPS)      # 应为 24
print(f"fps={fps}, duration_s={cap.get(cv2.CAP_PROP_FRAME_COUNT)/fps:.1f}")

# 2) 过滤掉患者体外帧(-1),得到有效训练样本(秒 -> 标签)
valid = ann[ann["int_step"] != -1].copy()
print(valid.head())                  # 每行 = 1 秒:step + 最多 2 把器械
cap.release()

§6.2 数据获取

渠道 方式 大小 前置条件
UCL 仓库(官方) 浏览器或 wget 逐文件下载 26531686 30 余个文件,数十 GB 级 无(免费,无需注册)
HuggingFace 镜像 load_dataset("drdreets/PitVis-2023") 同上 无
Synapse(挑战赛) syn51232283 注册 + Docker 提交 训练集同上 + 官方评测 注册账号
# 从 UCL 仓库批量下载(文件列表见仓库页面,此处示例下载第 1 段视频与其标注)
import subprocess
BASE = "https://rdr.ucl.ac.uk/articles/dataset/PitVis_Challenge_Endoscopic_Pituitary_Surgery_videos/26531686"
# 注意:figshare 分发为逐文件下载,实际直链需在仓库页面点击对应文件获取
subprocess.run(["wget", "-P", "/data/pitvis",
                f"{BASE}/files?download=1"], check=False)

注意:UCL/figshare 的逐文件直链随版本变化,请以仓库页面实际显示的下载按钮为准;大规模脚本化下载前建议先人工确认单文件直链格式。

§6.3 预处理全流程

流程:视频 → 1 FPS 抽帧 → 尺寸校验 → 可选 CLAHE 增强 → 标签对齐 → 保存为训练索引。官方 baseline 使用了 CLAHE(限制对比度自适应直方图均衡)作为预处理组件之一(arXiv 2409.01184 缩略词表)。

# 预处理:1 FPS 抽帧并保存 PNG(与官方脚本思路一致)
import os
import cv2

def extract_1fps(video_path: str, out_dir: str) -> None:
    os.makedirs(out_dir, exist_ok=True)
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)          # 24
    step = max(int(round(fps)), 1)           # 每 24 帧取 1 帧
    idx, saved = 0, 0
    while True:
        ok, frame = cap.read()
        if not ok:
            break
        if idx % step == 0:
            assert frame.shape[:2] == (720, 1280), frame.shape  # 统一尺寸校验
            cv2.imwrite(os.path.join(out_dir, f"{saved:06d}.png"), frame)
            saved += 1
        idx += 1
    cap.release()
    print(f"saved {saved} frames (1 FPS) -> {out_dir}")

extract_1fps("/data/pitvis/video_01.mp4", "/data/pitvis/frames_01")
# 可选:CLAHE( HSV 空间 V 通道),组织对比度较低的内窥镜画面常有收益
import cv2
import numpy as np

def clahe_bgr(img_bgr: np.ndarray, clip_limit: float = 2.0,
              grid: tuple = (8, 8)) -> np.ndarray:
    hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
    hsv[:, :, 2] = cv2.createCLAHE(clipLimit=clip_limit,
                                   tileGridSize=grid).apply(hsv[:, :, 2])
    return cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

§6.4 PyTorch DataLoader 完整代码

<details>
<summary>展开完整 Dataset + DataLoader 代码(约 90 行)</summary>

# 目录结构预期:
#   /data/pitvis/video_{n:02d}.mp4
#   /data/pitvis/annotations_{n:02d}.csv
# data_root 与文件名的拼接关系:os.path.join(data_root, pattern.format(n))
# 最小可用子集:video_ids=[1] 即可跑通;建议官方验证集 video_ids=[1,12,21,24,25]
import os
import cv2
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)

class PitVisStepDataset(Dataset):
    """按秒对齐的手术步骤识别数据集(Task 1)。

    每个样本 = 视频第 t 秒对应的 1 FPS 帧 + 该秒的步骤标签。
    标签 -1(患者体外/未开始/结束)在构建索引时即被剔除。
    """

    def __init__(self, data_root: str, video_ids: list,
                 num_classes: int = 15, img_size: int = 224):
        self.data_root = data_root
        self.img_size = img_size
        # int_step 取值 -1..14,映射到 0..14 的连续索引
        self.num_classes = num_classes
        self.samples = []  # (frame_path, step_label_idx)
        self.tf = transforms.Compose([
            transforms.ToPILImage(),
            transforms.Resize((img_size, img_size)),
            transforms.ToTensor(),
            transforms.Normalize(IMAGENET_MEAN, IMAGENET_STD),
        ])
        for vid in video_ids:
            csv_path = os.path.join(data_root, f"annotations_{vid:02d}.csv")
            ann = pd.read_csv(csv_path)
            frame_dir = os.path.join(data_root, f"frames_{vid:02d}")
            # 1 FPS 抽帧目录需与标注秒序对齐:第 t 秒 -> frames/{t:06d}.png
            for t, step in zip(ann["int_time"], ann["int_step"]):
                if step == -1:          # 患者体外帧:剔除
                    continue
                frame_path = os.path.join(frame_dir, f"{int(t):06d}.png")
                if os.path.exists(frame_path):
                    self.samples.append((frame_path, int(step)))
        assert self.samples, "索引为空:请先运行 1 FPS 抽帧预处理"

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

    def __getitem__(self, i):
        frame_path, step_idx = self.samples[i]
        img = cv2.cvtColor(cv2.imread(frame_path), cv2.COLOR_BGR2RGB)
        return self.tf(img), torch.tensor(step_idx, dtype=torch.long)

def make_loaders(data_root: str, batch_size: int = 32,
                 num_workers: int = 8):
    train_ids = [i for i in range(1, 26) if i not in {1, 12, 21, 24, 25}]
    val_ids = [1, 12, 21, 24, 25]          # 官方建议验证集(arXiv 2409.01184)
    train_ds = PitVisStepDataset(data_root, train_ids)
    val_ds = PitVisStepDataset(data_root, val_ids)
    return (DataLoader(train_ds, batch_size=batch_size, shuffle=True,
                       num_workers=num_workers, pin_memory=True, drop_last=True),
            DataLoader(val_ds, batch_size=batch_size, shuffle=False,
                       num_workers=num_workers, pin_memory=True))

if __name__ == "__main__":
    train_loader, val_loader = make_loaders("/data/pitvis")
    for imgs, labels in train_loader:      # imgs: (B,3,224,224) labels: (B,)
        print(imgs.shape, labels[:8])
        break

</details>

器械识别(Task 2)只需将 int_step 换成 int_instrument1、int_instrument2 两列做多标签展开(19 维向量,特殊码 0/-1/-2 各自成类),其余流程一致。

<details>
<summary>展开器械多标签 Dataset 代码(约 60 行)</summary>

# 器械识别(Task 2)多标签数据集:
#   int_instrument1/2 两列展开为 19 维多标签向量;
#   特殊码映射:-1 -> 剔除(患者体外),0/-2 -> 各自保留为合法类别索引。
# 标签空间(共 19 类索引 0..18):
#   0=no_visible_instrument/occluded, 1..18=真实器械(bipolar_forceps..tissue_glue),
#   19=no_secondary_instrument(-2,仅 int_instrument2 列)
import os
import cv2
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset

class PitVisInstrumentDataset(Dataset):
    """逐秒器械多标签数据集。标签向量长度 19。"""

    def __init__(self, data_root: str, video_ids: list, img_size: int = 224):
        self.data_root = data_root
        self.img_size = img_size
        self.samples = []  # (frame_path, multihot: np.ndarray[19])
        for vid in video_ids:
            ann = pd.read_csv(os.path.join(data_root, f"annotations_{vid:02d}.csv"))
            frame_dir = os.path.join(data_root, f"frames_{vid:02d}")
            for t, i1, i2 in zip(ann["int_time"], ann["int_instrument1"],
                                 ann["int_instrument2"]):
                if i1 == -1:                      # 患者体外帧:剔除
                    continue
                label = np.zeros(19, dtype=np.float32)
                for code in (i1, i2):
                    if code == -2 or code == -1:  # 无第二把器械:不算类别
                        continue
                    label[int(code)] = 1.0        # 0..18 直接作为索引
                frame_path = os.path.join(frame_dir, f"{int(t):06d}.png")
                if os.path.exists(frame_path):
                    self.samples.append((frame_path, label))

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

    def __getitem__(self, i):
        frame_path, label = self.samples[i]
        img = cv2.cvtColor(cv2.imread(frame_path), cv2.COLOR_BGR2RGB)
        img = cv2.resize(img, (self.img_size, self.img_size))
        img = torch.from_numpy(img).permute(2, 0, 1).float() / 255.0
        return img, torch.from_numpy(label)

</details>

<details>
<summary>展开时序窗口(在线约束)Dataset 代码(约 50 行)</summary>

# 时序窗口数据集:模拟官方在线约束(仅当前及历史帧)。
# 每个样本 = 连续 L 秒的帧窗口(当前秒为窗口最后一秒)+ 当前秒标签。
# 训练可用随机时窗裁剪;验证/推理固定滑动窗口,避免使用未来帧。
import os
import random
import numpy as np
import torch
from torch.utils.data import Dataset

class PitVisWindowDataset(Dataset):
    def __init__(self, per_video_seconds: dict, window: int = 32):
        """per_video_seconds: {video_id: [(frame_path, step_idx), ...]},
        由 §6.4 的索引逻辑按视频分组生成。"""
        self.window = window
        self.index = []  # (video_id, end_pos)
        for vid, seconds in per_video_seconds.items():
            for end in range(window - 1, len(seconds)):
                self.index.append((vid, end))
        self.data = per_video_seconds

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

    def __getitem__(self, i):
        vid, end = self.index[i]
        seconds = self.data[vid]
        start = end - self.window + 1
        start = max(0, start)                       # 序列头部 pad
        idxs = list(range(start, end + 1))
        while len(idxs) < self.window:              # 头部重复首帧补齐
            idxs.insert(0, idxs[0])
        frames = np.stack([self._load(self.data[vid][j][0]) for j in idxs])
        label = self.data[vid][end][1]              # 只预测当前秒
        return torch.from_numpy(frames), torch.tensor(label, dtype=torch.long)

    @staticmethod
    def _load(path: str) -> np.ndarray:
        import cv2
        img = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB)
        return cv2.resize(img, (224, 224)).transpose(2, 0, 1)

    # 提示:训练时可在 __getitem__ 前加随机起点抖动(±1-2 秒)做时序增强,
    # 但绝不可将窗口终点移到当前秒之后——那会违反在线约束。

</details>

§6.5 坑点 8 个

⚠️ 坑点 1:图像级随机划分导致指标虚高(分类:数据泄漏)

问题:把 1 FPS 抽帧后的约 120,024 张 PNG 按图像随机 8:2 划分,相邻秒帧几乎相同,验证集成为训练集的"孪生帧集合",步骤识别准确率可虚高数十分位。
症状:验证 F1 接近 1.0,模型在整段未见视频上的表现断崖式下跌;预测在真视频上抖动严重。
解决:

  1. 简单方法:始终以视频为单位划分(官方 20/5:验证集取视频 01、12、21、24、25)。
  2. 进阶方法:五折按视频分组交叉验证,并按各类别秒数分层,保证稀有类不整体落入单折。
  3. SOTA 方法:如研究跨术者泛化,按术者分组划分;由于官方未逐段公布术者,需在论文中声明该限制。
    参考:官方划分设计 arXiv 2409.01184;前驱研究五折协议 Das et al., IJCAR 2022

⚠️ 坑点 2:特殊编码 -1/-2/0 混淆(分类:标签理解)

问题:int_step 的 -1(患者体外/未开始/结束)、int_instrument 的 0(无可见器械/遮挡)与 -2(无第二把器械)含义各不相同,混为一谈会引入幽灵类别或误删合法样本。
症状:混淆矩阵多出莫名行;评测脚本报类别数不匹配;把 -2 当 NaN 处理后崩溃。
解决:

  1. 简单方法:写死三张查找表——步骤 -1 剔除;器械 0 与 -2 保留为合法类别。
  2. 进阶方法:加载后立即断言:set(map_instrument.keys()) 与 CSV 出现值一致;对每列打印唯一值审计。
  3. SOTA 方法:在数据卡中记录编码审计脚本输出,作为可复现工件随代码提交。
    参考:标注格式说明 arXiv 2409.01184;HuggingFace 数据卡

⚠️ 坑点 3:患者体外帧未剔除(分类:预处理陷阱)

问题:-1 帧是镜头擦拭、手术室全景等无手术语义画面,若参与训练,模型会花容量学习一个"垃圾类",且评测协议要求剔除。
症状:训练损失下降但 Macro-F1 上不去;推理视频开头/结尾大段被预测为同一类。
解决:

  1. 简单方法:训练与评测前统一 df = df[df.int_step != -1]。
  2. 进阶方法:抽帧时按标注直接跳过对应秒,节省磁盘与 IO。
  3. SOTA 方法:若研究"手术外画面检测"本身,可单设二分类头,与主任务解耦。
    参考:官方评测明确排除 -1 帧 arXiv 2409.01184

⚠️ 坑点 4:逐秒标签与 24 FPS 视频错位(分类:工程陷阱)

问题:标注粒度为秒,视频为 24 FPS;直接用帧号当秒索引(frame_id vs int_time)会引入最多 23 帧的系统错位。
症状:可视化抽查发现标签"漂移";边界秒的预测系统性地滞后一拍。
解决:

  1. 简单方法:统一以 int_time 为时间轴,抽帧时第 t 秒取 frame_id = round(t * fps)。
  2. 进阶方法:对边界秒(±1 秒)做标签平滑(soft label),缓解人工标注本身的秒级抖动。
  3. SOTA 方法:训练时在视频内做随机时窗裁剪并只用窗中心秒标签,增强时序鲁棒性。
    参考:标注协议 arXiv 2409.01184

⚠️ 坑点 5:极端类别不平衡下的 Micro-F1 幻觉(分类:评估误用)

问题:no_visible_instrument 与 suction 占据时间分布主导,稀有类(surgical_drill 等)几乎不可见;用 Micro/Weighted-F1 会被大类淹没,器械识别实际冠军 Macro-F1 仅 41.7%。
症状:Micro-F1 高达 0.9+,但稀有类 F1 为 0,实用价值存疑。
解决:

  1. 简单方法:只报告官方 Macro-F1(对每类等权)。
  2. 进阶方法:稀有类过采样(按秒采样权重反比类频率)+ focal loss,验证集用 Macro-F1 早停。
  3. SOTA 方法:多任务学习借步骤先验提升器械识别(官方多任务较单任务 Macro-F1 提升 >10%)。
    参考:Das et al., 2025;挑战赛总结

⚠️ 坑点 6:纯空间模型的时序一致性崩塌(分类:偏倚陷阱)

问题:eTSA 术野小、器械形似(多把器械头部形态相近)、血液遮挡频繁,单帧信息不足;纯空间模型 Edit-score 不足 2%——预测序列每秒都在跳变。
症状:帧级 F1 尚可,但视频级步骤序列完全无序,无法生成可读的手术时间线。
解决:

  1. 简单方法:叠加官方同款时间平滑(modal 众数平滑 / threshold 连续 n 秒才切换)。
  2. 进阶方法:空间编码器后接 LSTM/TCN/Transformer 时序解码器;前驱研究显示 ResNet-50+LSTM 加阈值平滑可将 weighted-F1 从 0.84 提升至 0.86(3 阶段)。
  3. SOTA 方法:自回归时空 Transformer(步骤识别冠军 CITI 的架构),综合指标 62.9%,Edit-score 超 46%。
    参考:Das et al., IJCAR 2022;alphaXiv 挑战赛解读

⚠️ 坑点 7:误用未公开测试集数字(分类:评估误用)

问题:8 段测试视频不公开,只能经 Docker 向官方提交评测;论文表格中的测试分数无法自行复现,且测试视频(2018-2021 录制)与训练视频(2021-2022)存在年代差。
症状:论文报告的数字与本地五折结果对不上,被审稿人质疑。
解决:

  1. 简单方法:本地只报告官方 20/5 划分或五折结果,明确标注"训练侧指标"。
  2. 进阶方法:引用官方测试分数时注明"组织方评测、输入为 1 FPS PNG、在线约束"。
  3. SOTA 方法:在讨论中同时报告两组数字并分析年代差导致的分布偏移。
    参考:arXiv 2409.01184

⚠️ 坑点 8:许可协议再分发违规(分类:工程陷阱)

问题:数据集为 CC BY-NC-SA 4.0 且官方明确声明"cannot be distributed"——把视频重新打包上传到自己的镜像/网盘、或接入商业产品,均违反许可。
症状:收到 UCL/出版社下架要求;企业项目合规审查被卡。
解决:

  1. 简单方法:内部使用时保留原下载链接,让使用者自行获取。
  2. 进阶方法:产品中仅上传模型权重与预处理代码,运行时由用户提供本地数据路径。
  3. SOTA 方法:企业场景联系版权方获取商业授权;发表衍生工作遵守相同方式共享并引用官方论文。
    参考:Das et al., 2025(Data and publishing 节);UCL 仓库

§6.6 数据增强策略

类别 操作 理由
✅ 安全 随机缩放裁剪(0.8-1.0)、小角度旋转(≤10°)、亮度/对比度小幅抖动、时间窗随机偏移(±1 秒内) 模拟内窥镜视角与曝光变化,不改变手术语义
✅ 安全 CLAHE 对比度增强、高斯模糊(模拟血液/液体遮挡前的失焦) 官方 baseline 同类组件(arXiv 2409.01184)
❌ 危险 大幅色彩变换( hue 大范围偏移、灰度化) 组织颜色、血液存在与否是步骤与器械识别的关键线索
❌ 危险 水平翻转 鼻腔左右入路与解剖标志有方向性,翻转制造不存在的解剖
❌ 危险 帧序打乱 / 大幅时间抖动增强 工作流识别依赖时序一致性,乱序样本与在线推理设定矛盾
❌ 危险 跨视频混合增强(MixUp 图像级) 跨手术混合破坏"秒-步骤"对应关系,标签失真

§6.7 模型推荐表

模型 架构要点 适用任务 官方/论文证据 代码可得性
ResNet-50 + LSTM CNN 空间 + LSTM 时序 Task 1/3 前驱基线 weighted-F1 0.84(3 阶段)(IJCAR 2022) 易复现
时空 Transformer(自回归解码 + 位置编码) 空间编码 + 自回归时序解码 Task 1 冠军(62.9%)(alphaXiv) 论文详述 论文描述 + 需自行实现
空间编码器 + 2 层时间编码器 空间-时间两段式 Task 2 冠军(Macro-F1 41.7%) 挑战赛总结(Lacuna 转述) 论文描述
多任务共享骨干 + 双头 步骤头 + 器械头联合训练 Task 3 多任务较单任务 Macro-F1 提升 >10%(器械) 官方 baseline 框架(GitHub)
TinyViT/EVA-02 空间集成(GMAI 基线) 纯空间集成 对照组 官方空间基线(Edit-score <2%,说明时序必要性) 挑战赛论文

§6.8 硬件需求表

阶段 最低配置 推荐配置 说明
下载与抽帧 4 核 CPU、200GB 磁盘 8 核 CPU、500GB SSD 视频本体数十 GB 级,抽帧后另需约 40-80GB
特征提取 1×8GB GPU(ResNet-50) 1×16GB GPU 1 FPS 帧量约 12 万张
时序训练 1×24GB GPU 1×32GB(官方评测用 Tesla V100 32GB) 序列长度建议 32-256 秒窗口
官方评测复现 单核 Tesla V100 32GB 同左 官方约束:每 10 分钟视频推理 <1 分钟(arXiv 2409.01184)

§6.9 评估指标代码

# Macro-F1 与 Edit-score(官方评测协议:arXiv 2409.01184)
import numpy as np
from sklearn.metrics import f1_score

def macro_f1(y_true: np.ndarray, y_pred: np.ndarray) -> float:
    """对每类等权平均的 F1(官方空间指标)。"""
    return float(f1_score(y_true, y_pred, average="macro"))

def compress(seq: list) -> list:
    """压缩重复标签:[0,0,1,1,0,1] -> [0,1,0,1](Edit-score 定义)。"""
    out = []
    for x in seq:
        if not out or out[-1] != x:
            out.append(x)
    return out

def edit_distance(a: list, b: list) -> int:
    """Levenshtein 距离。"""
    dp = list(range(len(b) + 1))
    for i, ca in enumerate(a, 1):
        prev, dp[0] = dp[0], i
        for j, cb in enumerate(b, 1):
            cur = dp[j]
            dp[j] = min(dp[j] + 1, dp[j - 1] + 1,
                        prev + (ca != cb))
            prev = cur
    return dp[-1]

def edit_score(y_true: np.ndarray, y_pred: np.ndarray) -> float:
    """1 - Levenshtein/长度 的官方近似形式(Lea et al., 2016 口径)。"""
    t, p = compress(list(y_true)), compress(list(y_pred))
    if not t:
        return 0.0
    return 1.0 - edit_distance(t, p) / len(t)

def task1_score(y_true, y_pred) -> float:
    """M1 = (Macro-F1 + Edit-score) / 2。"""
    return (macro_f1(y_true, y_pred) + edit_score(y_true, y_pred)) / 2.0

<details>
<summary>展开完整验证循环:对官方 5 段验证视频逐段计算 M1(约 55 行)</summary>

# 验证循环:模型输出逐秒步骤预测 -> 剔除 -1 -> 计算 Macro-F1 与 Edit-score。
# 输入模型约定:frame -> logits[num_classes];这里以伪模型占位演示管线。
import os
import cv2
import numpy as np
import pandas as pd
import torch

DATA_ROOT = "/data/pitvis"
VAL_IDS = [1, 12, 21, 24, 25]           # 官方验证集(arXiv 2409.01184)

@torch.no_grad()
def predict_seconds(model, video_id: int, device: str = "cuda") -> np.ndarray:
    """对一段视频逐秒预测步骤标签(离线批量;在线部署请改为因果滑动窗口)。"""
    model.eval()
    preds = {}
    frames = sorted(os.listdir(os.path.join(DATA_ROOT, f"frames_{video_id:02d}")))
    batch, times = [], []
    for f in frames:
        t = int(os.path.splitext(f)[0])
        img = cv2.cvtColor(cv2.imread(os.path.join(
            DATA_ROOT, f"frames_{video_id:02d}", f)), cv2.COLOR_BGR2RGB)
        batch.append(img); times.append(t)
        if len(batch) == 64:
            x = torch.stack([VAL_TF(b) for b in batch]).to(device)
            for tt, logit in zip(times, model(x)):
                preds[tt] = int(logit.argmax())
            batch, times = [], []
    if batch:
        x = torch.stack([VAL_TF(b) for b in batch]).to(device)
        for tt, logit in zip(times, model(x)):
            preds[tt] = int(logit.argmax())
    return np.array([preds[t] for t in sorted(preds)])

def evaluate_video(model, video_id: int, num_classes: int = 15):
    ann = pd.read_csv(os.path.join(DATA_ROOT, f"annotations_{video_id:02d}.csv"))
    ann = ann[ann.int_step != -1]                      # 官方协议:剔除患者体外帧
    y_true = ann.int_step.to_numpy()
    y_pred = predict_seconds(model, video_id)
    assert len(y_true) == len(y_pred), f"{video_id}: 对齐失败"
    return macro_f1(y_true, y_pred), edit_score(y_true, y_pred)

VAL_TF = None   # 运行时替换为与训练一致的 transform(见 §6.4)

def run_validation(model):
    scores = []
    for vid in VAL_IDS:
        f1, es = evaluate_video(model, vid)
        scores.append((f1, es))
        print(f"video {vid:02d}: Macro-F1={f1:.3f}  Edit={es:.3f}  "
              f"M1={(f1 + es) / 2:.3f}")
    f1s, ess = map(np.mean, zip(*scores))
    print(f"\n平均 M1 = {(f1s + ess) / 2:.3f}(官方同口径)")

</details>

实现提示:官方 Edit-score 计算基于压缩标签序列;不同实现对序列头尾处理略有差异,复现挑战赛数字时请以 官方 GitHub 评测脚本 为准。

§6.10 MLOps 笔记

  • 在线推理约束:部署模型只能访问当前及历史帧(与挑战赛一致);离线后处理(使用未来帧的平滑)不符合术中场景,需改用因果平滑(modal/threshold)。
  • 延迟预算:官方约束为每 10 分钟视频 <1 分钟推理(约 60 倍实时),嵌入式部署可参考 UCL 团队与 NVIDIA 合作的实时推理原型路线(UKRI GtR)。
  • 版本与可复现:固定 UCL 仓库 v2 数据版本 + 预处理随机种子 + 标签映射表哈希;官方曾对发布后发现的标注错误即时更正,训练前应重新校验 CSV 与映射表一致性。
  • 漂移监控:监控输入帧统计(分辨率、亮度分布)与输出类分布;测试视频录制年代(2018-2021)早于训练集,年代相关分布偏移是已知风险。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
单中心偏倚 全部视频来自伦敦 NHNN 一家医院、同一套 Karl Storz 设备链 高 外部中心验证前不做跨中心推广结论
术者偏倚 术者数量有限、技术习惯固定 中 按视频分组交叉验证;报告按视频的性能方差
类别不平衡 no instrument/suction 占主导,稀有器械样本极少 高 Macro-F1 为主指标;稀有类过采样/焦点损失
词表裁剪偏倚 步骤 11、13 因样本不足被移出评测 中 报告时声明评测词表为 12 类而非 14 类
年代偏倚 测试视频(2018-2021)早于训练视频(2021-2022) 中 分析设备/流程演变;避免直接比较两子集
标注粒度偏倚 逐秒人工标注,秒内细节与边界抖动不可见 中 边界秒 soft label;敏感应用慎用秒级结论

§7.2 标注质量

标注链为"双受训医师共识(步骤)→ 第三方公司 + 双核验(器械)→ 顾问医师终审",官方明确标注误差主要来源是人眼误判且已通过多轮核验压低;发布后若发现错误会立即更正并通知参与者。官方未公布标注者间一致性统计(如 kappa),这是引用该数据集时需要声明的局限(arXiv 2409.01184)。

§7.3 泛化性评估

目标场景 失效风险 证据/机制
其他医院/国家的 eTSA 手术 高 单中心训练;器械品牌与流程差异未见外部验证数据
其他内窥镜设备(4K、3D) 中高 训练数据统一为 720p 转码;4K 纹理与色域差异未覆盖
扩大经蝶/显微经蝶等变体术式 高 词表按内窥镜 eTSA 定义,步骤语义不对应
实时术中部署 中 官方协议本身在线约束;但需额外验证时延与波动性
跨术式迁移(如腹腔镜) 高 视角、器械、组织完全不同,仅空间特征可迁移

§7.4 伦理与合规

研究经 UCL 机构审查委员会批准(IRB 注册号 17819/011);公开训练视频均有患者书面同意(公开研究使用),测试视频同意范围仅限组织方机构内研究;视频在 Touch Surgery 平台内完成脱敏(患者体外区域模糊)。许可见 §6.5 坑点 8:CC BY-NC-SA 4.0、禁止再分发与商业用途(arXiv 2409.01184)。

§7.5 公平性

数据来自单一英国三级中心,官方未公布患者人口统计学(年龄、性别、种族),无法评估跨人群公平性;术者构成亦未逐段公开。任何宣称"跨人群适用"的模型结论在 PitVis 上都缺乏证据支撑,请在论文中如实声明。

§7.6 数据漂移

采集跨 2018-2022 四年,期间设备固件、器械组合与手术流程自然演变;官方论文亦指出视频间"appearance、step duration、step order"存在显著变异(Khan et al., J Neurosurg 2022)。建议:按录制年份分层评估;部署时监控输入统计与类分布漂移。

§7.7 DAIMS 数据质量评估

# 检查项 状态 说明
1 宽格式 ✅ 每段视频一个 CSV,逐秒一行,结构规整
2 唯一标识 ✅ int_video + int_time 联合主键
3 特殊字符 ✅ 全数值编码,无自由文本脏字符
4 重复行 ✅ 逐秒粒度无重复时间戳
5 缺失编码 ⚠️ -1/-2/0 多义编码需人工区分,官方有文档但易误用
6 标签标识 ✅ map_steps.csv/map_instrument.csv 提供完整映射
7 罕见类分组 ⚠️ 步骤 13 仅 72 秒;官方直接移出评测而非合并
8 偏倚评估 ✅ 官方论文含分布统计与变异分析
9 数据字典 ✅ 数据卡 + 论文格式示例完整
10 信息性缺失解释 ✅ -2 明确为"无第二把器械"信息性编码
11 设备记录 ⚠️ 设备链路有说明,但逐视频设备参数仅在 video_encoder_details.txt
12 共线性 ✅ 标签列间无连续共线问题(分类标签)
13 编码映射 ✅ 整数→语义映射文件齐全
14 时间戳处理 ✅ int_time 为秒偏移,配合统一 24 FPS 无歧义
15 划分建议 ✅ 官方 20/5 视频级划分 + 分层设计
16 泄漏讨论 ✅ 挑战赛协议强制视频级隔离与在线约束
17 标签分布 ✅ 论文附步骤/器械长度分布图与转移概率矩阵
18 测量偏倚 ⚠️ 逐秒人工标注的边界抖动未量化(无 kappa)
19 外部验证建议 ⚠️ 数据集本身无外部中心验证,需研究者自行设计
20 版本记录 ✅ UCL 仓库版本化(当前 v2)+ Zenodo 挑战赛存档
21 预处理脚本 ✅ 官方 GitHub 提供 1 FPS 抽帧脚本与 baseline
22 合规要求 ✅ IRB 注册 + 患者同意 + CC BY-NC-SA 4.0 明确
23 多模态对齐 ✅ 单模态,视频-标注逐秒对齐清晰
24 去标识化 ✅ 体外区域模糊脱敏,同意书覆盖公开使用

DAIMS 评分:19.5 / 24

评分解读:扣分集中在五处 ⚠️——多义缺失编码易误用、罕见类处理方式激进(直接移除)、逐视频设备元数据粒度粗、标注一致性未量化、外部验证缺位。这些均属"研究门槛"而非"数据硬伤":数据本体结构规整、溯源清晰、合规完备。

对你意味着什么:(1) 上手成本低——按 §6.1 一小时内可跑通单视频闭环;(2) 指标解释必须用 Macro-F1 + Edit-score 双指标,忽略时序指标会高估模型可用性;(3) 若你的研究依赖稀有器械检测,需自带重采样策略并降低预期(官方冠军 Macro-F1 仅 41.7%);(4) 对外发布结论时声明单中心与无标注一致性统计两大局限,可避免多数审稿质疑。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
官方 8 段保留测试视频(同机构、未见模型) NHNN/UCL 步骤识别(Task 1) 冠军综合 62.9%;纯空间基线 Edit-score <2% 显著低于训练侧上限 时序上下文为决定性因素(Das et al., 2025)
官方 8 段保留测试视频(同机构、未见模型) NHNN/UCL 器械识别(Task 2) 冠军 Macro-F1 41.7% 类不平衡下天花板低 稀有器械为主要失分点(Lacuna 转述)
前驱私有 50 视频集(五折) NHNN/UCL(Touch Surgery 生态) 3 阶段/7 步骤分类 weighted-F1 0.84/0.74(平滑后 0.86/0.75) 与 PitVis 不同词表,仅作量级参考 时间平滑同时降波动、升精度(IJCAR 2022)

截至2026-09,尚无其他中心在 PitVis 上发表外部验证结果;跨机构泛化性缺乏同行评审证据,属本数据集最大开放问题。


§8 基准性能与生态

§8.1 排行榜

任务 1:步骤识别(M1 = (Macro-F1 + Edit-score)/2,测试集为官方保留 8 段视频)

排名 模型/团队 性能(M1) 年份 关键技术 完整引用 代码
1 CITI 62.9% 2023 自回归时空 Transformer + 位置编码输入 Das et al., 2025, Medical Image Analysis. DOI 未公开
2 TSO-NCT 53.7% 2023 LSTM,融合前一帧分类与隐藏状态 Das et al., 2025, Medical Image Analysis. DOI 未公开
— GMAI(空间基线) 见论文表 2023 TinyViT+EVA-02 纯空间集成 Das et al., 2025, Medical Image Analysis. DOI 挑战赛框架

任务 2:器械识别(M2 = Macro-F1,19 类多标签)

排名 模型/团队 性能(M2) 年份 关键技术 完整引用 代码
1 SDS-HD 41.7% 2023 空间编码器 + 2 层时间编码器 Das et al., 2025, Medical Image Analysis. DOI 未公开

数值不可直接比较的原因:(1) 三个任务(M1/M2/M3)指标定义不同;(2) M1 混合空间与时序两个量纲,纯空间模型 Edit-score <2% 会大幅拉低 M1;(3) 各队可使用公开预训练数据,训练预算未对齐;(4) 第三名及以后完整分数请查论文表格(ScienceDirect)。

§8.2 挑战赛团队方法一览

官方论文对 9 支入围团队做了逐一分析,主要团队的方法要点如下(全部数字与描述出自 Das et al., 2025):

团队 任务亮点 方法要点
CITI 步骤识别第 1(62.9%) 自回归时空 Transformer,位置编码输入,时序解码为核心
TSO-NCT 步骤识别第 2(53.7%) LSTM,融合前一帧分类结果与隐藏状态
SDS-HD 器械识别第 1(Macro-F1 41.7%) 空间编码器 + 2 层时间编码器
UNI-ANDES-23 多任务综合表现强 ST-E(时空编码器)+ 多任务联合训练
GMAI 官方空间基线之一 TinyViT+EVA-02 纯空间集成(Edit-score <2%,作反面对照)

其余团队(Konica Minolta/Muroran、Heidelberg/DKFZ、Universidad de los Andes 等)的完整方法描述与分数见论文 §6 与表 3-6。

§8.2b SOTA 总结与选型建议

  • 步骤识别选型:优先自回归时空 Transformer;资源受限时 ResNet-50+LSTM + 阈值平滑是性价比最高的起点。
  • 器械识别选型:两段式(空间编码 → 时序编码)优于单帧分类;务必用 Macro-F1 评估并关注稀有类。
  • 多任务联合训练对器械识别有稳定收益(>10% Macro-F1),推荐作为默认配置。
  • 一切结论以官方 20/5 视频级划分为准;图像级划分结果不可对外报告。

§8.3 评测协议

在线约束(仅当前及历史帧)→ 全自动模型 → Docker 镜像经 Synapse 提交 → 单核 Tesla V100 32GB 运行 → 每 10 分钟视频推理 <1 分钟 → 测试集 1 FPS PNG 输入 → M1/M2/M3 三指标(arXiv 2409.01184)。Edit-score 基于 Levenshtein 距离,度量压缩标签序列的时序一致性,源自工作流分割文献(Lea et al., 2016)。

数据集 术式 规模 与 PitVis 关系
Cholec80 腹腔镜胆囊切除 80 视频、7 阶段 阶段识别最常用外部预训练来源
AutoLaparo 腹腔镜妇科肿瘤 21 视频、7 任务 长流程工作流迁移参照
m2cai16 workflow 腹腔镜胆囊切除 16 视频 早期工作流基准
EndoVis 系列(2015-2023 各子挑战) 多术式 见各年官网 PitVis 所属的 MICCAI 挑战赛体系(opencas.dkfz.de)

§8.5 关键论文 Top 6

  1. Das, A. et al. PitVis-2023 challenge: Workflow recognition in videos of endoscopic pituitary surgery. Medical Image Analysis 106, 103716 (2025). DOI 10.1016/j.media.2025.103716 — 挑战赛总结与基准,数据集主论文。
  2. Das, A. et al. PitVis-2023 Challenge: Workflow Recognition in videos of Endoscopic Pituitary Surgery. arXiv:2409.01184 (2024). arXiv — 预印本,含完整协议附录。
  3. Khan, D.Z. et al. Automated operative workflow analysis of endoscopic pituitary surgery using machine learning (IDEAL stage 0). Journal of Neurosurgery 137(1), 51-58 (2022). DOI 10.3171/2021.6.JNS21923 — 3 阶段/7 步骤词表奠基工作。
  4. Das, A. et al. Reducing prediction volatility in the surgical workflow recognition of endoscopic pituitary surgery. Int J CARS 17, 1445-1452 (2022). DOI 10.1007/s11548-022-02599-y — 预测波动性指标与时间平滑方法。
  5. Speidel, S. et al. Endoscopic Vision Challenge 2023. Zenodo (2023). DOI 10.5281/zenodo.8315050 — EndoVis 2023 全部子挑战统一引用。
  6. Twinanda, A.P. et al. EndoNet: A deep architecture for recognition tasks on head & hand surgical videos. MICCAI (2016) — Cholec80 数据集出处,跨数据集预训练参照。

§8.6 社区活跃度

  • 挑战赛规模:52 人注册下载、9 团队/6 国/18 份投稿(2023)(arXiv 2409.01184)。
  • 官方代码仓库 dreets/pitvis 提供抽帧脚本、示例 Docker 提交与评测脚本。
  • 数据镜像 HuggingFace drdreets/PitVis-2023(3 likes,截至 2026-09);社区数据目录(Awesome-Medical-Dataset、openmedlab)均有收录条目。
  • 主论文 2025-12 刊出,早期引用累积中(ScienceDirect 显示 Cited by 1,截至 2026-09)。

§8.7 生态快照

资源 类型 链接 热度(截至 2026-09) 推荐理由
UCL Research Data Repository 官方数据托管 26531686 官方权威版本(v2) 引用与下载的第一来源
GitHub dreets/pitvis 官方代码 dreets/pitvis 官方维护 抽帧脚本 + baseline + 评测框架
Synapse syn51232283 挑战赛平台 Synapse 官方评测通道 协议文档与 Docker 提交
EndoVis 2023 官方页 挑战赛官网 opencas.dkfz.de MICCAI 官方体系 全部子挑战对比与报告规范
HuggingFace 镜像 社区镜像 drdreets/PitVis-2023 3 likes 一行加载,含标签映射表
Medical Image Analysis 论文 主论文 DOI Cited by 1+ 基准数字与协议唯一权威出处

§9 相关资源与引用

§9.1 官方资源清单

§9.2 BibTeX 引用块

@article{das2025pitvis,
  title   = {PitVis-2023 challenge: Workflow recognition in videos of endoscopic pituitary surgery},
  author  = {Das, Adrito and Khan, Danyal Z. and Psychogyios, Dimitrios and Zhang, Yitong and Hanrahan, John G. and Vasconcelos, Francisco and Pang, You and Chen, Zhen and Wu, Jinlin and Zou, Xiaoyang and Zheng, Guoyan and Qayyum, Abdul and Mazher, Moona and Razzak, Imran and Li, Tianbin and Ye, Jin and He, Junjun and P{\l}otka, Szymon and Kaleta, Joanna and Yamlahi, Amine and Jund, Antoine and Godau, Patrick and Kondo, Satoshi and Kasai, Satoshi and Hirasawa, Kousuke and Rivoir, Dominik and Speidel, Stefanie and P{\'e}rez, Alejandra and Rodriguez, Santiago and Arbel{\'a}ez, Pablo and Stoyanov, Danail and Marcus, Hani J. and Bano, Sophia},
  journal = {Medical Image Analysis},
  volume  = {106},
  pages   = {103716},
  year    = {2025},
  doi     = {10.1016/j.media.2025.103716}
}

@misc{ucl2024pitvisdata,
  title        = {PitVis-2023 Challenge: Endoscopic Pituitary Surgery videos},
  author       = {Das, Adrito and Bano, Sophia and Marcus, Hani J. and Stoyanov, Danail and Vasconcelos, Francisco},
  year         = {2024},
  publisher    = {UCL Research Data Repository},
  doi          = {10.5522/04/26531686},
  howpublished = {\url{https://rdr.ucl.ac.uk/articles/dataset/26531686}}
}

@article{das2024pitvisarxiv,
  title   = {PitVis-2023 Challenge: Workflow Recognition in videos of Endoscopic Pituitary Surgery},
  author  = {Das, Adrito and Khan, Danyal Z. and Psychogyios, Dimitrios and others},
  journal = {arXiv preprint arXiv:2409.01184},
  year    = {2024}
}

@article{khan2022automated,
  title   = {Automated operative workflow analysis of endoscopic pituitary surgery using machine learning: development and preclinical evaluation (IDEAL stage 0)},
  author  = {Khan, Danyal Z. and Luengo, Ignacio and Barbarisi, Salvatore and Addis, Chris and Culshaw, Lindsay and Dorward, Neil L. and Haikka, Patrick and Jain, Amanpreet and Kerr, Kathy and Koh, Chee H. and Layard Horsfall, Hugh and Muirhead, William and Palmisciano, Pasquale and Vasey, Benedict and Stoyanov, Danail and Marcus, Hani J.},
  journal = {Journal of Neurosurgery},
  volume  = {137},
  number  = {1},
  pages   = {51--58},
  year    = {2022},
  doi     = {10.3171/2021.6.JNS21923}
}

@article{das2022reducing,
  title   = {Reducing prediction volatility in the surgical workflow recognition of endoscopic pituitary surgery},
  author  = {Das, Adrito and Bano, Sophia and Vasconcelos, Francisco and Khan, Danyal Z. and Marcus, Hani J. and Stoyanov, Danail},
  journal = {International Journal of Computer Assisted Radiology and Surgery},
  volume  = {17},
  pages   = {1445--1452},
  year    = {2022},
  doi     = {10.1007/s11548-022-02599-y}
}

@misc{speidel2023endovis,
  title        = {Endoscopic Vision Challenge 2023},
  author       = {Speidel, Stefanie and Maier-Hein, Lena and Stoyanov, Danail and others},
  year         = {2023},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.8315050}
}

§9.3 引用指南

  • 使用数据本身:引用主论文(das2025pitvis 或 das2024pitvisarxiv)+ 数据 DOI(ucl2024pitvisdata)。
  • 讨论挑战赛协议或成绩:引用 das2025pitvis 与 speidel2023endovis。
  • 涉及词表设计沿革(3 阶段/7 步骤 → 14 步词表):补充引用 khan2022automated。
  • 时间平滑方法:引用 das2022reducing。

§10 AI 使用声明卡

§10.1 AI 模型列表

模型 版本 用途
千方百科写作助手(大语言模型) 2026-09 会话版本 资料整合、初稿撰写、格式规范化

§10.2 AI 参与范围

AI 参与了文献检索结果的整合、章节起草、表格整理与代码示例编写;事实核验依赖本页面列出的公开来源;最终内容经编辑部人工审核(见 §10.4)。

§10.3 输入来源列表

  1. Das, A. et al. PitVis-2023 challenge: Workflow recognition in videos of endoscopic pituitary surgery. Medical Image Analysis 106, 103716 (2025). DOI
  2. Das, A. et al. PitVis-2023 Challenge: Workflow Recognition in videos of Endoscopic Pituitary Surgery. arXiv:2409.01184 (2024). arXiv
  3. UCL Research Data Repository. PitVis-2023 Challenge: Endoscopic Pituitary Surgery videos. DOI 10.5522/04/26531686
  4. Khan, D.Z. et al. Automated operative workflow analysis of endoscopic pituitary surgery (IDEAL stage 0). J Neurosurg 137(1), 51-58 (2022). DOI
  5. Das, A. et al. Reducing prediction volatility in the surgical workflow recognition of endoscopic pituitary surgery. Int J CARS 17, 1445-1452 (2022). DOI
  6. Speidel, S. et al. Endoscopic Vision Challenge 2023. Zenodo. DOI 10.5281/zenodo.8315050
  7. HuggingFace 数据卡 drdreets/PitVis-2023. 链接
  8. Synapse 挑战赛页面 syn51232283. 链接
  9. EndoVis 2023 官方页(DKFZ opencas). 链接
  10. UKRI Gateway to Research: AID-PitSurg 项目页. 链接
  11. PubMed 索引 PMID 40769094. 链接
  12. B2FIND 数据集索引页. 链接
  13. Awesome-Medical-Dataset(openmedlab)PitVis 条目. 链接
  14. NCBI MedGen C0032000(Pituitary adenoma,SNOMED 254956000). 链接
  15. MONDO:0021439 / ICD-11 foundation entity 1871539651 交叉引用(EBI OLS). 链接

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
frontmatter 与 INFOBOX 数字 千方病案医学编辑部 逐项对照 FACTS 事实清单与原始链接 ✅ 已通过/已验证
§2 医学背景与术语编码 千方病案医学编辑部 对照 MedGen/EBI OLS 官方编码库 ✅ 已通过/已验证
§4 数据结构与 §5 划分 千方病案医学编辑部 对照官方论文与 HuggingFace 数据卡 ✅ 已通过/已验证
§6 代码示例 千方病案医学编辑部 API 语法核对 + 最小数据闭环走查 ✅ 已通过/已验证
§7-§8 基准数字 千方病案医学编辑部 逐条溯源至 MedIA 2025 论文 ✅ 已通过/已验证
§9-§10 引用与声明 千方病案医学编辑部 BibTeX 与 DOI 逐条解析测试 ✅ 已通过/已验证

§10.5 AI 生成章节标注

全部章节由 AI 辅助起草,经编辑部人工审核后发布;审核方式与范围见 §10.4。

§10.6 最后人工审核日期

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

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


§C JSON-LD 结构化数据


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • miccai-surgt — 共享标签:医学影像 / 医学问答与基准 / 手术视频 / 挑战赛数据集
  • anhir — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • serv-ct — 共享标签:医学影像 / 医学问答与基准 / 手术视频
  • isic-archive — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • dentex — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • panda — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • paip — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • sliver07 — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • btcv — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集
  • atlas-liver-tumor — 共享标签:医学影像 / 医学问答与基准 / 挑战赛数据集

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集