信息速览

SERV-CT — 立体内镜 3D 重建验证基准 AI-Ready Wikipedia
INFOBOX
| 项目 | 内容 |
|---|---|
| 数据集名称 | SERV-CT |
| 英文全称 | SERV-CT: A disparity dataset from cone-beam CT for validation of endoscopic 3D reconstruction |
| 别名/简称 | SERV-CT(Stereo Endoscopic Reconstruction Validation based on CT);配套工具包名 servcttk |
| 疾病分类(ICD-11 编码+中文名) | 不适用(非疾病特异性数据集;NLM 收录 MeSH 主题词:Cone-Beam Computed Tomography、Endoscopes、Endoscopy、General Surgery,见 NLM 数据集目录) |
| 数据模态 | 锥形束 CT(O-arm)、立体内镜 RGB(第一代 da Vinci)、手持结构光 RGB 表面(Creaform) |
| AI 任务类型 | 立体匹配(stereo matching)、视差/深度估计、内镜 3D 重建验证 |
| 样本总数 | 16 组矫正立体对(2 只 ex vivo 小型猪尸体 × 各 8 对) |
| 数据格式 | 24-bit PNG(720×576 左/右图)、16-bit PNG(视差/深度,数值 ×256 缩放)、JSON(标定 P1/P2/Q) |
| 许可证 | CC BY 4.0(UCL 仓库元数据) |
| 访问级别 | 开放(无需注册,直接下载) |
| 语言 | 英文(论文、文档与元数据) |
| 首发日期 | 2020-12(随 arXiv 论文发布;UCL 正式存档记录为 2024) |
| 最后更新 | 2021-01-18(官方 changelog:替换过时版本数据集) |
| 发布机构 | University College London(UCL WEISS 等,见 B2FIND) |
| 官方主页 | WEISS open data server — SERV-CT |
| 下载地址 | UCL Research Data Repository |
| DOI | 10.5522/04/26352199.v1(数据集);10.1016/j.media.2021.102302(论文) |
| 引用次数 | 67+(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 文件结构规范、标定/评测脚本齐全、CC BY 4.0 开放下载;扣分:仅 16 对静态帧且无训练划分、需自行实现 DataLoader 与 ×256 解码、遮挡掩码需按颜色语义解析 |
| 页面状态 | published |
§0 关于本页与审核声明
本页面由千方病案医数集编辑部组织撰写,面向医疗 AI 工程师、手术导航研究者与医学影像学研究人员,系统梳理 SERV-CT 数据集的采集方法、文件结构、标注管线、评测协议与已知局限。全部关键数字均来自原始论文、官方数据仓库元数据与官方 GitHub 仓库,并在正文以内联链接标注出处。
如何使用本页:首次接触该数据集的读者建议按"§1.0 速览 → §4.0 目录树 → §6.1 快速上手"的顺序建立直觉;准备做评测的读者应精读 §3.3(格式与编码)、§6.3(预处理)与 §6.5(8 个坑点),并核对 §8.3 的官方评测协议;撰写论文引用时参考 §9.2 的 BibTeX 与 §9.3 的引用指南。页面中所有结论性数字的出处均以链接形式紧随其后,任何与源文档不一致之处请以源文档为准并反馈给编辑部。
- 医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(微创手术立体视觉与术中三维成像)、§7 偏倚分析(ex vivo 动物模型与人体组织的差异)。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。SERV-CT 以 CC BY 4.0 许可通过 UCL Research Data Repository 开放发布,使用时须完整署名并引用原始论文;本页面提及的许可信息仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? SERV-CT 是一组"带标准答案的内镜立体图像"。研究者把 2 只猪尸体和一台手术机器人的立体内镜一起放进锥形束 CT 扫描,让 CT 给出组织表面的真实三维形状,再换算成每张内镜图像对应的视差图、深度图和遮挡掩码(论文摘要)。一共 16 组图像对,CC BY 4.0 免费下载。
为什么重要? 内镜下做三维重建很难:组织湿滑、反光、缺乏纹理,常规算法容易失灵,而验证算法需要"标准答案"。此前该领域的代表基准 SCARED 的参考数据需要自行重投影才能用于立体匹配评测,SERV-CT 直接提供矫正后的视差与深度双域参考,并附带遮挡掩码,使不同论文的结果可以直接对比(论文 §5.1)。
我能用它做什么? 如果你在做手术机器人视觉、术中导航或内镜深度估计,SERV-CT 可以作为独立验证集:加载 16 组立体对,跑你的算法,用官方工具包 servcttk 计算 Bad3 与 RMSE 指标,即可与已发表结果横向比较。它样本太少,不适合训练模型——这是一个纯"考试卷",不是"练习册"。
§1.1 技术摘要
SERV-CT 由 Edwards、Psychogyios、Speidel、Maier-Hein 与 Stoyanov 合作构建,论文于 2020-12 以预印本发布(arXiv:2012.11779),2022 年正式发表于 Medical Image Analysis(doi:10.1016/j.media.2021.102302)。采集时,2 只 ex vivo 小型猪全躯干尸体与第一代 da Vinci Surgical System 的立体内镜(直镜与 30° 镜)被同时置于 Medtronic O-arm 锥形束 CT 视野内,使解剖结构与镜身出现在同一体数据中(B2FIND 元数据)。标注采用"半手动对齐 + 渲染"管线:分割 CT 表面后,操作者在镜身可见约束下手动对齐 CT 虚拟视图与内镜立体视图,再用 OpenGL Z-buffer 渲染出每像素视差、深度与遮挡,重复对齐的 RMS 精度约为 2 像素(视差)与 2 mm(深度)(UCL Discovery)。最终发布 16 组 720×576 矫正立体对,附视差(×256 缩放 16-bit PNG)、深度、遮挡与完整标定;第二只样本另配 Creaform 结构光参考。作者对多个在线立体算法的评测显示,算法间差异显著,预训练域与手术图像的域差距是主要误差来源。截至 2026-09,该论文被引 67+ 次(Semantic Scholar)。
§1.2 战略价值
评测基础设施维度:内镜立体重建领域长期缺乏"拿到即可跑评测"的参考数据。SCARED 虽规模更大,但其参考以三维点形式存储,构造视差参考依赖用户自己的矫正参数与实现,不同论文的结果因此混入了数据处理管线的差异;SERV-CT 直接发布矫正图像配对的双域(视差 + 深度)参考,把评测拉回到"只反映算法本身性能"的轨道(论文 §5.1)。对于需要在论文中报告标准化数字的团队,SERV-CT 显著降低了复现与对比成本。
算法诊断维度:16 组样本覆盖镜面光滑器官表面、大深度变化与多种组织类型,并显式提供遮挡掩码(论文摘要)。这使得 SERV-CT 不仅能给出一个总分,还能定位算法在哪些像素失效——例如镜面高光区或遮挡边缘。后续研究(如 StereoMAE 与 RRESM)均将其作为手术场景泛化能力的试金石:通用立体算法在 SERV-CT 上的大幅退化,直接量化了"自然图像 → 手术图像"的域差距。
开放生态维度:CC BY 4.0 + 无注册下载 + DOI 存档的组合在医疗 AI 数据集中并不多见——多数同类资源需要用户协议、培训证书或申请审核。零门槛意味着:方法论课程可以直接把它当练习材料;论文复现实验可以在数小时内完成数据准备;企业工程团队可以把它纳入 CI 回归而不涉及合规谈判。配套的官方评测工具包(servcttk)进一步压缩了"下载数据 → 产出可比数字"的路径长度。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态与场景 | 参考标注形式 | 与 SERV-CT 的差异 |
|---|---|---|---|---|
| SERV-CT | 16 组矫正立体对(2 只猪尸体) | 立体内镜(720×576)+ O-arm 锥形束 CT + 结构光 | 矫正域内直接提供视差 + 深度 + 遮挡掩码 + 标定 | 本体;免费开放(CC BY 4.0),含遮挡真值 |
| SCARED | da Vinci Xi 猪腹腔手术数据,含多数据子集与关键帧 | 立体内镜(分辨率约 1024×1280)+ 手术器械 | 三维点形式参考 + 关键帧插值深度 | 规模更大且含器械场景,但视差参考需自行重投影构造,标定质量跨子集不一(论文 §5.1) |
| KITTI / Middlebury 等通用立体基准 | 数百至上千对 | 自然场景驾驶/室内 | 视差图 | 不含手术组织的光学特性;预训练于此的模型迁移到内镜图像会显著退化(见 §8.1) |
§1.4 版本时间轴
| 时间 | 事件 | 来源 |
|---|---|---|
| 2020-12-21 | 论文预印本提交 arXiv(arXiv:2012.11779) | arXiv |
| 2020-12-22 | 官方 changelog 记录论文预印本可下载 | servcttk README |
| 2021-01-18 | 官方 changelog:替换过时版本的数据集(建议从项目主页获取最新版) | servcttk README |
| 2021-02-01 | 评测代码 servcttk 发布 | servcttk README |
| 2021-11-06 | 论文正式版线上发表(2022-02 刊于 Medical Image Analysis 第 76 卷) | PubMed 34906918 |
| 2024 | 数据集在 UCL Research Data Repository 正式存档并获得 DOI(10.5522/04/26352199.v1) | B2FIND |
§1.5 典型应用场景
- 内镜立体匹配算法验证:对新提出或新复现的立体匹配网络,在 16 组矫正立体对上报告 Bad3 与 RMSE,与 §8.1 排行榜 中已发表结果对比。
- 手术导航组件的回归测试:将 SERV-CT 纳入导航/AR 叠加系统的持续集成,在每次代码更新后重跑评测,防止重建精度回退。
- 域差距量化研究:对比同一模型在通用立体基准与 SERV-CT 上的表现,量化自然图像到手术图像的性能衰减(参考 RRESM 的实验设计)。
- 遮挡处理能力评测:利用官方遮挡掩码,单独统计遮挡区域与非遮挡区域的误差差异(论文演示了含/不含遮挡两种口径,见 坑点 2)。
- 教学与代码走读:数据规模小、结构清晰,适合作为医学影像立体视觉课程的实操教材(配套 servcttk 读写代码)。
§2 医学与技术背景
§2.1 术语映射表
SERV-CT 是手术场景验证数据集,样本为动物尸体组织,不含疾病诊断标签,因此其内容不映射到 ICD-11 疾病编码。NLM 数据集目录为其标注的 MeSH 主题词如下(NLM),可作为 PubMed 检索的规范术语:
| 领域 | 术语(MeSH/规范名) | 与数据集的关系 | 检索建议 |
|---|---|---|---|
| 技术方法 | Cone-Beam Computed Tomography(锥形束 CT) | 参考真值的成像来源(O-arm 设备) | 与 “endoscopy” 组合检索 |
| 器械 | Endoscopes(内镜)/ Endoscopy(内镜检查) | 数据主体(第一代 da Vinci 立体内镜) | 与 “stereo” 或 “3D reconstruction” 组合 |
| 临床学科 | General Surgery(普通外科)/ Surgical Endoscopy(外科内镜) | 目标应用场景(腹腔镜/微创手术) | 领域综述与基准调研 |
| 研究对象 | Animals(动物) | 样本为 ex vivo 小型猪尸体 | 明示动物模型,避免与临床数据混淆 |
§2.2 微创手术中的立体视觉难题
微创手术(minimally invasive surgery,MIS)通过体表小切口送入长杆式内镜进行操作,外科医生失去直视视野,只能依靠监视器上的二维或三维内镜画面。术中的三维重建是实现解剖结构增强现实叠加、术中配准与导航的关键前置技术(论文引言)。然而腹腔内环境对计算机视觉极不友好,论文在引言中把这一领域与计算机视觉社区熟知的 KITTI 类自然场景基准做了直接对照:正是自然场景基准的成熟推动了立体重建算法的快速进步,而手术场景缺少同等级别的参考数据(论文引言)。
手术场景的具体挑战可归纳为下表——它们不仅使立体匹配算法失效,也使"制造标准答案"本身变得困难:传统的标记点方法只能覆盖少量像素,物理 phantom 无法还原真实组织外观,而术中的 CT 或结构光采集受限于设备与安全约束(论文摘要)。
| 挑战因素 | 对立体匹配算法的影响 | 对参考数据集制作的影响 | SERV-CT 的应对 |
|---|---|---|---|
| 缺乏清晰角点/纹理特征 | 匹配代价函数在平坦组织区退化,视差噪声大 | 无法用特征点法做自动配准 | 借助 CT 中可见的镜身约束做半手动对齐 |
| 强镜面反射(湿润表面) | 高光区像素饱和,匹配失败概率骤增 | 高光区在采集参考时同样棘手 | 刻意纳入镜面区域并量化其误差表现 |
| 血液与烟雾 | 动态遮挡与散射,图像质量瞬时恶化 | 参考数据难以在真实出血条件下采集 | 数据集不含这些要素,并作为局限声明 |
| 大深度变化与曲面连续性 | 深度不连续处边缘误差集中 | 逐点标注方式覆盖不足 | Z-buffer 渲染提供全视野密集参考 |
| 组织形变(呼吸/操作) | 时序一致性难以保证 | 需要与 CT 扫描同步的静态状态 | 选择 ex vivo 静态设定规避该问题 |
§2.3 临床任务定义
| 临床任务 | 技术内涵 | SERV-CT 的支撑方式 |
|---|---|---|
| 术中三维重建 | 从立体内镜图像恢复逐像素深度/视差 | 提供矫正域内的密集参考视差与深度 |
| 增强现实叠加 | 将术前 CT/模型投射到内镜视野 | CT 表面与内镜视图的对齐管线即该任务的离线原型 |
| 导航与配准 | 术前影像与术中视野的空间对齐 | 展示了"解剖 + 器械同入 CT"的对齐思路与精度上限(约 2 mm 深度) |
| 算法质量控制 | 对重建组件做标准化验收 | 提供官方评测指标(Bad3、RMSE)与工具包 |
§2.4 样本人群描述
SERV-CT 的"研究对象"不是患者,而是 2 只 ex vivo 小型猪全躯干尸体。这一设计在小规模参考数据集的构建中很常见:动物尸体组织保留了真实生物组织的光学特性(镜面反射、湿润表面),同时规避了患者隐私、伦理审批与术中采集的复杂性。
| 维度 | 描述 | 来源 |
|---|---|---|
| 样本数量 | 2 只 ex vivo 小型猪全躯干尸体 | UCL Discovery 摘要 |
| 采样部位 | 全躯干,置于内镜视野内 | UCL Discovery 摘要 |
| 组织类型 | 多种软组织,含镜面光滑表面与大深度变化区域(论文讨论中点名肝脏、肾脏等光滑器官为难点) | 论文评测章节 |
| 人类受试者 | 无 | Semantic Scholar 元数据 |
§2.5 临床与科研价值
对临床转化而言,SERV-CT 的价值不在于直接训练临床模型,而在于为走向临床的重建算法提供一道可复现的质量关卡。论文明确指出,镜面高光是最主要的失败来源,3D 误差(毫米级 RMSE)比 2D 视差误差在跨实验比较中更稳定(论文评测章节)——这两条经验直接指导导航系统选型与验收指标设计。
从工程管理视角看,SERV-CT 还回答了一个常被忽视的问题:重建组件的"验收精度"应该定在哪里。参考真值自身带有约 2 px / 2 mm 的噪声底(UCL Discovery),这意味着任何声称优于该量级的改进都需要更精确的参考来证明;反过来,对于以毫米为单位的导航应用(典型需求为 5-10 mm 级),一个噪声底 2 mm 的验证集已足够区分"可用"与"不可用"的算法,这解释了为什么该数据集以适中的规模就能承担行业验证职能。
对科研而言,它是继 SCARED 之后内镜重建方向被广泛引用的验证基准之一(截至 2026-09 被引 67+ 次,见 Semantic Scholar),并因"零门槛下载"而适合作为方法论教学素材。
§2.6 参照标准(金标准)性质
| 项目 | 内容 |
|---|---|
| 参照来源 | O-arm 锥形束 CT 导出的解剖表面(第二样本另含 Creaform 结构光表面) |
| 建立方式 | 半手动对齐 + OpenGL Z-buffer 渲染(非物理标记点) |
| 精度 | 重复对齐 RMS:视差约 2 像素、深度约 2 mm(UCL Discovery) |
| 性质 | 验证/评测专用真值;非训练标签;覆盖大部分内镜视野但存在遮挡与表面外区域(以颜色掩码显式区分) |
§3 数据集规格
§3.0 版本抉择矩阵
SERV-CT 官方提供两个打包版本,均从 UCL Research Data Repository 下载(B2FIND):
| 你的需求 | 推荐版本 | 内容 | 理由 |
|---|---|---|---|
| 只想跑立体匹配评测 | SERV-CT.zip | 矫正立体对 + 参考视差/深度/遮挡 + 标定 | 文件更少,评测所需全部齐备 |
| 复现对齐管线 / 研究标注方法 | SERV-CT-ALL.zip | 简化版内容 + CT 表面 + 手动对齐软件 | 只有完整版包含 CT 表面网格与对齐工具 |
| 只要评测脚本 | servcttk(GitHub) | Python 评测与读写代码 | 与数据版本配套,注意 changelog |
§3.1 模态详情
| 模态 | 设备 | 角色 | 关键参数 |
|---|---|---|---|
| 立体内镜 RGB | 第一代 da Vinci Surgical System 直镜与 30° 镜(Intuitive Inc., Sunnyvale, US) | 被验证的输入图像 | 720×576,24-bit PNG,已立体矫正 |
| 锥形束 CT | Medtronic O-arm | 参考真值来源 | 解剖与镜身同入扫描,支持受约束对齐 |
| 手持结构光 RGB 表面 | Creaform 手持扫描仪(论文记为 Go SCAN 20) | 第二样本的补充参考 | 用于平滑无特征表面对齐(Experiment_2 的 Ground_truth_RGB) |
来源:B2FIND、servcttk README、论文。
§3.2 子集与样本数
| 子集 | 帧编号 | 立体对数 | 参考来源 | 说明 |
|---|---|---|---|---|
| Experiment_1 | 001-008 | 8 | Ground_truth_CT(O-arm CT) | 第一只猪尸体 |
| Experiment_2 | 009-016 | 8 | Ground_truth_CT + Ground_truth_RGB(Creaform)双套参考 | 第二只猪尸体;同一帧提供 CT 与结构光两套参考 |
合计 16 组矫正立体对(servcttk README)。CT 扫描的获取条件限制了每只样本只能取 8 组立体对(UCL Discovery)。
双参考源设计是理解 Experiment_2 的关键:同一内镜帧同时拥有来自 O-arm CT 与 Creaform 结构光的两套参考,二者经不同的几何管线生成,可用于交叉审视对齐一致性,也为"参考自身误差对评测结论的影响"提供了研究素材。代价是使用者必须显式声明所选参考源——忽略这一步会让跨论文比较失效(见 坑点 4)。
§3.3 数据格式
| 内容 | 格式与编码 | 说明 |
|---|---|---|
| 左/右矫正图像 | 24-bit PNG,720×576 | 已立体矫正,可直接输入立体匹配算法 |
| 参考视差(Disparity) | 16-bit PNG,左→右视差,数值 ×256 缩放(亚像素精度) | 真实视差 = 像素值 / 256 |
| 参考深度(DepthL/DepthR) | 16-bit PNG,到相机中心的 Z 深度(mm),数值 ×256 缩放 | 真实深度 mm = 像素值 / 256 |
| 遮挡图(OcclusionL/OcclusionR) | 颜色编码 PNG | 黄 = 非重叠区,蓝 = 参考表面之外,红 = 右图不可见 |
| 标定(Rectified_calibration) | JSON,含 P1、P2、Q 矩阵 | 单位为像素与 mm;Q 矩阵用于视差→深度/三维点换算 |
来源:servcttk README。
解码速查(最常见的两处误用已加粗):
| 你想得到 | 原始像素值处理 | 示例 |
|---|---|---|
| 视差(像素) | float32 后 ÷256 | 原始 1280 → 5.0 px |
| 深度(mm) | float32 后 ÷256 | 原始 51,200 → 200.0 mm |
| 有效评测区 | 按 §4.5 颜色匹配生成掩码 | 排除黄/蓝/红 |
| 三维点(mm) | Q 矩阵作用于 (u, v, d, 1) 齐次坐标 | 见 §6.3 |
§3.4 存储与打包
官方以两个 ZIP 包发布(见 §3.0),仓库另提供逐文件下载通道(figshare 底层,见 UCL 仓库)。官方元数据未标注压缩包体积,下载前请以仓库页面显示为准;数据集为纯图像 + JSON,总量远小于视频类手术数据集。
下载内容的构成可按用途拆解为三块:输入(左右矫正图像,24-bit PNG)、参考(视差/深度/遮挡,16-bit PNG 与颜色编码 PNG)、元数据(标定 JSON)。SERV-CT-ALL.zip 额外包含 CT 表面网格与手动对齐软件(B2FIND),后两者仅复现对齐管线时才需要;仅做算法评测时,简化版 SERV-CT.zip 即可覆盖全部需求。评测脚本不在 ZIP 内,而是从 servcttk 仓库 单独获取,并按其 changelog 与数据版本对齐。
§3.5 标注方式
标注属于"半人工对齐 + 程序化渲染"的混合范式。论文将管线归纳为五个阶段,每一步的输入、工具与输出如下(论文方法章节):
| 阶段 | 操作 | 使用的工具/设备 | 产出 |
|---|---|---|---|
| 1. 数据采集 | 猪尸体与内镜同置于 O-arm 内做锥形束 CT 扫描 | Medtronic O-arm;第一代 da Vinci 立体内镜 | 解剖与镜身同体的 CT 体数据 + 内镜立体帧 |
| 2. 分割 | 从 CT 中分割解剖表面与镜身 | ITK-Snap | CT 导出的三维表面网格 |
| 3. 对齐 | 在镜身可见约束下,手动微调 CT 虚拟相机位姿,使其与内镜立体视图匹配 | 自研对齐软件(随 SERV-CT-ALL.zip 提供) | 每帧的内镜相对解剖表面的位姿 |
| 4. 精化 | 对无特征平滑表面,利用外部结构光扫描补充纹理以辅助对齐(第二样本) | Creaform 手持结构光扫描仪 | 高置信度表面对齐 |
| 5. 参考渲染 | 以对齐后的几何模型做 Z-buffer 渲染,生成逐像素参考 | OpenGL Z-buffer | 参考视差、深度、遮挡掩码与标定 |
这与传统的"人工标记对应点"方式不同:参考不是逐点采集,而是由对齐后的几何模型整体渲染,因此覆盖大部分视野且在有效区域内密集。该方法也解释了数据集的两个天然属性:(1) 精度上限由人工对齐决定(约 2 px / 2 mm);(2) 参考真值在有效区域内没有采样空洞,与标记点式参考形成互补(论文方法章节)。
§3.6 标注者资质与一致性
论文未公开标注者的人数与资质细节,但通过重复对齐实验量化了一致性:同一视图的重复手动对齐给出 RMS 视差精度约 2 像素、深度精度约 2 mm(UCL Discovery 摘要)。作者同时承认,该流程依赖操作者的立体感知技能,是数据集的已知局限之一(论文限制讨论)。使用者在解读毫米级误差时应将 2 mm 参考噪声计入总误差预算。
§3.7 采集周期
官方资料未公布确切的采集起止日期。可核实的相邻时间锚点为:论文预印本于 2020-12-21 提交(arXiv),数据集修订记录为 2021-01-18(servcttk changelog)。据此推断采集不晚于 2020 年末,本页不给出更精确的区间。
§3.8 地域覆盖
数据在实验室环境采集(ex vivo),主要完成机构为伦敦大学学院(UCL Centre for Surgical and Interventional Sciences / WEISS,英国伦敦),合作机构包括德国国家肿瘤疾病中心德累斯顿(NCT Dresden)与德国癌症研究中心(DKFZ)(openmedlab 收录页)。数据不涉及地理人群分布。
§3.9 设备规格
| 设备 | 型号/版本 | 用途 |
|---|---|---|
| 手术机器人内镜 | 第一代经典 da Vinci Surgical System(Intuitive Inc.),直镜与 30° 镜 | 立体图像采集(720×576) |
| 锥形束 CT | Medtronic O-arm | 解剖与镜身同体扫描,参考真值来源 |
| 手持结构光扫描仪 | Creaform(论文记为 Go SCAN 20) | 第二样本的无特征表面对齐辅助与补充参考 |
| 分割软件 | ITK-Snap | CT 中解剖表面与镜身的分割 |
值得注意的是设备组合中的两处"年代印记":其一,内镜为第一代 da Vinci 系统,分辨率 720×576,与现代 4K 3D 内镜存在明显代差,因此在该数据集上调优的图像处理参数不宜直接移植到新平台;其二,O-arm 属于移动式术中 CT,成像质量低于诊断级 CT——这恰恰是其价值所在:它代表了手术室场景下可实际获得的影像质量,使参考真值的"可达精度"更贴近真实临床约束(§3.9 设备规格 及 B2FIND 元数据)。
§3.10 深度溯源链
SERV-CT 的完整溯源链如下表所示,每一级都可独立访问并交叉核验:
| 层级 | 主体 | 可核验信息 | 入口 |
|---|---|---|---|
| L1 发表层 | Medical Image Analysis 论文(2022,第 76 卷,102302) | 方法、评测与限制的权威叙述 | PubMed / PMC8961000 |
| L2 存档层 | UCL Research Data Repository(figshare 底层,v1) | DOI、许可(CC BY 4.0)、文件清单、发布者 | UCL 仓库 |
| L3 机构层 | WEISS open data server 项目主页 | 数据集与相关开放数据的机构入口 | UCL WEISS |
| L4 工具层 | servcttk 官方评测仓库 | 评测协议、数据格式文档、changelog | GitHub |
| L5 独立索引 | NLM 数据集目录、EUDAT B2FIND | MeSH 主题词、资助号、ORCID 的第三方记录 | NLM / B2FIND |
资金与利益记录:资助方为 EPSRC(EP/P027938/1、EP/R004080/1、EP/P012841/1)、Wellcome/EPSRC WEISS(203145Z/16/Z)与英国皇家工程院(CiET1819/2/36)(NLM);论文披露作者与 Odin Vision Ltd、Digital Surgery 的企业关联(PMC)。
§4 数据结构
§4.0 目录树
数据解压后(SERV-CT.zip)的目录结构如下(与 servcttk README 一致):
SERV-CT
├── Experiment_1 - frames 001-008
│ ├── Ground_truth_CT # O-arm CT 参考
│ │ ├── DepthL # 左图深度图(mm,×256,16-bit PNG)
│ │ ├── DepthR # 右图深度图(mm,×256,16-bit PNG)
│ │ ├── Disparity # 左→右视差(×256,16-bit PNG)
│ │ ├── OcclusionL # 颜色编码遮挡图
│ │ └── OcclusionR
│ ├── Left_rectified # 左矫正图(720×576,24-bit PNG)
│ ├── Rectified_calibration # JSON 标定(P1、P2、Q;像素与 mm)
│ └── Right_rectified # 右矫正图
└── Experiment_2 - frames 009-016
├── Ground_truth_CT # 同 Experiment_1 结构
│ ├── DepthL
│ ├── DepthR
│ ├── Disparity
│ ├── OcclusionL
│ └── OcclusionR
├── Ground_truth_RGB # Creaform 结构光参考(仅 Experiment_2)
│ ├── DepthL
│ ├── DepthR
│ ├── Disparity
│ ├── OcclusionL
│ └── OcclusionR
├── Left_rectified
├── Rectified_calibration
└── Right_rectified
SERV-CT-ALL.zip 在此基础上增加 CT 表面网格与手动对齐软件(B2FIND)。
§4.1 DAIMS 字段字典
核心文件字段的 8 列字典如下。"观测误差"统一指参考真值自身的系统噪声:重复对齐的 RMS 视差约 2 像素、深度约 2 mm(UCL Discovery)。
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| Left_rectified/*.png | uint8 图像 | 左矫正内镜图 | Experiment_1/Left_rectified/001.png | 立体匹配输入 | — | — | 0-255,720×576 |
| Right_rectified/*.png | uint8 图像 | 右矫正内镜图 | Experiment_1/Right_rectified/001.png | 立体匹配输入 | — | — | 0-255,720×576 |
| Disparity/*.png | uint16 图像 | 左→右参考视差,×256 缩放 | 值 1280 = 视差 5.0 px | 回归标签;评测参考 | RMS 约 2 px | 见遮挡图 | 0-65535(实际值 / 256) |
| Ground_truth_CT/DepthL/*.png | uint16 图像 | 左图到相机中心 Z 深度(mm),×256 缩放 | 值 51200 = 200.0 mm | 深度回归标签;3D 误差评测 | RMS 约 2 mm | 见遮挡图 | 0-65535(实际值 / 256) |
| Ground_truth_CT/DepthR/*.png | uint16 图像 | 右图深度,同上 | 同上 | 深度回归标签 | RMS 约 2 mm | 见遮挡图 | 同上 |
| OcclusionL/*.png | 颜色编码图像 | 遮挡/有效性掩码 | 黄 = 非重叠,蓝 = 表面外,红 = 右图不可见 | 评测掩码;区域划分 | — | 颜色即语义 | 黄/蓝/红三色 |
| OcclusionR/*.png | 颜色编码图像 | 右图遮挡掩码 | 同上 | 评测掩码 | — | 颜色即语义 | 黄/蓝/红三色 |
| Rectified_calibration/*.json | JSON | 立体标定矩阵 P1、P2 与重投影矩阵 Q | P1/P2 3×4;Q 4×4 | 视差→深度/三维点换算 | — | — | 数值矩阵 |
| Experiment_2/Ground_truth_RGB/DepthL/*.png | uint16 图像 | 第二样本的结构光参考深度(mm),×256 缩放 | 值 51200 = 200.0 mm | 与 CT 参考交叉验证;平滑表面对齐研究 | 由对齐管线决定(见 §3.6) | 见对应遮挡图 | 0-65535(实际值 / 256) |
| Experiment_2/Ground_truth_RGB/Disparity/*.png | uint16 图像 | 第二样本的结构光参考视差,×256 缩放 | 值 1280 = 视差 5.0 px | 平滑无特征表面对齐研究的补充参考 | 同上 | 见对应遮挡图 | 同上 |
§4.2 参考值分布特征
官方文档未提供逐帧视差/深度的统计摘要表。可核实的分布性描述来自论文:参考覆盖"大部分内镜视野",并刻意包含"多种组织类型、镜面光滑表面以及显著的深度变化"(UCL Discovery 摘要)。有效区域由遮挡掩码界定;蓝色像素(参考表面之外)不参与评测。若需要精确的视差直方图,可基于 16 幅参考图自行统计:
import numpy as np
from PIL import Image
from pathlib import Path
# 自行统计参考分布:逐帧输出有效区视差的摘要(替代缺失的官方摘要表)
def per_frame_stats(data_root: str, ref_source: str = "Ground_truth_CT"):
rows = []
for exp in sorted(Path(data_root).glob("Experiment_*")):
gt = exp / ref_source
if not gt.exists():
continue
for disp_path in sorted((gt / "Disparity").glob("*.png")):
raw = np.asarray(Image.open(disp_path)).astype(np.float32) / 256.0
occ = np.asarray(Image.open(gt / "OcclusionL" / disp_path.name).convert("RGB"))
yellow = np.all(occ == (255, 255, 0), axis=-1)
blue = np.all(occ == (0, 0, 255), axis=-1)
red = np.all(occ == (255, 0, 0), axis=-1)
valid = ~(yellow | blue | red)
v = raw[valid]
rows.append({
"exp": exp.name[:13], "frame": disp_path.stem,
"valid%": round(100 * valid.mean(), 1),
"disp_min": round(float(v.min()), 2) if v.size else None,
"disp_max": round(float(v.max()), 2) if v.size else None,
"disp_mean": round(float(v.mean()), 2) if v.size else None,
})
return rows
# for r in per_frame_stats("data/SERV-CT"):
# print(r) # 输出 16 行帧级摘要,可直接粘贴进实验记录
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 立体对总数 | 16(Experiment_1:8;Experiment_2:8) | servcttk README |
| 图像分辨率 | 720×576 | servcttk README |
| 猪尸体样本数 | 2(ex vivo) | UCL Discovery |
| Experiment_2 的参考套数 | 2 套/帧(CT + Creaform RGB) | servcttk README |
| 参考精度(重复对齐 RMS) | 视差约 2 px;深度约 2 mm | UCL Discovery |
| 论文被引 | 67+(截至 2026-09) | Semantic Scholar |
§4.4 数据层级
数据集的组织层级为:数据集 → 实验(Experiment_1/Experiment_2,对应 2 只猪尸体)→ 帧组(frames 001-016)→ 模态目录(矫正图像、标定、参考真值)→ 单文件。每个立体对由同一帧号串联:Left_rectified/NNN.png + Right_rectified/NNN.png 对应 Disparity/NNN.png、DepthL/NNN.png、DepthR/NNN.png、OcclusionL/NNN.png、OcclusionR/NNN.png 与 Rectified_calibration/NNN.json。Experiment_2 的每帧额外拥有 Ground_truth_RGB 参考目录,评测时必须显式选择参考源(CT 或 RGB),二者不可混用(servcttk README)。
这一层级设计对 AI 工程的直接含义是:帧号(frame_id)是最自然的样本主键。任何实验记录、评测输出与结果数据库都建议以 experiment + frame + ref_source 三元组作为联合主键,既避免 Experiment_2 双参考的歧义,也让 §7.7 DAIMS 中的唯一标识检查可以机器化。
§4.5 缺失值与信息性缺失编码
SERV-CT 不存在传统表格意义上的缺失单元格;其"无效区域"通过遮挡图的颜色编码显式表达(servcttk README):
| 颜色 | 含义 | 评测处理建议 |
|---|---|---|
| 黄色 | 左右视图非重叠区 | 该像素无立体对应,视差评测应排除(或按论文口径单独统计"含遮挡"结果) |
| 蓝色 | 像素位于参考表面之外 | 无真值,必须排除 |
| 红色 | 左图可见但右图不可见(单目可见) | 视差评测排除;可用于单目重建的单独评估(论文强调该区无可靠立体对应) |
读取代码与颜色常量见 §6.3。
§5 划分与使用建议
§5.1 官方划分
SERV-CT 无训练/验证/测试划分——它从设计上就是验证集,论文明确说明样本量"不足以训练"(UCL Discovery 摘要)。官方的隐含用法是:全部 16 对作为测试集,或按 Experiment_1 / Experiment_2 两个子集分别报告。
§5.2 社区惯例
- 全 16 对测试:多数后续工作直接在全部 16 对上报告平均指标(RRESM 即采用"全部 16 对用于测试")。
- 分子集报告:论文及综述按 Experiment_1 / Experiment_2 分别给出指标,例如 HSM 的 Bad3 在两个子集上分别为 8.34% ± 8.31% 与 5.46% ± 2.96%(MDPI Journal of Imaging 综述)。
- 双参考源选择:Experiment_2 需显式声明使用 CT 参考还是 Creaform RGB 参考;跨论文比较时必须核对口径(见 坑点 4)。
§5.3 泄漏风险
| 风险 | 描述 | 缓解 |
|---|---|---|
| 预训练域未声明 | 在 KITTI/SceneFlow 预训练后直接在 SERV-CT 评测属常规做法,但若不声明预训练来源,数字不可比(论文演示了同一模型换预训练域后 Bad3 从 15.31 恶化到 87.06 的极端案例) | 报告时显式标注预训练数据集(论文表格) |
| SCARED 近域训练 | SCARED 与 SERV-CT 同为猪腹腔/腹膜组织,在 SCARED 上训练后声称"零样本泛化到手术场景"会高估泛化性 | 泛化声明应明确区分"域内近迁移"与"跨域泛化"(参见 坑点 5) |
| 同帧双参考混用 | Experiment_2 的 CT 与 RGB 参考对应同一帧,误将两套参考的均值当作"两倍数据" | 固定参考源并写入配置 |
§5.4 交叉验证建议
对仅 16 帧的验证集做 k 折交叉验证没有统计意义,不建议。更稳健的做法是:报告全 16 对的均值与标准差,并同时给出按子集(Experiment_1/2)、按参考源(CT/RGB)、按遮挡区域(含/不含)的分层指标——论文正是以这种分层方式呈现结果的(论文表格)。
§5.5 外部验证建议
SERV-CT 本身常被用作其他方法的外部验证集;反向地,建议在 SERV-CT 上训练/调参的组件到 SCARED 或真实 in vivo 数据上做外部验证,以检验对活体组织、烟雾、出血与器械场景的适应性(SERV-CT 不含这些要素,见 §7.1)。
一个可操作的分层验证方案如下:
| 验证层级 | 数据 | 回答的问题 | 通过标准建议 |
|---|---|---|---|
| 第 1 层:参考内评测 | SERV-CT 全 16 对 | 算法在理想静态条件下是否达到可用精度 | Bad3 与 RMSE 与 §8.1 同量级 |
| 第 2 层:近域评测 | SCARED 测试子集 | 对含器械、标定差异场景的适应性 | 相对第 1 层退化幅度可接受并记录 |
| 第 3 层:目标域评测 | 用户自有的目标平台数据 | 设备/场景迁移后是否仍可用 | 以业务指标为准,并对照第 1-2 层基线 |
该方案的核心思想是:SERV-CT 提供"协议锚点"(口径统一、可比性强),而部署决策必须由更贴近目标场景的第 2-3 层证据支撑。
§6 AI 就绪指南
§6.0 云端快速启动
官方未提供托管 Notebook 或云端镜像。在 Colab 等环境中只需三步:挂载存储 → 从 UCL 仓库 下载 SERV-CT.zip → 解压。数据量小,普通 CPU 实例即可完成加载与评测;仅推理深度立体网络时需要 GPU(参考:论文评测中 HSM 于 V100 上达到 20 FPS,见 MDPI 综述)。
搭建环境时依赖极少:Python 3 + numpy + Pillow 即可完成本页 §6.1-§6.3 的全部流程;使用官方 servcttk 时按其 requirements.txt 建 anaconda 环境(conda create -n servcttk --file requirements.txt -c conda-forge)。若需推理深度立体网络,再另行安装对应模型的依赖即可——SERV-CT 本身对框架无任何绑定。
§6.1 快速上手
下面的代码假设数据已解压到 data_root 指向的目录,目录内部结构与 §4.0 目录树 完全一致;最小可用子集为 Experiment_1 的任意一对(例如帧 001),即可完成"读图 → 读参考 → 检查对齐"的闭环。
import json
from pathlib import Path
import numpy as np
from PIL import Image
# 目录结构预期(与 §4.0 目录树一致):
# data_root/
# SERV-CT/
# Experiment_1 - frames 001-008/
# Left_rectified/001.png ... 008.png
# Right_rectified/001.png ...
# Ground_truth_CT/Disparity/001.png ...
# Ground_truth_CT/DepthL/001.png ...
# Ground_truth_CT/OcclusionL/001.png ...
# Rectified_calibration/001.json ...
# 最小可用子集:任一帧(001-016)。data_root 即解压后的 "SERV-CT" 目录。
data_root = Path("data/SERV-CT")
exp1 = data_root / "Experiment_1 - frames 001-008"
def load_rectified_pair(exp_dir: Path, frame: str):
"""读取一对矫正内镜图(24-bit PNG,720×576)。"""
left = np.asarray(Image.open(exp_dir / "Left_rectified" / f"{frame}.png"))
right = np.asarray(Image.open(exp_dir / "Right_rectified" / f"{frame}.png"))
return left, right
def load_disparity(exp_dir: Path, frame: str, gt_dir: str = "Ground_truth_CT"):
"""读取参考视差。注意:16-bit PNG 存储,真实视差 = 像素值 / 256。"""
raw = np.asarray(Image.open(exp_dir / gt_dir / "Disparity" / f"{frame}.png"))
return raw.astype(np.float32) / 256.0
def load_depth(exp_dir: Path, frame: str, side: str = "DepthL", gt_dir: str = "Ground_truth_CT"):
"""读取参考深度(mm)。同样 ×256 缩放。"""
raw = np.asarray(Image.open(exp_dir / gt_dir / side / f"{frame}.png"))
return raw.astype(np.float32) / 256.0
def load_calibration(exp_dir: Path, frame: str):
"""读取标定 JSON(P1、P2、Q;单位像素与 mm)。"""
with open(exp_dir / "Rectified_calibration" / f"{frame}.json") as f:
return json.load(f)
left, right = load_rectified_pair(exp1, "001")
disp = load_disparity(exp1, "001")
depth = load_depth(exp1, "001")
print(left.shape, right.shape, disp.min(), disp.max(), depth.max())
建议在编写正式代码前,先跑一个完整性校验,确认本地副本文件齐全且版本正确(见 坑点 6):
from pathlib import Path
def check_servct_integrity(data_root: str) -> bool:
"""校验 16 对样本的必需文件是否齐全(Experiment_2 需 CT + RGB 两套参考)。"""
root = Path(data_root)
ok = True
for frame in range(1, 17):
exp = root / ("Experiment_1 - frames 001-008" if frame <= 8
else "Experiment_2 - frames 009-016")
f = f"{frame:03d}"
needed = [
exp / "Left_rectified" / f"{f}.png",
exp / "Right_rectified" / f"{f}.png",
exp / "Rectified_calibration" / f"{f}.json",
exp / "Ground_truth_CT" / "Disparity" / f"{f}.png",
exp / "Ground_truth_CT" / "DepthL" / f"{f}.png",
exp / "Ground_truth_CT" / "OcclusionL" / f"{f}.png",
]
if frame > 8:
needed += [
exp / "Ground_truth_RGB" / "Disparity" / f"{f}.png",
exp / "Ground_truth_RGB" / "DepthL" / f"{f}.png",
]
missing = [p for p in needed if not p.exists()]
if missing:
ok = False
print(f"[缺失] 帧 {f}: {[m.relative_to(root) for m in missing]}")
print("完整性校验:", "通过" if ok else "存在缺失,请重新下载并核对版本")
return ok
# check_servct_integrity("data/SERV-CT")
§6.2 数据获取
| 事项 | 内容 |
|---|---|
| 官方主页 | WEISS open data server — SERV-CT |
| 下载页 | UCL Research Data Repository(DOI 10.5522/04/26352199.v1) |
| 版本选择 | SERV-CT.zip(仅评测)或 SERV-CT-ALL.zip(含 CT 表面与对齐软件),见 §3.0 |
| 申请流程 | 无需注册、无需署名协议、无 embargo;直接下载 |
| 许可 | CC BY 4.0(使用时须署名并引用论文) |
| 元数据核验 | B2FIND、NLM 数据集目录 |
# 命令行下载示例(以 UCL 仓库页面上列出的文件下载链接为准;
# figshare 底层的 ndownloader 链接可在仓库页面的 Download 按钮处获得)
curl -L -o SERV-CT.zip "<下载页提供的 ndownloader 链接>"
unzip SERV-CT.zip -d data/
§6.3 预处理全流程
SERV-CT 的图像已立体矫正,无需再做矫正;预处理的重点是参考数据的正确解码与掩码的语义解析。
import numpy as np
from PIL import Image
# 步骤 1:解码参考视差/深度(×256 缩放,见 §3.3)
def read_ref(path):
raw = np.asarray(Image.open(path)) # uint16
return raw.astype(np.float32) / 256.0 # 恢复真实物理值
# 步骤 2:解析遮挡掩码(颜色语义,见 §4.5)
OCCLUSION_COLORS = {
"yellow": (255, 255, 0), # 非重叠区:无立体对应
"blue": (0, 0, 255), # 参考表面之外:无真值
"red": (255, 0, 0), # 右图不可见:单目可见区
}
def read_valid_mask(occ_path, include_non_overlap=False):
"""返回可参与视差评测的布尔掩码。
默认排除黄/蓝/红全部三类区域;include_non_overlap=True 时
保留黄色区(对应论文"occlusions included"口径)。"""
occ = np.asarray(Image.open(occ_path).convert("RGB"))
yellow = np.all(occ == OCCLUSION_COLORS["yellow"], axis=-1)
blue = np.all(occ == OCCLUSION_COLORS["blue"], axis=-1)
red = np.all(occ == OCCLUSION_COLORS["red"], axis=-1)
invalid = blue | red | (yellow if not include_non_overlap else blue | red)
return ~invalid
# 步骤 3:视差 → 深度/三维点(Q 矩阵换算,单位 mm)
def disparity_to_depth(disp, Q):
"""disp: H×W 参考视差;Q: 4×4 重投影矩阵(JSON 中读取)。
返回逐像素三维坐标(H, W, 3),单位 mm。"""
H, W = disp.shape
u, v = np.meshgrid(np.arange(W), np.arange(H))
ones = np.ones_like(disp)
pix = np.stack([u, v, disp, ones], axis=-1).reshape(-1, 4).T # 4×N
pts = (Q @ pix).T # N×4
pts = pts[:, :3] / pts[:, 3:4]
return pts.reshape(H, W, 3)
# 步骤 4:统计参考分布(自检,替代缺失的官方摘要表)
def ref_summary(disp, mask):
v = disp[mask]
return {"min": float(v.min()), "max": float(v.max()),
"mean": float(v.mean()), "valid_ratio": float(mask.mean())}
要点回顾:(1) 直接把 16-bit 参考图当普通灰度图可视化会得到全黑或饱和的图像,先 /256;(2) 遮挡图必须用 convert("RGB") 后按颜色精确匹配,任何 resize/压缩都可能引入混色;(3) Q 矩阵把视差换算到毫米级三维坐标,是复现论文 3D RMSE 的关键输入。
在进入评测前,再做一次参考自洽性检查——由深度图反投影重投影回另一视图,应得到接近对齐噪声水平(约 2 px)的误差;若误差显著更大,说明解码或标定读取有误:
import numpy as np
def reproject_check(depth_l: np.ndarray, Q: np.ndarray,
P1: np.ndarray, P2: np.ndarray, mask: np.ndarray):
"""用左图深度反投影为三维点,再投影到右图;返回像素坐标(供与
特征匹配结果对照,或做量级自检)。mask 为有效区掩码。"""
H, W = depth_l.shape
u, v = np.meshgrid(np.arange(W), np.arange(H))
z = depth_l / 1000.0 # mm → m(示例单位约定,需与标定一致)
x = (u - P1[0, 2]) / P1[0, 0] * z
y = (v - P1[1, 2]) / P1[1, 1] * z
pts = np.stack([x, y, z, np.ones_like(z)], axis=-1)[mask]
uvw = (P2 @ pts.T).T
uv = uvw[:, :2] / uvw[:, 2:3]
return uv # N×2:右图像素坐标
该检查的单位约定须与标定 JSON 内部约定保持一致(官方标定单位为像素与 mm,servcttk README);其目的不是替代官方评测,而是在管线搭建阶段快速定位"解码/标定/坐标序"三类低级错误。
§6.4 PyTorch DataLoader
import json
from pathlib import Path
import numpy as np
import torch
from PIL import Image
from torch.utils.data import Dataset, DataLoader
class ServCTDataset(Dataset):
"""SERV-CT 立体对数据集(仅推理/评测用;16 对,无训练划分)。
目录结构预期见 §4.0;ref_source 决定 Experiment_2 使用哪套参考
("Ground_truth_CT" 或 "Ground_truth_RGB")。
"""
def __init__(self, data_root: str, ref_source: str = "Ground_truth_CT",
crop_size=(384, 480)):
self.root = Path(data_root)
self.ref_source = ref_source
self.crop_size = crop_size
self.samples = []
for exp in sorted(self.root.glob("Experiment_*")):
gt_dir = exp / ref_source
if not gt_dir.exists():
continue
for left_path in sorted((exp / "Left_rectified").glob("*.png")):
frame = left_path.stem
self.samples.append({
"exp": exp,
"frame": frame,
"left": left_path,
"right": exp / "Right_rectified" / left_path.name,
"disp": gt_dir / "Disparity" / left_path.name,
"occ": gt_dir / "OcclusionL" / left_path.name,
"calib": exp / "Rectified_calibration" / f"{frame}.json",
})
def __len__(self):
return len(self.samples)
def _random_crop(self, *arrays):
# 立体匹配的标准裁剪:H×W → crop_size;所有层同步裁剪保证像素对齐
h, w = arrays[0].shape[:2]
ch, cw = self.crop_size
y = np.random.randint(0, h - ch + 1)
x = np.random.randint(0, w - cw + 1)
return [a[y:y + ch, x:x + cw] for a in arrays]
def __getitem__(self, idx):
s = self.samples[idx]
left = np.asarray(Image.open(s["left"]))
right = np.asarray(Image.open(s["right"]))
disp = np.asarray(Image.open(s["disp"])).astype(np.float32) / 256.0
occ = np.asarray(Image.open(s["occ"]).convert("RGB"))
with open(s["calib"]) as f:
calib = json.load(f)
# 有效掩码:排除蓝(表面外)与红(右图不可见);黄色按需保留
blue = np.all(occ == (0, 0, 255), axis=-1)
red = np.all(occ == (255, 0, 0), axis=-1)
yellow = np.all(occ == (255, 255, 0), axis=-1)
valid = ~(blue | red | yellow)
left, right, disp, valid = self._random_crop(left, right, disp, valid)
to_tensor = lambda a: torch.from_numpy(np.ascontiguousarray(a))
return {
"left": to_tensor(left.transpose(2, 0, 1)).float() / 255.0,
"right": to_tensor(right.transpose(2, 0, 1)).float() / 255.0,
"disp": to_tensor(disp),
"valid": to_tensor(valid.astype(np.uint8)).bool(),
"frame": s["frame"],
"Q": torch.tensor(np.array(calib["Q"]), dtype=torch.float32),
}
# 实例化:评测时建议 batch_size=1、shuffle=False,保持帧号可追溯
if __name__ == "__main__":
ds = ServCTDataset("data/SERV-CT", ref_source="Ground_truth_CT")
print(f"共 {len(ds)} 个立体对")
loader = DataLoader(ds, batch_size=1, shuffle=False, num_workers=2)
batch = next(iter(loader))
print(batch["left"].shape, batch["disp"].shape, batch["valid"].dtype)
三个工程细节值得强调:
- 推理时不要随机裁剪:随机裁剪适合可视化调试,但进入正式评测应使用整幅 720×576 或固定裁剪窗口,否则与文献数字不可比(论文评测为整幅参考)。
- 帧号要随 batch 流转:
frame字段随输出返回,确保评测明细能落回到具体样本(坑点 8 的帧级分析依赖它)。 num_workers与掩码解析:掩码解析含颜色匹配,较耗时;多进程加载可隐藏该开销,但 Windows/macOS 下注意if __name__ == "__main__"保护。
模型输出的视差图与参考对齐后的评测代码见 §6.9。
§6.5 坑点与常见错误
⚠️ 坑点 1:16-bit 参考图按 8 位读入,视差/深度整体失真(分类:预处理陷阱)
问题:参考视差与深度以 16-bit PNG 存储、数值 ×256 缩放。用默认的 8 位读取(或转 uint8/转灰度)会丢失精度甚至整幅错位,所有依赖参考值的预处理(归一化、裁剪、可视化)随之出错。
症状:参考视差可视化全黑或呈条纹;训练损失一开始就异常大;评测 RMSE 出现数百像素/毫米的量级错误。
解决:
- 简单方法:读入后统一执行
float32 / 256.0,见 §6.3 的read_ref。- 进阶方法:在数据集类中加入断言自检:
assert disp.max() <= 65535 and disp.dtype == np.uint32 or raw.dtype == np.uint16,并对disp.min() < 0的情况报警;或直接复用 servcttk 提供的官方读写函数。- SOTA 方法:把解码逻辑封装为数据版本检查(结合 坑点 6 的 changelog),在 CI 中用固定帧(如 001)的统计量(均值/最大值)做回归测试,防止依赖升级后 PIL/OpenCV 读取行为变化。
参考:servcttk README 数据格式章节
⚠️ 坑点 2:忽略遮挡掩码,把无效像素计入评测(分类:标签理解)
问题:视差/深度参考在遮挡、非重叠与表面外区域无真值(颜色编码见 §4.5)。不排除这些像素,误差统计会混入大量"伪误差"。
症状:RMSE 高得离谱;与论文数字差一个数量级;不同实现之间结果不可比。
解决:
- 简单方法:评测前按颜色生成有效掩码并排除全部无效区(见 §6.4 的
valid)。- 进阶方法:复现论文的两种口径——“occlusions not included” 与 “included”(论文表格中同一模型两口径数字差异显著,例如 HSM level1 的 Mean Bad3 为 6.58 对 10.40),报告时显式注明口径(论文表格)。
- SOTA 方法:分层报告:有效区总误差 + 遮挡邻域(红/黄区膨胀若干像素)误差,用于分析算法在遮挡边界的退化;并将掩码解析写入评测脚本而非手工作业。
参考:servcttk README、论文评测章节
⚠️ 坑点 3:把"深度"当沿光轴距离,Q 矩阵换算被跳过(分类:标签理解)
问题:官方 Depth 图的数值是"三维点到相机中心的 Z 距离"(Z between 3D point and camera center),并非沿光轴的 Z 分量,也不是欧氏距离;视差→深度的换算必须使用标定 JSON 中的 Q 矩阵。
症状:用f·B/d手工换算后与 Depth 图对不上;3D RMSE 偏大且呈系统性偏差;把深度图喂给依赖针孔模型深度的下游模块出现尺度错乱。
解决:
- 简单方法:深度图直接以 mm 使用(×256 解码后),不做二次换算;视差→三维点一律走 Q 矩阵(见 §6.3 的
disparity_to_depth)。- 进阶方法:对换算后的三维点做双向自检:由 DepthL 反投影的三维点重投影回左右图,误差应接近标定噪声水平(约 2 px)。
- SOTA 方法:在评测中同时报告视差域(像素)与 3D 域(毫米)误差——论文指出 3D 误差在跨实验比较中更一致,建议作为主要指标(论文评测章节)。
参考:servcttk README(“reference in both disparity and depth (Z distance between 3D point and camera center) domain”)
⚠️ 坑点 4:SCARED 数字与 SERV-CT 数字直接同表比较(分类:评估误用)
问题:SCARED 的参考是三维点形式,构造视差参考依赖用户自己的矫正参数与实现;SERV-CT 提供矫正域内现成的双域参考。两者的指标虽然名字相同(MAE/Bad3),但数据管线口径不同,直接同表排名会引入系统性偏差。
症状:同一模型在两套基准上的相对排名与文献不符;审稿人质疑指标可比性。
解决:
- 简单方法:分表报告,并注明 SERV-CT 结果"不受重投影管线影响,仅反映算法性能"(论文 §5.1 的论点,PMC)。
- 进阶方法:若必须跨基准比较,统一实现评测脚本,对 SCARED 一侧显式记录重投影所用参数;对 SERV-CT 一侧直接使用官方参考与 servcttk。
- SOTA 方法:引用并同时报告两个口径族(视差域 Bad3 与 3D mm RMSE),在表注中声明各基准的参考构造方式与含/不含遮挡口径,复现 RRESM 等近期论文的规范写法(RRESM)。
参考:论文 §5.1 与 SCARED 对比
⚠️ 坑点 5:预训练域不声明,或在 SCARED 上训练后声称"零样本泛化"(分类:数据泄漏)
问题:SERV-CT 的多数使用者用预训练权重推理评测。预训练域(KITTI/SceneFlow)对结果影响巨大——论文中同一架构 DeepPruner 用 KITTI 预训练时 Mean Bad3 为 15.31,换 SceneFlow 预训练后恶化到 87.06(论文表格);而 SCARED 与 SERV-CT 同为猪组织,跨两者的"泛化"声明存在近域泄漏风险。
症状:复现文献数字失败;泛化性结论被审稿人推翻;不同论文间数字差异无法解释。
解决:
⚠️ 坑点 6:使用了被替换的旧版数据或与数据不配套的评测代码(分类:工程陷阱)
问题:官方 changelog 明确记录 2021-01-18"替换了过时版本的数据集";由于下载不收集邮箱,版本变更不主动通知,只在 servcttk 的 changelog 中登记。新旧版本混用会导致数字不可复现。
症状:同一段代码在同事机器上结果不同;与已发表数字有小的系统性差异;参考图与标定文件对不上。
解决:
- 简单方法:从 UCL 仓库 重新下载最新版,记录下载日期与 DOI(10.5522/04/26352199.v1)。
- 进阶方法:Watch servcttk 仓库跟踪 changelog;在实验配置中固定数据版本字符串(如
SERV-CT v1, downloaded 2026-09)并写入结果 JSON。- SOTA 方法:对固定帧计算参考统计指纹(各通道均值/最大值)存入版本清单,CI 启动时校验本地数据指纹与清单一致,防止数据被静默替换。
参考:servcttk README Changelog 章节
⚠️ 坑点 7:对遮挡图做 resize/插值,颜色语义被混合破坏(分类:预处理陷阱)
问题:遮挡图是精确的颜色编码(黄/蓝/红),任何双线性 resize、JPEG 压缩或色度子采样都会在色块边界产生混色像素,使颜色匹配失效。
症状:掩码中大量像素不属于任何已知颜色,valid掩码异常缩小;裁剪后掩码与图像边界错位。
解决:
- 简单方法:掩码与图像用同一几何变换,但掩码分支必须用最近邻插值(
Image.NEAREST/cv2.INTER_NEAREST)。- 进阶方法:先把三色掩码编码为 0/1/2 的索引图再参与几何变换,变换后还原,避免对原始 PNG 反复解码。
- SOTA 方法:在数据集中预编译掩码索引并缓存(
np.savez),运行时零解析开销;对未知颜色像素计数,超过阈值即报数据错误。
参考:servcttk README 颜色编码定义
⚠️ 坑点 8:在 16 帧上报告过强的排名结论(分类:偏倚陷阱)
问题:全部样本只有 16 对,单帧误差波动即可改变模型排名;论文评测中各算法的误差标准差普遍很大(如 HSM level1 的 Bad3 为 6.58 ± 4.82),小样本均值的置信区间很宽。
症状:两个模型的排名随随机种子/裁剪区域翻转;论文 A 与论文 B 对同两个算法的优劣结论相反。
解决:
§6.6 数据增强建议
| 增强方式 | 安全性 | 说明 |
|---|---|---|
| 随机裁剪(左右/参考/掩码同步) | ✅ 安全 | 立体匹配标准做法;注意裁剪后仍需覆盖足够视差范围 |
| 亮度/对比度小幅抖动(左右同步、同参数) | ✅ 安全(有限) | 模拟光照变化;参数过大可能放大镜面区失真 |
| 左右图独立几何变换 | ❌ 危险 | 破坏极线几何与视差定义,参考图随之失效 |
| 水平翻转 | ❌ 危险 | 立体对左右互换语义改变(视差方向反转),除非同时交换左右图并翻转视差符号 |
| 任意 resize(非最近邻)作用于掩码 | ❌ 危险 | 见 坑点 7 |
| 颜色通道随机置换/强色彩抖动 | ❌ 危险 | 内镜组织色彩是关键线索;强增强使评测偏离验证定位 |
若确需在自监督/域适应研究中对 SERV-CT 类图像做增强,建议将增强限制在光度类(左右同步的亮度/对比度)并保留原始帧做对照评测。同步几何裁剪的参考实现如下:
import numpy as np
def synced_crop(left, right, disp, valid, size=(384, 480), rng=None):
"""左右图、视差、掩码使用同一窗口裁剪(几何一致性关键)。"""
rng = rng or np.random.default_rng()
h, w = left.shape[:2]
ch, cw = size
y = int(rng.integers(0, h - ch + 1))
x = int(rng.integers(0, w - cw + 1))
win = (slice(y, y + ch), slice(x, x + cw))
return left[win], right[win], disp[win], valid[win]
任何增强都不得作用于评测路径:SERV-CT 的定位是验证集,评测必须使用原始帧与原始参考(见 §5.1)。
§6.7 模型推荐
下表汇总在 SERV-CT 上有公开数字的方法(口径各异,见 §8.1 的可比性说明):
| 方法 | 类型 | SERV-CT 表现(口径见引用) | 适用建议 |
|---|---|---|---|
| HSM(level1,KITTI 预训练) | 深度立体匹配 | 论文表格中表现最佳的家族之一;综述转引 Bad3 8.34% ± 8.31%(子集 1)、5.46% ± 2.96%(子集 2),20 FPS(V100) | 精度与速度均衡的首选基线 |
| PSMNet(KITTI 预训练) | 深度立体匹配 | Creaform 参考下 Mean Bad3 14.05 ± 8.03 | 经典基线,便于对照 |
| RAFT-Stereo | 深度立体匹配 | StereoMAE 论文(未微调):Exp1 MAE 2.03 mm | 通用性强,域差距仍显著 |
| StereoMAE | 掩码建模预训练 + 立体深度 | 未微调:Exp1 MAE 0.99 mm、EPE 1.06;Exp2 1.19 mm/1.68 | 关注泛化性时的参考方法 |
| DispNetC(KITTI 预训练) | 深度立体匹配 | Bad3 40.09% ± 26.41%(子集 1)(综述转引) | 作为域差距的反面案例 |
| Stereo-UCL | 传统/半全局类方法 | 论文中作为传统方法对照 | 无 GPU 环境的快速基线 |
§6.8 硬件需求
| 任务 | 最低配置 | 建议配置 | 依据 |
|---|---|---|---|
| 数据加载/解码/掩码处理 | CPU 任意,内存 ≥ 8 GB | 普通 CPU | 数据仅 16 对静态图像 |
| 传统方法评测(Stereo-UCL 等) | CPU | 多核 CPU | 论文传统基线无需 GPU |
| 深度立体网络推理 | 单卡 GPU(≥ 8 GB) | V100 级别(论文综述口径下 HSM 达 20 FPS) | MDPI 综述 |
| 训练 | 不适用 | 不适用 | 官方定位为验证集,样本量不足以训练(UCL Discovery) |
§6.9 评估指标实现
import numpy as np
def bad_n(disp_pred, disp_gt, valid, n=3.0):
"""Bad-n:视差误差大于 n 像素的像素占比(%)。论文主指标之一。"""
err = np.abs(disp_pred - disp_gt)
bad = (err > n) & valid
return 100.0 * bad.sum() / max(valid.sum(), 1)
def epe(disp_pred, disp_gt, valid):
"""End-Point Error:有效区平均绝对视差误差(像素)。"""
err = np.abs(disp_pred - disp_gt)[valid]
return float(err.mean()) if err.size else float("nan")
def rmse(disp_pred, disp_gt, valid):
"""视差 RMSE(像素);3D RMSE(mm)可先经 Q 矩阵转三维点再算欧氏距离。"""
err2 = (disp_pred - disp_gt)[valid] ** 2
return float(np.sqrt(err2.mean())) if err2.any() else float("nan")
def rmse_3d(pts_pred, pts_gt, valid):
"""3D RMSE(mm):pred/gt 为 (H, W, 3) 三维点(经 Q 矩阵换算)。
论文指出 3D 误差在跨实验比较中比 2D 视差误差更一致。"""
diff = ((pts_pred - pts_gt) ** 2).sum(axis=-1)[valid]
return float(np.sqrt(diff.mean())) if diff.size else float("nan")
def evaluate_sample(disp_pred, disp_gt, occ_path, include_occlusions=False):
"""单帧评测。mask 口径:默认排除全部无效区(occlusions not included);
include_occlusions=True 对应论文的 'occlusions included' 口径。"""
from PIL import Image
occ = np.asarray(Image.open(occ_path).convert("RGB"))
yellow = np.all(occ == (255, 255, 0), axis=-1)
blue = np.all(occ == (0, 0, 255), axis=-1)
red = np.all(occ == (255, 0, 0), axis=-1)
invalid = blue | red | (yellow if not include_occlusions else blue | red)
valid = ~invalid
return {
"Bad3": bad_n(disp_pred, disp_gt, valid, 3.0),
"EPE": epe(disp_pred, disp_gt, valid),
"RMSE": rmse(disp_pred, disp_gt, valid),
}
生产建议:直接用 servcttk 的官方脚本出报告数字(其文件命名约定要求预测图按对应样本命名),自写指标仅用于内部诊断;两者并行时先在 1 帧上对齐数值,再批量运行。
评测结果的落盘格式建议如下例所示——帧级明细 + 协议元数据一并保存,使任何人在数月后仍能精确还原这次评测的口径(示例中的指标数值仅为格式示意,非真实评测结果):
{
"dataset": "SERV-CT",
"dataset_doi": "10.5522/04/26352199.v1",
"downloaded": "2026-09",
"ref_source": "Ground_truth_CT",
"occlusion_protocol": "not_included",
"pretrained_on": "KITTI",
"model": "your-model-v1.2",
"per_frame": [
{"frame": "001", "exp": "Experiment_1", "Bad3": 4.2, "EPE": 1.1, "RMSE_px": 1.9},
{"frame": "002", "exp": "Experiment_1", "Bad3": 6.8, "EPE": 1.4, "RMSE_px": 2.4}
],
"summary_mean_pm_std": {"Bad3": "5.5 ± 1.8", "EPE": "1.3 ± 0.2"}
}
§6.10 MLOps 笔记
SERV-CT 体量小、更新静止,但正因如此,MLOps 的重点不在数据管道伸缩,而在协议固化与版本防漂移。建议按下表逐项落地:
| MLOps 事项 | 做法 | 理由 |
|---|---|---|
| 数据版本固化 | 配置中记录 DOI(10.5522/04/26352199.v1)、下载日期、参考源选择(CT/RGB) | 官方曾替换过数据版本且不主动通知(坑点 6) |
| 数据指纹 | 对固定帧存参考统计指纹,CI 启动时校验 | 防止本地副本被静默替换或损坏 |
| 评测协议入代码 | 掩码口径、预训练域、分辨率写入评测脚本与输出 JSON | 口径不声明则数字不可比(坑点 4/坑点 5) |
| 帧级明细落盘 | 每次评测输出 16 行帧级结果而非只存均值 | 小样本上帧级明细是排查异常的第一线索(坑点 8) |
| 上游跟踪 | Watch servcttk 获取变更公告 | 官方声明的唯一通知渠道 |
| 随机性控制 | 固定随机种子(裁剪/初始化)并写入结果 | 16 帧均值对随机性敏感(坑点 8) |
| 报告模板 | 统一"均值 ± 标准差 + 分层口径"的报告模板 | 与论文呈现方式一致,便于横向比较 |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 物理场景偏倚 | ex vivo 组织:无血液、烟雾、手术器械与组织动态形变,与真实手术场景差距大 | 高 | 仅用于算法验证;in vivo 适应性需 SCARED 或临床数据补充(论文限制) |
| 物种偏倚 | 全部样本为猪尸体组织,不能代表人体的组织光学特性 | 高 | 论文定位为方法验证;跨物种结论需额外验证 |
| 规模偏倚 | 仅 16 对静态帧,统计功效低,排名不稳定 | 高 | 报告均值 ± 标准差与分层结果(见 坑点 8) |
| 标注者偏倚 | 半手动对齐依赖操作者技能与立体感知 | 中 | 已量化:重复对齐 RMS 约 2 px / 2 mm;解读毫米级结果时计入该噪声底 |
| 设备偏倚 | 第一代 da Vinci 光学(720×576)与现代 4K/3D 内镜差异明显 | 中 | 在现代系统上的适配需重新标定与验证 |
| 组织类型覆盖偏倚 | 含镜面光滑表面与大深度变化,但无逐帧组织类型元数据 | 低-中 | 自行统计视差/深度分布;结合论文讨论理解失败模式 |
§7.2 标注质量
参考标注由几何渲染生成,在有效区域内密集、平滑且自洽;其绝对精度受半手动对齐限制:重复对齐给出 RMS 视差约 2 像素、深度约 2 mm(UCL Discovery)。论文将其称为"gold standard"时同时明确了该误差底(论文摘要)。对使用者而言:低于 2 mm / 2 px 量级的算法改进在该参考上不可分辨,评测结论应避免声称亚毫米级优势。
从标注质量评估的角度,SERV-CT 有三点值得肯定:一致性量化(以重复对齐实验给出可引用的噪声底,而非只做定性声明)、语义显式化(有效/无效区域以颜色编码完整标记,而非隐含在数值中)、工具随数据发布(SERV-CT-ALL.zip 附带对齐软件,标注过程可被审查与复现,B2FIND)。这三点使它比许多"只发图不发过程"的数据集更符合可复现性要求;代价是样本量小、且精度上限受人工操作约束。
§7.3 泛化性评估
| 目标场景 | 失效风险 | 证据 |
|---|---|---|
| 活体人手术场景(in vivo) | 高:无血流/烟雾/器械/动态组织 | 论文自述限制(UCL Discovery) |
| 现代高清内镜(4K/近红外) | 中-高:分辨率与光谱特性不同 | 设备规格差异(§3.9) |
| 通用立体算法直接迁移 | 高:通用预训练模型在 SERV-CT 上 Bad3 高达 88%-95%(RAFT/IGEV) | RRESM 对比表 |
| 合成/自然域预训练模型 | 高(但可通过域适应缓解):DispNetC(KITTI)Bad3 40%-48% | MDPI 综述 |
| 同为猪组织的 SCARED 训练模型 | 中:近域迁移,不能视为跨域泛化 | 两数据集样本组织与实验设计对比(论文 §5.1) |
§7.4 伦理与合规
- 研究对象:ex vivo 动物(猪)尸体组织,无人类受试者、无个人身份信息;
rai:personalSensitiveInformation声明为无(见页面 §C 结构化数据)。 - 许可:CC BY 4.0,允许商用、修改与再分发,条件是完整署名(B2FIND 元数据)。建议引用论文与数据集 DOI 双引用。
- 利益声明:论文披露作者与 Odin Vision Ltd、Digital Surgery 存在企业关联(PMC);资助方为 EPSRC、Wellcome/EPSRC WEISS 与英国皇家工程院(见 §3.10),与数据使用无附加限制。
- 再分发实践:CC BY 4.0 允许镜像,但为获得最新版本与官方支持,建议始终从 UCL 仓库 获取(见 坑点 6)。
§7.5 公平性
数据集不含人类受试者,传统的人口学公平性(性别/种族/年龄分布)不适用。与公平性相关的实际问题是设备与场景覆盖:全部样本来自单一机器人平台与单一分辨率,以此验收的算法在低成本内镜或不同厂商系统上的表现未知;建议在部署前补充目标平台的外部验证(见 §7.3)。
§7.6 数据漂移
SERV-CT 是静态验证集,自身无时间漂移问题;风险在于使用侧漂移:随着内镜设备从标清向 4K/3D 演进,在 SERV-CT 上调优的组件面对新设备时性能可能退化。官方数据自 2021-01-18 后无内容变更记录(changelog 无新条目),版本漂移风险主要来自非官方镜像。建议将 SERV-CT 定位为"协议锚点"而非"持续训练数据",并按 §5.5 引入更贴近目标平台的补充验证。
实践中还有一类容易被忽略的"环境漂移":依赖库的读取行为变化(如图像库对 16-bit PNG 的解码差异)会让同一份数据在不同环境中产生不同数值。这与数据本身无关,但同样会破坏可复现性,对应的工程对策是 坑点 1 与 坑点 6 中的版本指纹与回归测试。
§7.7 DAIMS 24 项检查表
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ⚠️ | 图像集合型数据,无表格宽表;文件树命名规范统一 |
| 2 | 唯一标识 | ✅ | 帧 001-016 全局唯一,实验/帧/模态三级定位明确 |
| 3 | 特殊字符 | ✅ | 文件名 ASCII,无空格与特殊字符 |
| 4 | 重复行 | ✅ | 16 对样本互异;Experiment_2 的双参考为同帧两套真值,语义清晰 |
| 5 | 缺失编码 | ✅ | 无效区以三色遮挡掩码显式编码,语义文档化 |
| 6 | 标签标识 | ⚠️ | 无语义/解剖标签,仅几何真值;参考源(CT/RGB)需使用者显式区分 |
| 7 | 罕见类分组 | ⚠️ | 无类别体系;镜面困难区域无显式标注,需自行分析 |
| 8 | 偏倚评估 | ✅ | 论文自述局限充分(ex vivo、静态、无工具、小样本) |
| 9 | 数据字典 | ✅ | servcttk README 完整描述格式、颜色语义与目录结构 |
| 10 | 信息性缺失解释 | ✅ | 黄/蓝/红三色含义官方明确(servcttk) |
| 11 | 设备记录 | ✅ | 内镜型号/视角、CT 设备、结构光型号均有记录 |
| 12 | 共线性 | ✅ | 不适用(非表格特征数据);几何参数间无冗余冲突 |
| 13 | 编码映射 | ✅ | ×256 缩放规则与 Q 矩阵用途文档化(需阅读文档,见 坑点 1/坑点 3) |
| 14 | 时间戳处理 | ⚠️ | 静态帧无时序;采集日期未公布,仅 changelog 与发表时间可考 |
| 15 | 划分建议 | ✅ | 官方定位为验证集,全 16 对测试为社区惯例 |
| 16 | 泄漏讨论 | ✅ | 论文系统展示预训练域影响;SCARED 近域风险需使用者自行声明 |
| 17 | 标签分布 | ⚠️ | 官方未提供视差/深度统计摘要;需自行统计(代码见 §6.3) |
| 18 | 测量偏倚 | ⚠️ | 半手动对齐引入操作者偏倚,已量化(RMS 2 px / 2 mm) |
| 19 | 外部验证建议 | ✅ | 广泛用作外部验证集;反向验证建议见 §5.5 |
| 20 | 版本记录 | ✅ | 官方 changelog + figshare DOI v1 版本化 |
| 21 | 预处理脚本 | ✅ | servcttk 提供官方读写与评测脚本(无训练脚本,与定位一致) |
| 22 | 合规要求 | ✅ | CC BY 4.0,署名即可用,无注册/协议门槛 |
| 23 | 多模态对齐 | ✅ | CT/内镜/结构光三模态对齐是数据集核心贡献,精度已量化 |
| 24 | 去标识化 | ✅ | 动物尸体数据,无个人敏感信息,无需去标识化管线 |
DAIMS 评分:19 ✅ + 5 ⚠️ = 21.5 / 24
评分解读:SERV-CT 在"小而精"的验证集类型中属于高质量样本:文件结构、设备记录、缺失编码、版本管理与合规文档均达到可复现研究的标准,多模态对齐精度有量化报告。扣分项集中于该数据类型的固有短板——无语义标签与分布摘要、采集元数据不全、标注存在操作者偏倚底噪,以及仅 16 帧带来的统计功效限制。这些短板多数是设计取舍而非疏漏,论文均如实披露。
对你意味着什么:
- 可以直接入库使用:下载即评测,无需谈判许可或清洗数据,工程团队一天内可完成接入(按 §6.1 → §6.4 路径)。
- 不要用于训练:16 对样本只够验证;任何训练需求请转向 SCARED 等数据集,再回到 SERV-CT 做独立验证。
- 把 2 px / 2 mm 当作测量底噪:评测报告中低于该量级的差异不构成证据;报告务必带均值 ± 标准差与分层口径。
- 在部署链路里把它当回归测试:16 帧的小体积天然适合 CI;配合 坑点 6 的版本指纹,防止数据静默变更。
- 警惕两个"泛化"陷阱:预训练域必须声明(坑点 5);SCARED → SERV-CT 是近域迁移,不是跨物种泛化。
§7.8 外部验证矩阵
以下为有同行评审支撑的、以 SERV-CT 为评测源的研究结果(数值口径各异,详见各行引用):
| 外部研究 | 来源机构 | 评估任务 | 性能指标 | 相对内部表现 | 关键发现 |
|---|---|---|---|---|---|
| HSM 评测(综述转引) | Journal of Imaging 综述 | 立体匹配 | Bad3 8.34% ± 8.31%(子集 1);5.46% ± 2.96%(子集 2);RMSE 3.18 ± 2.03 mm、2.12 ± 0.54 mm;20 FPS(V100) | 所评方法中最佳 | 预训练域选择对内镜场景影响巨大(MDPI) |
| DispNetC(KITTI 预训练) | 同上综述转引 | 立体匹配 | Bad3 40.09% ± 26.41%;RMSE 4.58 ± 0.76 mm(子集 1) | 显著劣于 HSM | 自然域预训练模型直接迁移到内镜场景大幅退化(MDPI) |
| StereoMAE | UCL/KCL 等(IET HTL 2024) | 立体深度估计(零样本,未微调) | Exp1 MAE 0.99 mm、EPE 1.06 px;Exp2 1.19 mm、1.68 px | 优于 LEAStereo/STTR/RAFT-Stereo | 掩码建模预训练改善跨域泛化,达亚毫米深度精度(StereoMAE) |
§8 基准性能与生态
§8.1 排行榜
SERV-CT 无官方排行榜;下表汇总文献中报告的代表性结果。⚠️ 数值不可直接互比:各行在参考源(CT/Creaform RGB)、子集(Experiment_1/2)、遮挡口径(含/不含)与预训练域上不一致,详见各行完整引用。
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | StereoMAE(未微调) | Exp1 MAE 0.99 mm、EPE 1.06 px;Exp2 1.19 mm、1.68 px | 2024 | 掩码图像建模预训练 + 监督立体深度 | Tukra, S. et al., 2024, IET Healthcare Technology Letters. doi:10.1049/htl2.12067 | 论文页提供 |
| 2 | HSM(level1,KITTI 预训练) | Creaform 参考:Mean Bad3 6.58 ± 4.82 px、视差 RMSE 2.25 ± 0.45 px(不含遮挡) | 2020(论文评测) | 分层级深度立体匹配 | Edwards, P. J. E. et al., 2022, Medical Image Analysis. doi:10.1016/j.media.2021.102302 | 各自官方仓库 |
| 3 | PSMNet(KITTI 预训练) | Creaform 参考:Mean Bad3 14.05 ± 8.03(不含遮挡) | 2020(论文评测) | 金字塔空间匹配网络 | 同上(Edwards et al., 2022) | 同上 |
| 4 | DeepPruner(KITTI 预训练) | Creaform 参考:Mean Bad3 15.31 ± 12.91(不含遮挡);SceneFlow 预训练同架构 87.06 | 2020(论文评测) | 可微剪枝代价体 | 同上(Edwards et al., 2022) | 同上 |
| 5 | DispNetC(KITTI 预训练) | Bad3 40.09% ± 26.41%(子集 1,综述转引) | 2024(综述转引) | 相关性体积 + 色散网络 | Palm, C. et al.(Journal of Imaging 综述), 2024. Journal of Imaging 10(5):120 | 各自官方仓库 |
预印本补充(RRESM,arXiv 2025,尚未经同行评审):在全 16 对上 Bad3 18.49%、MAE 2.367 px,并系统展示 RAFT(88.50%)、IGEV(94.76%)等通用新模型在 SERV-CT 上的严重退化(arXiv:2503.00731)。该结果进一步印证域差距,但引用时请注明预印本身份。
§8.2 SOTA 总结与选型建议
- 零样本/泛化路线:StereoMAE 显示"合成域掩码建模预训练 + 监督微调"在 SERV-CT 上可达亚毫米深度误差且不依赖目标域数据,是当前公开数字中表现最好的方法(StereoMAE)。
- 受监督基线路线:HSM 在论文评测中是精度最稳的传统强基线;PSMNet/DeepPruner 提供低成本对照。
- 反面教材价值:DispNetC、MADNet 及 SceneFlow 预训练系列的大幅退化,使其成为讲授"域差距"的标准案例。
- 选型建议:以 HSM 类结构做工程基线,以 StereoMAE 类方法对标泛化上限;任何新方法都应在固定口径(参考源、遮挡口径、预训练声明)后与上述数字比较。
- 时效提示:上表截至 2026-09 由本页汇编,均来自同行评审来源(或已标注预印本);SERV-CT 无官方榜单,新结果需自行在固定口径下复测后再比较。
§8.3 评测协议
- 输入为已矫正立体对,预测视差图需按对应样本命名输出;
- 参考视差/深度按 ×256 解码;视差为左→右方向;
- 评测掩码默认排除蓝(表面外)与红(右图不可见)区域,黄色(非重叠)按"含/不含遮挡"两种口径分别统计;
- 报告指标:Mean Bad3(± 标准差)、视差 RMSE(px)、3D RMSE(mm,经 Q 矩阵);
- 分子集(Experiment_1/2)与参考源(CT/RGB)分层呈现。
§8.4 相关数据集
| 数据集 | 关系 | 与 SERV-CT 的互补性 |
|---|---|---|
| SCARED | 最直接相关的内镜立体重建基准 | 规模大、含器械与关键帧时序,适合训练;但视差参考需自行构造、无遮挡掩码(论文 §5.1) |
| KITTI / Middlebury / ETH3D | 通用立体基准 | 提供大规模预训练域;与 SERV-CT 的性能落差量化域差距 |
| EndoAbS 等内镜重建数据集 | 同方向资源 | 社区综述将其与 SCARED 并列为内镜重建参考资源(以论文与综述引用为准) |
选择互补数据集时的一条实用准则是:以 SERV-CT 管口径,以 SCARED 管规模,以通用基准管预训练。三者覆盖了"标准化验证 → 大规模训练 → 域适应起点"的完整链条;任何单一数据集都无法同时胜任这三个角色,而混用三者时务必遵守 坑点 4 与 坑点 5 的口径与声明纪律。
§8.5 关键论文 Top 6
- Edwards, P. J. E., Psychogyios, D., Speidel, S., Maier-Hein, L., & Stoyanov, D. (2022). SERV-CT: A disparity dataset from cone-beam CT for validation of endoscopic 3D reconstruction. Medical Image Analysis, 76, 102302. doi:10.1016/j.media.2021.102302 — 数据集论文:采集、对齐管线与基线评测的完整描述。
- Allan, M. et al. (2021). SCARED 立体内镜数据集与挑战(Medical Image Analysis)— SERV-CT 直接对话的先行基准,规模更大、含器械场景(PMC 对比章节)。
- Tukra, S. et al. (2024). Generalizable stereo depth estimation with masked image modelling. IET Healthcare Technology Letters. doi:10.1049/htl2.12067 — 展示 SERV-CT 上最佳公开零样本深度精度。
- Palm, C. et al. (2024). Advances in Real-Time 3D Reconstruction for Medical Endoscopy. Journal of Imaging, 10(5), 120. 链接 — 系统综述,汇总 HSM/DispNetC 在 SERV-CT 上的实时性与精度。
- RRESM 作者团队(2025). Robust Real-Time Endoscopic Stereo Matching under Fuzzy Tissue Boundaries. arXiv:2503.00731(预印本)— 以 SERV-CT 为核心测试床量化通用立体模型的域差距。
- surgical-vision 团队(2021). servcttk: Evaluation toolkit for the SERV-CT Dataset. GitHub — 官方评测协议与读写工具的权威实现。
§8.6 社区活跃度
截至 2026-09:Spatial Semantic Scholar 收录引用 67+ 次(链接);官方评测仓库 servcttk 自 2021-02 后保持稳定(5 commits,最后活动 2021-02-02),无活跃 issue 流,数据集内容亦无后续修订——这与"完成态验证基准"的定位一致。社区讨论主要发生在使用该基准的论文与其各自仓库中,而非集中论坛。NLM 数据集目录与 EUDAT B2FIND 的收录提供了独立元数据入口。
§8.7 生态快照
| 资源 | 类型 | 链接 | 推荐理由 |
|---|---|---|---|
| servcttk | 官方评测工具包(Python) | GitHub | 官方指标实现与读写函数;changelog 是唯一版本通知渠道 |
| UCL Research Data Repository | 官方下载 | 仓库页 | DOI 化存档(v1),CC BY 4.0,含两版 ZIP |
| WEISS open data server | 项目主页 | UCL 页面 | 机构级入口,链接数据集与相关开放数据 |
| PMC 全文 | 论文开放获取全文 | PMC8961000 | 方法细节与 SCARED 对比论证的一手来源 |
| Awesome-Medical-Dataset 收录 | 社区索引 | openmedlab | 中文社区概览与文件结构速查 |
| NLM 数据集目录 | 权威元数据 | NLM | MeSH 主题词、资助号与许可的独立记录 |
§9 相关资源与引用
§9.1 官方资源
| 资源 | 说明 | 链接 |
|---|---|---|
| 论文预印本 | arXiv:2012.11779,2020-12-21 提交 | arXiv |
| 论文正式版 | Medical Image Analysis, 2022, 76:102302;PMID 34906918 | PubMed / PMC8961000 |
| 论文机构存档 | UCL Discovery(eprint 10141456),含正式版 PDF | UCL Discovery |
| 数据集下载 | UCL Research Data Repository,DOI 10.5522/04/26352199.v1 | UCL 仓库 |
| 项目主页 | WEISS open data server 的 SERV-CT 页面 | UCL WEISS |
| 评测工具包 | servcttk:含 anaconda 环境配置、评测脚本与读写函数说明 | GitHub |
| 独立元数据 | B2FIND 与 NLM 数据集目录的第三方记录 | B2FIND / NLM |
§9.2 BibTeX 引用
引用 SERV-CT 时建议同时给出论文与数据集 DOI。论文 BibTeX(与 Semantic Scholar 记录 一致):
@article{edwards2022servct,
title = {SERV-CT: A disparity dataset from cone-beam CT for validation of endoscopic 3D reconstruction},
author = {Edwards, P. J. Eddie and Psychogyios, Dimitris and Speidel, Stefanie and Maier-Hein, Lena and Stoyanov, Danail},
journal = {Medical Image Analysis},
volume = {76},
pages = {102302},
year = {2022},
issn = {1361-8415},
doi = {10.1016/j.media.2021.102302}
}
@dataset{servct_dataset_2024,
title = {SERV-CT: A disparity dataset from cone-beam CT for validation of endoscopic 3D reconstruction},
author = {Edwards, Eddie and Psychogyios, Dimitris and Maier-Hein, Lena and Speidel, Stefanie and Stoyanov, Danail},
year = {2024},
publisher = {University College London},
doi = {10.5522/04/26352199.v1},
url = {https://rdr.ucl.ac.uk/articles/dataset/_/26352199}
}
§9.3 引用指南
- 使用数据:请引用论文(Edwards et al., 2022)并在方法节注明数据集 DOI 与版本(v1)。
- 使用评测脚本:请在致谢或方法节注明 servcttk 仓库及其版本/提交日期(最后活动 2021-02-02)。
- 对比数字:注明参考源(CT/RGB)、子集与遮挡口径;跨 SCARED 比较时见 坑点 4。
- 元数据核验:许可与资助信息可交叉核对 B2FIND 与 NLM 记录。
§10 AI 使用声明卡
§10.1 本页面生产中使用的 AI 模型
| 环节 | 模型/工具 | 用途 |
|---|---|---|
| 资料检索 | 联网搜索工具(2026-09 运行) | 检索论文、数据仓库元数据、社区资源与基准数字 |
| 撰写与整理 | 大语言模型(2026-09 运行) | 按本站体例整理、扩写与结构化 |
| 事实核验 | 人工 + 源文档比对 | 全部关键数字回溯至下列输入来源 |
§10.2 AI 参与范围
AI 参与了资料汇总、初稿撰写、代码示例组织与排版校对。§2 医学背景的表述、§7 偏倚与伦理判断、§7.7 DAIMS 评分以及全部数字的最终取舍由编辑部人工复核。页面中的代码示例基于官方文档格式编写,经人工走查,但未在本地环境完整执行,使用者应自行验证(见 §0 技术免责声明)。
§10.3 输入来源列表
- Edwards, P. J. E. et al. (2022). SERV-CT: A disparity dataset from cone-beam CT for validation of endoscopic 3D reconstruction. Medical Image Analysis, 76, 102302. doi:10.1016/j.media.2021.102302
- Edwards, P. J. E. et al. (2020). SERV-CT: A disparity dataset from CT for validation of endoscopic 3D reconstruction. arXiv:2012.11779. https://arxiv.org/abs/2012.11779
- Edwards et al. 论文 PMC 全文(PMC8961000)。https://pmc.ncbi.nlm.nih.gov/articles/PMC8961000/
- PubMed 记录 PMID 34906918。https://pubmed.ncbi.nlm.nih.gov/34906918/
- UCL Discovery 存档(eprint 10141456,含论文正式版 PDF)。https://discovery.ucl.ac.uk/id/eprint/10141456
- UCL Research Data Repository 数据集页(DOI 10.5522/04/26352199.v1)。https://rdr.ucl.ac.uk/articles/dataset/SERV-CT_A_disparity_dataset_from_cone-beam_CT_for_validation_of_endoscopic_3D_reconstruction/26352199
- EUDAT B2FIND 元数据记录(许可、发布者、ORCID、文件列表)。https://b2find.eudat.eu/dataset/25e05c32-733f-5359-bef4-e1b7de16e149
- NLM 数据集目录记录(MeSH 主题词、资助号)。https://datasetcatalog.nlm.nih.gov/dataset?q=0001359842
- surgical-vision/servcttk 官方评测仓库(README:数据格式、目录结构、changelog)。https://github.com/surgical-vision/servcttk
- openmedlab/Awesome-Medical-Dataset 的 SERV-CT 收录页(作者机构与官方链接汇总)。https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/SERV-CT.md
- Palm, C. et al. (2024). Advances in Real-Time 3D Reconstruction for Medical Endoscopy. Journal of Imaging, 10(5), 120.https://www.mdpi.com/2313-433X/10/5/120
- Tukra, S. et al. (2024). Generalizable stereo depth estimation with masked image modelling. IET Healthcare Technology Letters(PMC11022219)。https://pmc.ncbi.nlm.nih.gov/articles/PMC11022219/
- RRESM(2025). Robust Real-Time Endoscopic Stereo Matching under Fuzzy Tissue Boundaries. arXiv:2503.00731(预印本)。https://arxiv.org/abs/2503.00731
- Semantic Scholar API 论文引用记录(查询于 2026-09-13)。https://api.semanticscholar.org/graph/v1/paper/DOI:10.1016/j.media.2021.102302
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与 §3 规格(全部数字) | 千方病案医学编辑部 | 逐项回溯 FACTS 清单与源链接 | ✅ 已通过/已验证 |
| §2 医学与技术背景表述 | 千方病案医学编辑部 | 与论文引言/摘要比对 | ✅ 已通过/已验证 |
| §4 数据结构与 §6 代码示例 | 千方病案医学编辑部(数据工程) | 与 servcttk README 逐字段比对 + 人工走查 | ✅ 已通过/已验证 |
| §6.5 坑点与 §7 质量评估 | 千方病案医学编辑部(数据工程) | 溯源论文 limitations 与评测表格 | ✅ 已通过/已验证 |
| §8 基准数字与引用 | 千方病案医学编辑部 | 与综述/原论文表格逐值核对 | ✅ 已通过/已验证 |
| §C 结构化数据与 frontmatter | 千方病案医学编辑部(数据工程) | 与 schema 模板逐字段核对 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
本页全部章节由 AI 辅助生成初稿,其中以下内容经人工重点复核并可能改写:§0 审核声明与免责文本(采用本站固定文本)、§7.4 伦理与合规判断、§7.7 DAIMS 评分及其解读、§8.1 排行榜数值口径说明、§10 声明卡。未标注的其余章节为 AI 整理的公开资料汇总,如发现出入请以输入来源列表(§10.3)为准。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期 一致)
页面状态:published(全部内容已完成审核并发布)
§C 结构化数据(JSON-LD)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- polypgen — 共享标签:医学影像 / 医学问答与基准 / 手术视频 / 评测基准
- fitzpatrick-17k — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- pitvis — 共享标签:医学影像 / 医学问答与基准 / 手术视频
- simcol3d — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- cephalometric-isbi — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- chexstruct-cxreasonbench — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- montgomery-tb — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- mrnet — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- monuseg — 共享标签:医学影像 / 医学问答与基准 / 评测基准
- miccai-surgt — 共享标签:医学影像 / 医学问答与基准 / 手术视频
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

