信息速览

EndoSLAM — 消化道内镜 SLAM 定位与建图数据集 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | EndoSLAM 消化道内镜SLAM |
| 英文全称 | EndoSLAM Dataset(配套 Endo-SfMLearner 基准) |
| 别名/简称 | EndoSLAM;Endo-SfMLearner 数据集;Endoscopic SLAM dataset |
| 疾病分类(ICD-11) | 不适用(离体猪器官与硅胶结肠 phantom,无人类疾病标签;关联临床情境见 §2.1) |
| SNOMED CT | 44441009(结肠镜检查,关联操作情境) |
| 数据模态 | 消化道内镜视频(胶囊/常规/临床结肠镜)+ 6 DoF 位姿真值 + 高精度 3D 点云/深度真值 + CT |
| AI 任务类型 | 视觉里程计/SLAM、单目深度估计、6-DoF 位姿估计、3D 重建、Sim2Real 域适应 |
| 样本总数 | 76,837 帧(离体 42,700 + 合成 21,887 + phantom 12,250),35 个子数据集 |
| 数据大小 | 约 9.9 GB(图像与位姿,OpenDataLab 镜像口径)+ 23.2 GB(3D 点云) |
| 数据格式 | PNG(帧)、CSV/TXT(位姿)、MAT(标定)、PLY/OBJ(点云) |
| 许可证 | 数据 CC BY 4.0;代码 MIT |
| 访问级别 | 开放(无需注册,直接下载) |
| DUO 标签 | NRES(无限制) |
| 语言 | 不适用(影像与数值数据) |
| 首发日期 | 2020-06-30(arXiv v1) |
| 最后更新 | 2021-06-09(Mendeley Data v1) |
| 发布机构 | Boğaziçi 大学、约翰霍普金斯大学、牛津大学、哈佛医学院、科英布拉大学、路易斯安那州立大学 |
| 官方主页 | CapsuleEndoscope/EndoSLAM |
| 下载地址 | Mendeley Data cd2rtzm23r |
| DOI | 论文 10.1016/j.media.2021.102058;数据 10.17632/cd2rtzm23r.1 |
| 引用次数 | 305+(Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方标定、1 kHz 位姿真值与基准代码齐全;扣分项:逐帧深度真值需从 3D 点云自行配准渲染、无官方 train/test 划分 |
| 页面状态 | published |
§0 E-E-A-T 审核与可信度声明
- 医学审核者:千方病案医学编辑部,交叉审核:§2 医学背景(消化系统疾病谱与内镜临床任务)、§7 偏倚分析。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。EndoSLAM 数据以 CC BY 4.0 发布,引用时须注明原始论文与数据 DOI;数据集本身不含人类受试者信息,但衍生成果的使用限制以数据集官方协议为准。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? EndoSLAM 是一个专为"内镜视频里的定位与建图(SLAM)“打造的数据集。研究团队把猪的离体胃肠器官缝在特制支架上,用机械臂带着胶囊内镜和常规内镜探头按预设路径移动,同时用 1 kHz 频率记录相机每时每刻的精确位置;再用两台高精度 3D 扫描仪把器官的完整形状数字化,形成"标准答案”。数据集共 35 个子数据集、76,837 帧,另含硅胶结肠 phantom 的临床结肠镜序列与 Unity 合成数据(论文)。
为什么重要? 在内镜下实现"相机在哪、器官长什么样"的实时估计,是导航式活检、息肉漏检预警和胶囊机器人自主导航的核心能力。但此前内镜领域缺少带真值位姿与真值 3D 地图的量化评测基准,算法好坏只能靠肉眼对比。EndoSLAM 是首个为胶囊内镜 SLAM 提供时标 6 DoF 位姿与高精度 3D 地图真值的公开数据集(GitHub),让内镜 SLAM 首次进入了可量化、可复现的评测时代。
我能用它做什么? 训练与评测视觉里程计、单目深度估计、6-DoF 位姿估计与稠密 3D 重建模型;研究合成数据到真实内镜影像的域适应;复现并对比 Endo-SfMLearner、SC-SfMLearner、Monodepth2 等基准。注意它源自离体猪组织与 phantom,不能直接证明算法在人体内的临床性能。
§1.1 摘要
EndoSLAM 由土耳其 Boğaziçi 大学牵头,联合约翰霍普金斯大学、牛津大学、哈佛医学院(Brigham and Women’s Hospital)、科英布拉大学与路易斯安那州立大学完成,发表于 Medical Image Analysis(2021 年 6 月,第 71 卷,102058;DOI)。数据集三部分组成:其一,离体部分——8 个来自不同个体的离体猪 GI 器官(结肠、胃、小肠)上的胶囊与常规内镜记录,共 42,700 帧、35 个子数据集(18 结肠、12 胃、5 小肠),其中 4 个子数据集含由专家胃肠病学家制作的息肉样隆起;其二,phantom 部分——临床在用结肠镜对全表示硅胶结肠 phantom 的 12,250 帧记录,以 CT 扫描作几何真值;其三,合成部分——Unity 环境渲染的 21,887 帧胶囊内镜帧,逐帧带深度与位姿标注。采集链路以 Franka Emika Panda 机械臂(0.1 mm 重复定位精度、1 kHz 位姿记录)为核心,配合 Artec 3D Eva 与 Shining 3D EinScan Pro 2x 两台 3D 扫描仪(6 个器官点云共 23.2 GB)。配套提出的 Endo-SfMLearner 以空间注意力与亮度感知光度损失应对内镜影像的无纹理、高光与光照快变问题,在合成数据深度估计上取得 RMSE 0.2966 的基准成绩(GitHub README)。
§1.2 战略价值
维度一:填补内镜 SLAM 量化评测真空。 2020 年以前,内镜视觉里程计研究多依赖体内手术视频或自采离体数据,既无统一真值也无统一协议,方法间不可比。EndoSLAM 用机械臂运动学给出 1 kHz、0.1 mm 级位姿真值,用 3D 扫描给出亚毫米级几何真值,第一次让"深度 RMSE"“轨迹误差”"重建 RMSE"这些标准指标在内镜领域有了共同标尺。此后大量位姿与深度估计工作(如 IJCARS 2023 的内镜位姿估计研究、ECCV 2024 的近场光照深度估计)都以该数据集作为评测台之一(Semantic Scholar 引文图谱)。
维度二:胶囊内镜 SLAM 的"从 0 到 1"。 胶囊内镜体积小、帧率低(MiroCam 仅 3 fps)、无外部跟踪手段,传统 SLAM 方法几乎无法直接套用。EndoSLAM 首次为胶囊内镜提供时标 6 DoF 位姿真值(GitHub),并同机采集了胶囊与常规内镜影像,使研究者可以在同一器官、同一路径上分析相机特性(分辨率、帧率、视场角)对定位算法的影响——这是设计下一代磁控胶囊机器人感知算法不可替代的数据资产。
维度三:Sim2Real 传输研究的成对测试床。 数据集同时提供 Unity 合成帧(21,887 帧,逐帧深度+位姿)与同器官真实帧,天然构成"仿真-真实"成对数据,可直接训练与验证域适应算法,降低真实内镜数据采集与标注的高昂成本(论文)。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态与真值 | 标注方式 | 与 EndoSLAM 的差异 |
|---|---|---|---|---|
| EndoSLAM | 35 个子数据集,76,837 帧 | 胶囊+常规内镜视频,1 kHz 6 DoF 位姿,3D 扫描点云 23.2 GB,CT | 机械臂运动学真值+3D 扫描 | 唯一覆盖胶囊内镜 SLAM 真值;离体+phantom+合成三源 |
| SCARED | 7 个训练 + 2 个测试子集(猪实验) | da Vinci Xi 立体内镜视频,机器人运动学位姿 | 机器人运动学+立体匹配 | 体内手术场景、立体相机;无胶囊模态 |
| Hamlyn Centre 腹腔镜数据 | 多段临床手术序列 | 人体腹腔镜视频 | 以合成/弱真值为主 | 人体体内数据但真值精度远低于机械臂方案 |
| SimCol | 合成结肠序列 | 虚拟结肠镜渲染 | 仿真引擎逐帧真值 | 纯合成、聚焦位姿估计;无真实影像 |
| C3VD | 多例虚拟结肠镜 | 光度逼真渲染视频 | 仿真引擎逐帧真值 | 面向息肉检出/分割挑战;非真实光学采集 |
| VR-Caps | 多器官虚拟胶囊环境 | Unity 合成胶囊影像 | 仿真引擎逐帧真值 | EndoSLAM 姊妹环境,可与 EndoSLAM 合成部分互补 |
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2020-06-30 | arXiv v1(2006.16670) | 以 “Quantitative Evaluation of Endoscopic SLAM Methods: EndoSLAM Dataset” 首次公开(Scilit 版本记录) |
| 2020-10 | arXiv v3 | 增补 phantom 结肠镜序列与 CT 真值等内容 |
| 2021-04-15 | MedIA 在线发表 | Medical Image Analysis 第 71 卷 102058(DOI) |
| 2021-06-09 | Mendeley Data v1 | 完整数据集以 CC BY 4.0 固化发布,DOI 10.17632/cd2rtzm23r.1(Mendeley) |
| 2021-06-10 | GitHub README 最后更新 | 增加 OlympusCam phantom 序列规格表(DeepMIALab 镜像) |
§1.5 典型应用场景
- 内镜 SLAM 与视觉里程计评测:以 1 kHz 位姿真值计算 ATE/RPE,横向对比几何法与学习方法。
- 自监督单目深度估计:利用合成集逐帧深度真值做监督校准,在真实离体序列上验证泛化。
- 胶囊内镜导航仿真:以低帧率胶囊序列研究磁控胶囊机器人的感知与定位算法。
- 息肉对定位算法的影响分析:利用同一轨迹的有/无息肉双版本,量化可辨病变特征对跟踪稳定性的贡献。
- Sim2Real 域适应:以 Unity 合成帧为源域、离体真实帧为目标域,训练与评测域适应流水线。
§1.6 常见问题 FAQ
Q1:数据集里有真人内镜影像吗?
没有。全部真实影像来自清洗后的离体猪胃肠器官与硅胶结肠 phantom,合成部分由 Unity 渲染,不含任何人类受试者数据(论文)。
Q2:为什么内镜 SLAM 数据集要用机械臂采集?
手持操作无法提供可信的位置真值。机械臂在 hand-guided 模式下既保留"人手引导"的运动自然性,又以 1 kHz 记录 0.1 mm 重复精度的末端位姿,把真值误差压到远低于被测算法的量级,评测才有意义。
Q3:35 个子数据集是怎么数的?
35 个为离体部分按"器官×轨迹×相机会话"组织的子数据集:结肠 18、胃 12、小肠 5(GitHub README);phantom 序列与合成数据单列,不计入 35。
Q4:可以直接用于训练临床诊断模型吗?
不可以。数据为离体猪组织、phantom 与合成渲染,组织外观、蠕动与血液分布与人体在体环境不同;任何"临床性能"结论都需要在体内数据上独立验证(见 §7.3 泛化性评估)。
Q5:深度真值是每帧都有的吗?
不是。逐帧深度真值仅合成集提供;真实序列需要用 6 个器官的高精度点云(23.2 GB)配准后自行渲染(渲染方法见 §6.3),phantom 序列以 CT 扫描为几何真值。
Q6:下载要注册或申请吗?
不需要。Mendeley Data 以 CC BY 4.0 开放托管(DOI 10.17632/cd2rtzm23r.1),直接下载;代码在 GitHub 以 MIT 许可开放。
§2 医学背景
§2.1 关联临床情境与 ICD-11 映射
EndoSLAM 本身不含人类疾病标签(离体猪器官与 phantom),下表按其支持的临床任务情境做编码映射,供检索与知识图谱挂载使用。
| 情境/标签 | ICD-11(章/块级锚点) | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 数据集本身 | 无人类诊断标签,不适用 | 不适用 | 离体动物组织+phantom 数据集 |
| 消化系统疾病总情境 | ICD-11 第 13 章 消化系统疾病 | —(章级,不落具体码) | Diseases of the digestive system |
| 消化道恶性肿瘤防治情境 | ICD-11 第 2 章 恶性肿瘤块 | —(章级,不落具体码) | Malignant neoplasms, digestive organs |
| 内镜检查操作 | —(操作章级) | 44441009 | Colonoscopy(结肠镜检查) |
| 息肉样病变检出情境 | —(本数据集不落码) | —(不落具体码) | Polyp-mimicking elevations(息肉样隆起) |
§2.1b SNOMED CT 操作与结构映射
| 标签/概念 | SNOMED CT | 术语 | 在数据集中的体现 |
|---|---|---|---|
| 结肠镜检查 | 44441009 | Colonoscopy | phantom 结肠镜序列(OlympusCam,12,250 帧) |
| 胃肠道结构 | —(本表不落具体码) | Gastrointestinal tract structure | 8 个离体猪 GI 器官(结肠/胃/小肠) |
| 胶囊内镜检查 | —(本表不落具体码) | Capsule endoscopy | MiroCam 与 PillCam 双胶囊记录 |
| 息肉(形态学概念) | —(本表不落具体码) | Polyp morphology | 4 个子数据集的息肉样隆起 |
说明:为避免向用户传播未经核实的具体 SNOMED 码,本表仅对高置信度的 44441009(Colonoscopy)落码,其余以概念名呈现,使用者应自行在 SNOMED CT 浏览器中核对后再挂码。
§2.2 消化道内镜诊疗与流行病学背景
消化道(胃肠)恶性肿瘤是全球疾病负担最重的癌种类别之一:EndoSLAM 论文引言指出,每年影响超过 2,800 万患者,约占全球癌症发病的 26% 与癌症相关死亡的 35%(论文原文)。结直肠癌、胃癌等常见消化道肿瘤的预后高度依赖早发现、早切除,而内镜检查与息肉切除是实现早诊早治的核心手段。临床痛点在于:常规结肠镜检查存在腺瘤漏检,且检查质量依赖操作者经验;胶囊内镜则受限于无法主动导航、定位信息缺失,病变位置难以回溯。若能在内镜过程中实时重建消化道 3D 地图并定位镜头,即可支撑"检查盲区提示"“病变空间标注”"复检导航"等增强功能——这正是 SLAM 技术进入消化内镜的临床动机。
§2.3 临床任务定义
| 任务 | 定义 | EndoSLAM 支持方式 |
|---|---|---|
| 视觉里程计(VO) | 从连续帧估计相机逐帧相对运动 | 位姿真值逐帧可得,支持 ATE/RPE 评测 |
| SLAM 定位与建图 | 同时估计轨迹与环境的稠密/半稠密地图 | 6 个器官 3D 扫描点云作地图真值 |
| 单目深度估计 | 从单帧/短序列恢复像素级深度 | 合成集逐帧深度真值;真实集可从点云渲染 |
| 6-DoF 位姿估计 | 预测相机在器官坐标系中的全局位姿 | 位姿真值以四元数+平移给出(米制单位) |
| 息肉相关感知辅助 | 检测/分割息肉样隆起并空间定位 | 4 个子数据集含息肉样隆起,可做检测定位研究 |
§2.4 数据来源"人群"说明
EndoSLAM 不涉及人类受试者。其"数据来源"如下表:
| 维度 | 内容 |
|---|---|
| 数据载体 | 8 个离体猪 GI 器官(来自不同动物个体)+ 1 个硅胶全表示结肠 phantom + Unity 仿真环境 |
| 采集地点 | 土耳其伊斯坦布尔 Boğaziçi 大学实验室 |
| 采集时间 | 论文与 arXiv 时间轴推断为 2019-2021 年间(论文 2020-06 首发) |
| 器官处理 | 猪器官经清洗后由从业者缝合固定于 L/Z/O 形高密度泡沫支架 |
| 介入专家 | 4 个子数据集的息肉样隆起由专家胃肠病学家制作 |
§2.5 临床价值
对临床而言,EndoSLAM 支撑的定位与建图能力有望转化为三类价值:其一,检查质量保障——实时轨迹覆盖图可提示未观察的盲区,降低腺瘤漏检;其二,病变空间锚定——将息肉检出结果映射到器官 3D 地图,为随访、复检与内镜下治疗提供空间坐标;其三,胶囊机器人自主导航——为下一代磁控/自驱动胶囊提供感知闭环,使主动活检与靶向给药成为可能(论文)。需要强调:这些价值均以离体/phantom 数据为间接证据,进入临床前必须在体内环境中独立验证。
§2.6 金标准表
| 划分 | 标注方式 | 标注者 | 性质 |
|---|---|---|---|
| 相机位姿真值 | Franka Emika Panda 机械臂运动学记录(1 kHz,0.1 mm 重复精度) | 采集系统自动生成 | 设备级客观真值 |
| 器官几何真值 | Artec 3D Eva / Shining 3D EinScan Pro 2x 高精度扫描后配准 | 采集系统+离线配准 | 设备级客观真值(亚毫米级) |
| phantom 深度真值 | CT 扫描硅胶结肠 phantom | 放射成像设备 | 影像级客观真值 |
| 合成深度/位姿真值 | Unity 渲染管线逐帧输出 | 仿真引擎自动生成 | 仿真级真值(无采集噪声) |
| 息肉样隆起 | 专家胃肠病学家手工制作 | 专家胃肠病学家 | 专家介入标注 |
§2.7 内镜 SLAM 技术脉络与数据集定位
理解 EndoSLAM 的价值,需要把它放回内镜视觉定位技术的发展脉络中:
| 阶段 | 代表技术 | 在内镜场景的困境 |
|---|---|---|
| 传统 SfM/SfS | 特征匹配+运动恢复结构、从明暗恢复形状 | 内镜表面无纹理、高光非朗伯,特征匹配大面积失效;SfS 需要强光照模型假设 |
| 模型法 SLAM | ORB-SLAM 等特征点法 VO/SLAM | 相机 FOV 小、运动模糊与光照快变导致跟踪丢失;缺乏真值无法定量调参 |
| 自监督深度+位姿学习 | SfMLearner(2017)、SC-SfMLearner(2019)、Monodepth2(2019) | 光度一致性假设被低帧率、高光与散焦破坏;通用模型在内镜数据上显著劣化 |
| 内镜专用学习 | Endo-SfMLearner(2021,随本数据集发布) | 空间注意力聚焦可分辨纹理、亮度感知光度损失适应光照变化——其有效性正是靠本数据集首次被定量证明 |
EndoSLAM 在这条脉络中的角色是"标尺":它不与上述方法竞争,而是让所有方法在同一套位姿与几何真值上可比。论文基准(§8.1)显示,通用自监督方法(SfMLearner、Monodepth2)与内镜专用方法(Endo-SfMLearner)在合成数据上的深度 RMSE 差距清晰可测,这正是此前内镜领域缺失的量化证据(论文)。
§2.8 与后续临床转化路径的关系
从数据集到临床落地,业界普遍认可"离体→phantom→在体"三段验证路径:离体器官提供可控的真值环境,phantom 提供临床级设备与标准化场景,在体数据提供最终有效性证据。EndoSLAM 同时覆盖前两段并附带合成环境,恰好构成该路径的"前两站":研究者可先在离体+phantom 上证明算法几何精度,再借助 Sim2Real 与外部在体数据(如 SCARED 手术场景)评估迁移,最后才进入临床验证。明确这一位置,有助于避免对数据集证据等级的过度解读(见 §7.3)。
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 完整复现论文基准(含 3D 重建) | Mendeley Data v1 全量包 | 约 9.9 GB(图像位姿)+ 23.2 GB(点云) | 唯一含 6 器官高精度点云与标定文件的官方渠道 |
| 快速上手深度/位姿估计 | OpenDataLab 镜像 | 约 9.9 GB | 已打包图像与位姿,免去大体积点云下载 |
| 仅需基准代码与预训练模型 | GitHub 仓库 | 数百 MB 级 | EndoSfMLearner 代码、requirements 与预训练权重 |
| 需要 Sim2Real 研究环境 | Mendeley 全量包 + VR-Caps 仓库 | — | 合成帧来自 Unity 环境,VR-Caps 提供可交互扩展 |
§3.1 模态详情
| 模态 | 内容 | 真值形式 |
|---|---|---|
| 常规内镜视频 | HighCam(1280×720@20fps)与 LowCam(640×480@20fps)离体序列 | 6 DoF 位姿(CSV/TXT) |
| 胶囊内镜视频 | MiroCam MC1000-W(320×320@3fps)与 PillCam COLON2(双摄 256×256,4-35 fps 变帧率) | 6 DoF 位姿(CSV/TXT) |
| 临床结肠镜视频 | OlympusCam(1350×1080@30fps)phantom 结肠序列 | CT 扫描几何真值 |
| 3D 点云 | 6 个器官高精度表面扫描(2 结肠+1 小肠+3 胃) | 23.2 GB 点云/网格 |
| 合成影像 | UnityCam 320×320@30fps,21,887 帧 | 逐帧深度+6 DoF 位姿 |
§3.2 子集构成表
| 子集 | 数量 | 帧数 | 相机 |
|---|---|---|---|
| 离体-结肠 | 18 个子数据集 | 合计入离体 42,700 帧 | HighCam/LowCam/PillCam/MiroCam |
| 离体-胃 | 12 个子数据集 | 合计入离体 42,700 帧 | HighCam/LowCam/PillCam/MiroCam |
| 离体-小肠 | 5 个子数据集 | 合计入离体 42,700 帧 | HighCam/LowCam/PillCam/MiroCam |
| phantom 结肠 | 1 条完整序列 | 12,250 帧 | OlympusCam |
| 合成(胃/结肠/小肠) | 3 类器官 | 21,887 帧 | UnityCam |
| 其中含息肉样隆起 | 4 个子数据集 | — | 由专家胃肠病学家制作 |
§3.3 格式表
| 数据 | 格式 | 说明 |
|---|---|---|
| 内镜帧 | PNG | 76,837 帧,按轨迹目录组织 |
| 位姿 | CSV / TXT | 四元数 (x,y,z,w) + 绝对位置 (x,y,z),单位米 |
| 相机标定 | MAT | 内参/外参标定数据与标定会话记录 |
| 3D 模型 | 点云/网格(PLY 等工程格式) | 6 个器官,可在 ITK-SNAP/MATLAB 中可视化 |
| 合成数据 | PNG + 标注 | 逐帧深度图与位姿 |
§3.4 存储大小
| 部分 | 大小 | 依据 |
|---|---|---|
| 图像+位姿(OpenDataLab 镜像口径) | 约 9.9 GB | OpenDataLab 页面 |
| 3D_Scanners 点云 | 23.2 GB | 论文附录 |
| 合计(含 phantom 序列) | 约 33 GB 量级 | 以上两项相加,实际以官方包为准 |
§3.5 标注方式
EndoSLAM 的"标注"几乎全部由采集设备自动生成,这是其相对临床数据集的最大工程优势:位姿真值来自机械臂编码器(1 kHz),器官几何真值来自 3D 扫描仪(亚毫米精度),phantom 深度真值来自 CT,合成真值来自渲染管线。唯一的人工环节是专家胃肠病学家在 4 个子数据集中制作息肉样隆起。因此标注一致性不需要多人投票协议,误差主要来自设备精度与离线配准环节。
§3.6 标注者资质与一致性
| 环节 | 执行者 | 资质 | 一致性说明 |
|---|---|---|---|
| 位姿记录 | Franka Emika Panda 机械臂 | 工业级 7 自由度机械臂,0.1 mm 重复精度 | 设备决定,无人工变异 |
| 器官几何 | 两台商用 3D 扫描仪 | Artec Eva ±0.1 mm 点精度;EinScan Pro 2x ±0.05 mm 点精度 | 设备决定 |
| 息肉样隆起 | 专家胃肠病学家 | 临床专家 | 单专家制作,无多人一致性数据 |
§3.7 采集周期
论文首发于 2020 年 6 月(arXiv v1),实验拍摄、扫描与标定工作在此前完成;phantom 序列与 CT 真值在 arXiv v3(2020-10)前补充完成;Mendeley Data 正式数据包于 2021-06-09 固化为 v1。整体采集周期可概括为 2020 年前后(Scilit 版本记录)。
§3.8 地域覆盖
单一地域:土耳其伊斯坦布尔(Boğaziçi 大学生物医学工程研究所实验室)。数据不含人口学属性,无地域流行病学代表性可言;其"覆盖"体现在器官类型(结肠/胃/小肠)与相机类型(4 类真实相机+1 类合成相机)两个维度。
§3.9 设备规格
| 设备 | 关键规格 | 角色 |
|---|---|---|
| Franka Emika Panda | 7 自由度,0.1 mm 位姿重复精度,1 kHz 位姿记录,hand-guided 模式 | 载机+位姿真值源 |
| MiroCam Regular MC1000-W | 320×320,3 fps,170° FOV,6 白光 LED,有线视频传输 | 胶囊内镜(有线) |
| PillCam COLON2 | 双摄像头各 256×256,4-35 fps 变帧率,总 FOV 344°(各 172°),每摄 4 LED,无线传输 | 胶囊内镜(无线) |
| HighCam(YPC-HD720P) | 1280×720,20 fps,120° FOV,4-6 cm 景深,6 可调 LED | 高分辨率常规内镜 |
| LowCam(3 合 1 内镜相机) | 640×480,20 fps,130° FOV,3-8 cm 景深,6 可调 LED | 低分辨率常规内镜 |
| OlympusCam(临床结肠镜) | 1350×1080,30 fps | phantom 序列采集 |
| Artec 3D Eva | ±0.5 mm 3D 分辨率,±0.1 mm 点精度,100 cm 距离 3D 精度 ±0.03% | 器官几何扫描 |
| Shining 3D EinScan Pro 2x | 0.2-2 mm 点距,±0.5 mm 3D 分辨率,±0.05 mm 点精度 | 器官几何扫描 |
| CT 扫描仪 | 临床级 | phantom 几何真值 |
§3.10 深度溯源链
机械臂在 hand-guided 模式下牵引相机沿 L/Z/O 形支架路径移动 → 1 kHz 记录末端位姿并时间戳同步至视频帧 → 帧序列与位姿写入 Frames/Poses 目录 → 两台 3D 扫描仪离线扫描器官 → 点云配准到统一坐标系形成 3D 地图真值 → 硅胶 phantom 由临床结肠镜拍摄并以 CT 扫描提供几何真值 → Unity 渲染管线输出合成帧与逐帧深度/位姿。所有环节在论文第 2 章与附录 E/F 有完整记录(ar5iv 全文)。
§3.11 位姿文件格式详解
位姿文件为 CSV/TXT 文本,每行对应一帧,共 7 个数值:平移 (tx, ty, tz) + 四元数 (qx, qy, qz, qw),单位为米,四元数顺序为 (x, y, z, w)(论文附录)。行布局示意(具体列名与分隔符以官方包实际文件为准):
# tx ty tz qx qy qz qw
0.4123 -0.1330 0.0780 0.7071 0.0000 0.0000 0.7071
0.4125 -0.1327 0.0782 0.7070 0.0004 0.0002 0.7072
...
读取要点:
- 单位与坐标系:平移为米制,位于机械臂基座坐标系;换算到相机系需乘以外参
T_base_cam(Calibration 目录 .mat 提供)。 - 四元数顺序是最大错源:多数工具(evo、TUM 格式)默认 (w, x, y, z),本数据集为 (x, y, z, w),见 §6.5 坑点 3 的转换代码。
- 模长校验:合法位姿四元数模长恒为 1,加载后先做
np.linalg.norm(q, axis=1)断言,可立即发现列序错位。 - 频率差异:位姿以 1 kHz 记录而帧率为 3-30 fps,发布包中的位姿文件已按帧对齐;自行从原始记录重建对齐时须做时间戳插值(见坑点 4)。
§3.12 支架形态与轨迹设计
离体器官缝合固定于 30×30×17 cm 高密度泡沫支架,支架顶面按器官类型塑造不同形态,轨迹沿支架轮廓的 L/Z/O 形路径重复行进(论文):
| 支架形态 | 对应器官 | 轨迹特征 | 对算法的含义 |
|---|---|---|---|
| L 形 | 结肠 | 一次 90° 折弯,模拟结肠弯曲 | 折弯段视野突变,考验旋转估计 |
| Z 形半圆柱 | 小肠 | 两个反向折弯,管径细 | 狭窄管腔+双折弯,累计漂移最易暴露 |
| O 形半球 | 胃 | 环绕大曲面 | 大面积弱纹理曲面,考验特征点存活率 |
这一设计的双重效果:正面看,重复路径使不同相机、不同息肉状态的记录可逐段对齐比较,是"同轨迹双版本"实验的基础;反面看,运动分布远窄于真实内镜操作(进镜/旋镜/吸引/注气),模型学到的是"沿支架滑行"的运动先验,见 §7.1 运动分布偏倚。
§3.13 相机选择指南
六个相机来源覆盖不同研究目的,选择建议:
| 你的研究目标 | 推荐子集 | 理由 |
|---|---|---|
| 通用深度/位姿基准(对标论文) | HighCam + LowCam | 帧数最多(合计约 3.9 万帧)、20 fps 光流连续,与论文协议一致 |
| 胶囊内镜算法研发 | MiroCam + PillCam | 唯一带位姿真值的胶囊数据;MiroCam 帧数占胶囊主体(3,055 帧) |
| Sim2Real 域适应 | UnityCam(源域)+ HighCam(目标域) | 合成帧带逐帧深度,真实帧带位姿,成对器官可比 |
| 临床设备接近场景 | OlympusCam phantom 序列 | 唯一临床级结肠镜记录,分辨率最高(1350×1080) |
| 跨相机鲁棒性研究 | 同一轨迹的多相机版本 | 同器官同路径仅相机不同,控制变量最干净 |
| 胶囊双目/多视角研究 | PillCam COLON2 | 双摄像头各 256×256,总 FOV 344°,注意仅 239 帧 |
注意:胶囊子集(尤其 PillCam)帧数少、帧率低,任何在其上的训练结果都应按 §7.7 DAIMS 第 7 项的建议仅作泛化测试解读。
§4 数据结构
§4.0 目录树
依据论文附录的总体数据树结构(Fig. E.1)与 GitHub 仓库组织,解压后的典型布局如下(不同器官/子数据集的层级命名可能略有差异,以官方包为准):
EndoSLAM/
├── Ex_vivo/ # 离体部分(35 个子数据集)
│ ├── Colon/ # 18 个结肠子数据集
│ │ ├── Colon_1_HighCam/ # 按器官+相机组织的子数据集
│ │ │ ├── Frames/ # 内镜帧(PNG,逐帧编号)
│ │ │ └── Poses/ # 位姿真值(CSV/TXT)
│ │ ├── Colon_1_LowCam/
│ │ ├── Colon_1_PillCam/ # 含/无息肉双版本轨迹可能并存
│ │ └── Colon_1_MiroCam/
│ ├── Stomach/ # 12 个胃子数据集(同上层级)
│ └── SmallIntestine/ # 5 个小肠子数据集(同上层级)
├── Phantom/ # phantom 结肠序列
│ ├── Frames/ # OlympusCam 12,250 帧
│ └── CT/ # CT 扫描几何真值
├── 3D_Scanners/ # 6 个器官高精度点云(23.2 GB)
│ ├── Colon_x.ply
│ ├── Stomach_x.ply
│ └── SmallIntestine_x.ply
├── Calibration/ # 各相机内参/外参标定(.mat)
└── Synthetic/ # Unity 合成部分
├── Frames/ # UnityCam 21,887 帧
├── Depth/ # 逐帧深度真值
└── Poses/ # 逐帧位姿真值
§4.1 DAIMS 数据字典
核心字段字典(位姿文件与目录元数据):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| frame_id | string | 帧文件名(编号) | 000123.png | 序列对齐 | 无 | 无 | 按轨迹递增 |
| tx, ty, tz | float | 平移 (x,y,z),单位米 | 0.412, -0.133, 0.078 | 轨迹真值/ATE | 机械臂 0.1 mm 级 | 无 | 支架尺度内 |
| qx, qy, qz, qw | float | 姿态四元数 (x,y,z,w) | 0.707, 0.0, 0.0, 0.707 | 旋转真值/RPE | 0.1 mm 级重复精度 | 无 | 单位四元数 |
| organ | string | 器官类别 | colon/stomach/small_intestine | 分组实验 | 无 | 无 | 3 类 |
| camera | string | 相机来源 | HighCam/LowCam/PillCam/MiroCam/UnityCam/OlympusCam | 跨相机实验 | 无 | 无 | 6 类 |
| polyp_flag | string | 轨迹是否含息肉样隆起 | with_polyps / without_polyps | 消融分析 | 无 | 无 | 2 类 |
| depth_png | image | 合成集逐帧深度真值 | 00123_depth.png | 深度监督 | 仿真零噪声 | 真实序列不提供 | 相机视锥内 |
| calibration_mat | file | 相机内参/外参标定 | HighCam_calib.mat | 去畸变/投影 | 标定残差 | 无 | 每相机一份 |
| pointcloud_ply | file | 器官 3D 点云 | Stomach_1.ply | 3D 重建真值 | ±0.05-0.1 mm 点精度 | 仅 6 个器官 | 23.2 GB 合计 |
| ct_scan | file | phantom CT 几何真值 | phantom_ct.nii | phantom 深度渲染 | CT 成像分辨率 | 仅 phantom | 一份 |
§4.2 标签分布
EndoSLAM 的"标签"是几何真值而非语义标签,分布维度如下:
| 维度 | 取值 | 分布 |
|---|---|---|
| 器官 | 结肠/胃/小肠(离体);三类器官(合成) | 子数据集 18/12/5;合成帧覆盖三类 |
| 相机 | HighCam 21,428 帧;LowCam 17,978 帧;MiroCam 3,055 帧;PillCam 239 帧;UnityCam 21,887 帧;OlympusCam 12,250 帧 | GitHub README 规格表 |
| 息肉状态 | 4 个子数据集含息肉样隆起,其余不含;部分轨迹提供有/无双版本 | 论文 |
§4.3 关键统计
| 统计项 | 数值 |
|---|---|
| 子数据集总数 | 35(离体)+ phantom 序列 + 合成三器官 |
| 总帧数 | 76,837(42,700 + 21,887 + 12,250) |
| 含 3D 点云真值的器官 | 6 个(2 结肠、3 胃、1 小肠) |
| 点云总体积 | 23.2 GB |
| 位姿记录频率 | 1 kHz(机械臂) |
| 息肉样隆起子数据集 | 4 个 |
§4.4 数据层级
数据集
└── 部分(ex_vivo / phantom / synthetic)
└── 器官(organ:colon/stomach/small_intestine)
└── 子数据集/轨迹(trajectory:器官×相机×息肉状态)
└── 相机会话(camera session:HighCam 等)
└── 帧(frame:PNG + 位姿行)
EndoSLAM 无"患者→检查"层级(不含人类受试者),顶层为"器官个体"——8 个离体器官来自不同动物个体,是跨个体泛化实验的最小分组单位。
§4.5 缺失值与信息性缺失
| 情况 | 说明 | 处理建议 |
|---|---|---|
| 真实序列无逐帧深度真值 | 深度真值仅合成集逐帧提供;真实序列需从 3D 点云配准渲染 | 按 §6.3 流水线由点云+位姿渲染深度,或仅用合成集做深度监督 |
| 点云仅覆盖 6 个器官 | 其余离体器官无逐点真值 | 将重建评测限定在 6 个已扫描器官上 |
| PillCam 帧数极少(239 帧) | 变帧率 4-35 fps 且双摄像头 | 作为胶囊域泛化测试集,不用于训练 |
| phantom 无 6 DoF 位姿真值 | phantom 序列以 CT 几何为真值 | 定位评测以离体部分为准,phantom 用于重建评测 |
§4.6 位姿完整性校验脚本
下载数据后、训练之前,建议对每个子数据集跑一遍完整性校验(帧数-位姿数一致、四元数模长为 1、平移在支架尺度内):
import os
import numpy as np
def validate_trajectory(root: str, scaffold_span_m: float = 0.6) -> dict:
"""校验单个子数据集(Frames + Poses)的完整性,返回诊断字典。"""
frames = sorted(f for f in os.listdir(os.path.join(root, "Frames"))
if f.endswith(".png"))
poses = np.loadtxt(os.path.join(root, "Poses", "poses.txt")).reshape(-1, 7)
report = {
"n_frames": len(frames),
"n_poses": len(poses),
"count_match": len(frames) == len(poses),
}
quat = poses[:, 3:7]
norm_err = np.abs(np.linalg.norm(quat, axis=1) - 1.0)
report["quat_norm_max_err"] = float(norm_err.max()) # 应接近 0,否则列序错位
span = poses[:, :3].max(0) - poses[:, :3].min(0)
report["translation_span_m"] = span.round(4).tolist() # 支架尺度约数十厘米
report["span_within_scaffold"] = bool((span <= scaffold_span_m).all())
return report
r = validate_trajectory(os.path.join(os.environ["ENDOSLAM_ROOT"],
"Ex_vivo", "Colon", "Colon_1_HighCam"))
print(r)
三项校验分别拦截三类最常见的下载/解析事故:帧位姿错位(时间戳对齐事故)、四元数列序错位((x,y,z,w) 与 (w,x,y,z) 混淆)、单位错位(米被当作毫米或厘米读入)。校验不通过的子数据集不要进入训练,优先检查解压完整性与读取代码。
§5 划分与使用建议
§5.1 官方划分
EndoSLAM 不提供官方 train/val/test 划分。论文的评测方式是任务导向的:深度估计在合成集上以逐帧深度真值评测;位姿估计在离体小肠等序列上以机械臂位姿评测;3D 重建在已扫描器官上以点云真值评测(论文)。
§5.2 社区惯例划分
社区复现(含 Endo-SfMLearner 官方代码)通常遵循论文协议:以合成集(UnityCam)训练/校准深度网络,以离体真实序列评测;位姿评测则直接在指定离体序列上跑预训练或在线训练模型。部分工作将器官个体作为分组键做留一器官交叉验证,以模拟跨个体泛化。
§5.3 划分策略建议与泄漏风险(重点)
- 以"器官个体+轨迹"为划分键:同一器官的同一条轨迹存在有/无息肉双版本、同一轨迹存在多相机版本(HighCam/LowCam/MiroCam),随机按帧划分会让几乎相同的画面同时落入训练与测试集,深度与位姿指标会被严重高估。
- 跨相机不等于独立:不同相机对同一器官的记录共享同一三维环境与纹理,跨相机划分仍存在环境级泄漏;若目标是"新环境泛化",必须以器官个体为单位划分。
- 合成/真实不混测:合成帧零噪声、纹理分布不同,与真实帧混入同一测试池会稀释真实性能;建议分池报告 Sim 与 Real 两套指标。
- 留一器官交叉验证:数据仅 8 个离体器官个体,建议报告 leave-one-organ-out 结果区间而非单点均值,以反映方差。
§5.4 交叉验证建议
采用 5 折留一器官 CV(6 个有点云器官)或 8 折(全部离体器官),每折内进一步按轨迹拆验证/测试;报告均值±标准差。注意 PillCam 239 帧不建议进训练折。
§5.5 外部验证建议
训练完成的深度/位姿模型应在外部体内数据(如 SCARED、临床结肠镜视频)上测试域差距;反向地,在 SCARED 上训练的模型也可用 EndoSLAM 真值做跨域评测。报告时须注明 EndoSLAM 为离体+phantom+合成数据,结果不外推为体内临床性能。
§5.6 器官级划分清单实现
把 §5.3 的策略落成一个可版本控制的划分清单(JSON),训练任务启动时校验无越界帧——这是防泄漏最有效、成本最低的一道闸门:
import json
def make_leave_one_organ_out(subdatasets: list[str]) -> dict:
"""按器官个体生成留一划分清单。
subdatasets: 形如 "Colon_1_HighCam" 的子数据集名列表。
划分键 = 器官个体编号(Colon_1),同个体的多相机版本与
有/无息肉双版本天然落在同侧。
"""
groups: dict[str, list[str]] = {}
for name in subdatasets:
organ_id = "_".join(name.split("_")[:2]) # Colon_1 / Stomach_3 ...
groups.setdefault(organ_id, []).append(name)
organ_ids = sorted(groups)
folds = {}
for held_out in organ_ids:
test = groups[held_out]
train = [s for k in organ_ids if k != held_out for s in groups[k]]
folds[f"hold_out_{held_out}"] = {"train": train, "test": test}
return {
"schema": "endoslam-loo-v1",
"rule": "organ-level leave-one-out; camera/polyp variants stay together",
"folds": folds,
}
with open("endoslam_split.json", "w") as f:
json.dump(make_leave_one_organ_out([
"Colon_1_HighCam", "Colon_1_LowCam", "Colon_1_PillCam",
"Colon_2_HighCam", "Stomach_1_HighCam", "Stomach_2_MiroCam",
]), f, indent=2)
发布结果时把该 JSON 与随机种子一并提交:审稿人与复现者据此可直接核对你的测试折是否真的未见对应器官个体。清单名含 schema 字段,是为了将来协议升级(如改为留一轨迹)时可机器判读兼容性。
§6 AI 就绪指南
§6.0 云端快速启动
数据集约 33 GB(含点云),云端实验建议挂载对象存储或使用 OpenDataLab 镜像;单卡 24 GB 显存即可复现 Endo-SfMLearner 训练。GitHub 仓库含 requirements.txt,Python 环境直接安装。
§6.1 快速上手
代码块说明:以下代码假设数据已按 §4.0 目录树解压至
data_root;data_root + 'Ex_vivo/Colon/Colon_1_HighCam'的拼接关系与官方目录一致;最小可用子集为任一*_HighCam子数据集(Frames + Poses 两个目录即可跑通位姿/深度流水线),无需下载 23.2 GB 点云。
import os
import numpy as np
data_root = os.environ.get("ENDOSLAM_ROOT", "~/EndoSLAM")
def traj_dir(organ: str, idx: int, camera: str) -> str:
# data_root + 器官 + 子数据集 + 相机,三层拼接
return os.path.join(data_root, "Ex_vivo", organ, f"{organ}_{idx}_{camera}")
d = traj_dir("Colon", 1, "HighCam")
frames = sorted(os.listdir(os.path.join(d, "Frames")))
poses = np.loadtxt(os.path.join(d, "Poses", "poses.txt"))
print(len(frames), poses.shape) # 帧数与 [N, 7] 位姿 (tx,ty,tz,qx,qy,qz,qw)
§6.2 数据获取
| 渠道 | 内容 | 大小 | 方式 |
|---|---|---|---|
| Mendeley Data | 官方完整数据包(含点云) | 图像+位姿约 9.9 GB;点云 23.2 GB | 浏览器逐文件夹下载,CC BY 4.0,无需注册 |
| OpenDataLab | 图像+位姿镜像 | 约 9.9 GB | 平台 CLI 下载 |
| GitHub | EndoSfMLearner 代码+预训练模型 | 数百 MB 级 | git clone |
# 代码与工具
git clone https://github.com/CapsuleEndoscope/EndoSLAM.git
cd EndoSLAM && pip3 install -r requirements.txt
# 数据:Mendeley Data 页面(cd2rtzm23r/1)按文件夹下载后解压
export ENDOSLAM_ROOT=~/EndoSLAM_data
§6.3 预处理全流程
流程:帧序列按位姿时间戳对齐 → 相机去畸变(注意 §6.5 坑点 8 的鱼眼模型)→ 由点云+位姿渲染深度真值 → 归一化与裁剪。
import numpy as np
import cv2
def quat_xyzw_to_R(q):
"""四元数 (x,y,z,w) -> 3x3 旋转矩阵。EndoSLAM 位姿文件采用 (x,y,z,w) 顺序。"""
x, y, z, w = q
return np.array([
[1 - 2*(y*y + z*z), 2*(x*y - z*w), 2*(x*z + y*w)],
[2*(x*y + z*w), 1 - 2*(x*x + z*z), 2*(y*z - x*w)],
[2*(x*z - y*w), 2*(y*z + x*w), 1 - 2*(x*x + y*y)],
])
def pose_to_T(pose_row):
"""[tx,ty,tz,qx,qy,qz,qw] -> 4x4 齐次变换矩阵(米制)。"""
T = np.eye(4)
T[:3, :3] = quat_xyzw_to_R(pose_row[3:7])
T[:3, 3] = pose_row[:3]
return T
def undistort_fisheye(img, K, D):
"""胶囊/广角内镜建议 fisheye 模型而非普通 pinhole 去畸变。"""
new_K = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(
K, D, img.shape[:2][::-1], np.eye(3), balance=0.0)
return cv2.fisheye.undistortImage(img, K, D, np.eye(3), new_K)
由点云渲染深度真值(最小化思路):将 3D 点云用 T_cam_world 变换到相机坐标系,按内参投影至像素平面,对多对一冲突取最近深度,形成稀疏深度图后可选做引导插值。
def render_depth_from_pointcloud(points_w, T_wc, K, height, width):
"""由器官点云与相机位姿渲染稀疏深度图(米)。
points_w: [N,3] 世界系(器官坐标系)点云;T_wc: 4x4 相机位姿(world->cam 取逆);
K: [3,3] 内参。多对一投影冲突取最近深度(z-buffer 思路)。
"""
R, t = T_wc[:3, :3], T_wc[:3, 3]
pts_c = (R @ points_w.T).T + t # 相机坐标系
z = pts_c[:, 2]
front = z > 0 # 仅保留相机前方点
u = np.rint(pts_c[front, 0] / z[front] * K[0, 0] + K[0, 2]).astype(int)
v = np.rint(pts_c[front, 1] / z[front] * K[1, 1] + K[1, 2]).astype(int)
depth = np.full((height, width), np.inf)
inside = (u >= 0) & (u < width) & (v >= 0) & (v < height)
for ui, vi, zi in zip(u[inside], v[inside], z[front][inside]):
depth[vi, ui] = min(depth[vi, ui], zi) # z-buffer:保留最近
return np.where(np.isfinite(depth), depth, 0.0)
产出的稀疏深度图可直接用于评测(只在与真值有效像素交集上算指标),或经引导滤波/联合双边插值加密后用于监督训练;插值比例应在实验记录中注明,避免"先插值再评测"引入的乐观偏差。
§6.4 PyTorch DataLoader
import os
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
from torchvision import transforms
class EndoSLAMTrajectory(Dataset):
"""读取单个子数据集(Frames + Poses)。
目录预期:root/Frames/*.png 与 root/Poses/poses.txt([N,7]:tx,ty,tz,qx,qy,qz,qw)。
返回:相邻两帧 + 相对位姿(4x4),可直接用于自监督深度/位姿训练。
"""
def __init__(self, root, transform=None):
self.frame_paths = sorted(
os.path.join(root, "Frames", f)
for f in os.listdir(os.path.join(root, "Frames")) if f.endswith(".png"))
self.poses = np.loadtxt(os.path.join(root, "Poses", "poses.txt")).reshape(-1, 7)
assert len(self.frame_paths) == len(self.poses), "帧数与位姿数不一致,请检查时间戳对齐"
self.transform = transform or transforms.Compose([
transforms.Resize((256, 320)),
transforms.ToTensor(),
])
@staticmethod
def _T(row):
T = np.eye(4, dtype=np.float32)
T[:3, :3] = quat_xyzw_to_R(row[3:7]).astype(np.float32)
T[:3, 3] = row[:3].astype(np.float32)
return T
def __len__(self):
return len(self.frame_paths) - 1
def __getitem__(self, i):
img0 = self.transform(Image.open(self.frame_paths[i]).convert("RGB"))
img1 = self.transform(Image.open(self.frame_paths[i + 1]).convert("RGB"))
T0, T1 = self._T(self.poses[i]), self._T(self.poses[i + 1])
T_1_0 = np.linalg.inv(T1) @ T0 # 相机 0 -> 相机 1 的相对位姿
return img0, img1, torch.from_numpy(T_1_0)
loader = DataLoader(
EndoSLAMTrajectory(os.path.join(os.environ["ENDOSLAM_ROOT"],
"Ex_vivo", "Colon", "Colon_1_HighCam")),
batch_size=8, shuffle=True, num_workers=4, pin_memory=True)
imgs0, imgs1, rel_T = next(iter(loader))
print(imgs0.shape, rel_T.shape) # [8,3,256,320] torch.Size([8,4,4])
合成集带逐帧深度真值,可直接构造监督训练样本:
class EndoSLAMSynthetic(Dataset):
"""Unity 合成子集:帧 + 逐帧深度 + 位姿。
目录预期:root/Frames/*.png、root/Depth/*_depth.png(或同名约定)、
root/Poses/poses.txt。深度以 PNG 存储,读入后需按标定做尺度换算。
"""
def __init__(self, root, transform=None):
self.frame_paths = sorted(
os.path.join(root, "Frames", f)
for f in os.listdir(os.path.join(root, "Frames")) if f.endswith(".png"))
self.depth_paths = [p.replace("/Frames/", "/Depth/").replace(".png", "_depth.png")
for p in self.frame_paths]
self.poses = np.loadtxt(os.path.join(root, "Poses", "poses.txt")).reshape(-1, 7)
assert all(os.path.exists(p) for p in self.depth_paths), "深度文件缺失,请核对 Depth 目录命名"
self.transform = transform or transforms.Compose([
transforms.Resize((256, 320)), transforms.ToTensor()])
def __len__(self):
return len(self.frame_paths)
def __getitem__(self, i):
img = self.transform(Image.open(self.frame_paths[i]).convert("RGB"))
depth = np.asarray(Image.open(self.depth_paths[i]), dtype=np.float32)
pose = torch.from_numpy(self.poses[i].astype(np.float32))
return img, torch.from_numpy(depth)[None], pose
说明:深度 PNG 的量化尺度(如毫米/65535 编码)以官方标定说明为准,使用前先在若干帧上抽查"深度×尺度"与点云投影深度的一致性(§6.3 渲染函数即可作为交叉验证器),确认比例后再进训练循环。
§6.5 坑点 8 个
⚠️ 坑点 1:胶囊内镜低帧率导致帧间大位移,光度一致性假设失效(分类:预处理陷阱)
问题:MiroCam 仅 3 fps、PillCam 为 4-35 fps 变帧率,相邻帧间相机位移远大于常规 30 fps 视频,基于帧间光度一致性的自监督深度/位姿方法(SfMLearner 系)的前提被破坏,直接训练会得到坍缩的深度图。
症状:深度图出现大面积"洞"或整体贴向固定值;位姿漂移在快速移动段陡增;loss 曲线在胶囊序列上远高于常规内镜序列。
解决:
- 简单方法:按帧距采样构建训练对(隔 2-4 帧配对),缩短有效基线。
- 进阶方法:借鉴 Endo-SfMLearner 的混合损失——亮度感知光度损失 + 几何一致性损失 + 平滑损失,缓解快变光照与尺度不一致(论文)。
- SOTA 方法:用空间注意力位姿网络聚焦可分辨纹理区域,并对胶囊序列单独微调;或引入光流先验/事件式插帧后再训练。
参考:EndoSLAM 论文、GitHub README 基准表
⚠️ 坑点 2:内镜高光、非朗伯反射与光照快变污染光度损失(分类:预处理陷阱)
问题:内镜光源随相机移动,组织表面非朗伯反射形成高光斑块;论文明确指出浅景深散焦与光照快变是内镜深度估计的核心难点,朴素光度损失会把高光误当作几何变化。
症状:深度图在高光区域系统性前凸;不同曝光帧间预测抖动;训练早期 loss 剧烈震荡。
解决:
- 简单方法:训练前做高光掩膜(亮度阈值+形态学膨胀),masked photometric loss。
- 进阶方法:采用亮度感知光度损失(affine brightness transform 后再算 photometric error),即 Endo-SfMLearner 的做法。
- SOTA 方法:近场光照建模——将光源与相机绑定建模(如 ECCV 2024 近场光照深度估计的思路),以光照一致性替代纯图像一致性。
参考:EndoSLAM 论文、Semantic Scholar 引文
⚠️ 坑点 3:四元数顺序与坐标系约定搞反(分类:工程陷阱)
问题:EndoSLAM 位姿文件为四元数 (x, y, z, w) + 平移 (x, y, z)(米),且为机械臂基座坐标系下的位姿;而 TUM RGB-D 惯例、多数 SLAM 库(如 evo)默认 (w, x, y, z) 或世界系/相机系约定不同,直接喂入会造成旋转完全错误。
症状:轨迹可视化中相机朝向"乱翻";ATE 大到离谱(米级 vs 毫米级);RPE 旋转分量恒定偏大。
解决:
- 简单方法:写死转换函数(见 §6.3
quat_xyzw_to_R),单测验证四元数模长为 1 且旋转与真值一致。- 进阶方法:用
T_base_cam外参把基座系位姿换到相机系再对齐;用 Umeyama 刚体对齐后再算 ATE。- SOTA 方法:将评测统一到 evo 工具链(tum 格式,wxyz 顺序),转换脚本入库、版本固定。
参考:论文附录(位姿格式)
⚠️ 坑点 4:1 kHz 机械臂位姿与相机帧时间戳未同步对齐(分类:工程陷阱)
问题:机械臂以 1 kHz 记录位姿,而视频帧率为 3-30 fps,帧与位姿必须按时间戳最近邻/插值对齐;跨子数据集还可能存在时钟起点差异,错位会在快速运动段引入系统性位姿误差。
症状:慢速段指标正常、快速段 ATE 集中飙升;同一帧在不同脚本下读出不同位姿。
解决:
- 简单方法:最近邻时间戳匹配,并在加载时断言帧数==位姿数。
- 进阶方法:对平移做线性插值、对四元数做 slerp 插值后再对齐帧时间戳。
- SOTA 方法:以标定会话(Calibration 目录 .mat)中的时间偏移为准做全局重时基,写入缓存的同步位姿文件。
参考:论文 2.2 节(位姿记录与目录)
⚠️ 坑点 5:同轨迹双版本与多相机记录造成划分泄漏(分类:数据泄漏)
问题:部分子数据集提供同一轨迹的有/无息肉两个版本,同一器官轨迹又由 HighCam/LowCam/MiroCam 多相机分别记录;若按帧或按文件随机划分 train/test,测试集画面与训练集几乎相同。
症状:验证集指标极好但换成新器官/新轨迹急剧下降;论文级对比结果无法被他人复现。
解决:
- 简单方法:按"子数据集(器官×轨迹×相机会话)"整块划分。
- 进阶方法:以"器官个体"为单位做留一划分,双版本轨迹与多相机版本强制同侧。
- SOTA 方法:注册固定的划分清单文件(JSON/CSV)随代码发布,社区统一对齐。
参考:GitHub README(双版本说明)
⚠️ 坑点 6:单目深度评估忽略尺度歧义,指标不可比(分类:评估误用)
问题:单目自监督深度存在固有尺度歧义,预测深度与米制真值不在同一尺度;不同论文的缩放策略(median scaling、scale recovery、w×h 对齐)不同,EndoSLAM 论文的 RMSE 0.2966 与他人报告值不能直接比较。
症状:复现 RMSE 差数倍;跨论文表格出现"越简单方法越好"的倒挂。
解决:
- 简单方法:统一使用 median scaling(对每帧用真值中位数/预测中位数缩放后再算 RMSE)。
- 进阶方法:报告对齐前后两套指标,并注明逐帧缩放或全局单尺度。
- SOTA 方法:用点云真值渲染米制深度后,以固定尺度(米)端到端评测,且公布评测脚本。
参考:GitHub 基准表、论文第 4 节
⚠️ 坑点 7:合成数据直接混训,忽略 Sim2Real 域差距(分类:偏倚陷阱)
问题:Unity 合成帧(21,887 帧)纹理平滑、噪声为零,与真实内镜的组织高光、散焦分布差异显著;无域适应地混训会让模型偏向合成分布,在真实序列上性能下降。数据集发布合成部分的明确目的就是研究 Sim2Real 迁移。
症状:在合成验证集上指标好看,真实离体序列上深度/位姿精度同步劣化;训练越久 Sim/Real 差距越大。
解决:
- 简单方法:预训练(合成)→ 微调(真实)两阶段,冻结与解冻分层调。
- 进阶方法:加入风格迁移/光域随机化(亮度、噪声、散焦增强),缩小外观差距。
- SOTA 方法:对抗式域适应或教师-学生自训练(如 ECCV 2024 近场光照工作的 teacher-student 思路),以真实无标注序列为目标域。
参考:论文(合成数据动机)、VR-Caps(姊妹环境)
⚠️ 坑点 8:大视场角胶囊相机用针孔模型去畸变(分类:工程陷阱)
问题:MiroCam FOV 170°、PillCam 双摄总 FOV 344°,远超针孔模型有效范围(<180°);用 OpenCV 普通 pinhole 去畸变会在边缘产生 NaN 与发散,深度投影与重建全面出错。
症状:去畸变图像边缘出现黑洞/撕裂;点云投影深度出现 inf;标定优化不收敛。
解决:
- 简单方法:仅使用图像中心 70% 区域,边缘裁剪。
- 进阶方法:用
cv2.fisheye(等距投影/Kannala-Brandt 模型)配合 Calibration 目录的标定参数去畸变。- SOTA 方法:训练/推理全程保留鱼眼模型,损失函数中用等距投影重投影误差(如 omnidirectional DSO 类做法),避免重投影到针孔平面。
参考:论文附录 A.1(相机规格)
§6.6 数据增强
| 增强方式 | 安全性 | 说明 |
|---|---|---|
| 亮度/对比度扰动 | ✅ 安全 | 模拟内镜光照变化;注意同步作用于光度损失两侧帧 |
| 高斯噪声/散焦模糊 | ✅ 安全 | 模拟浅景深散焦与传感器噪声,利于 Sim2Real |
| 色调饱和度扰动 | ✅ 安全 | 轻度即可,避免改变组织色相判别特征 |
| 几何裁剪+缩放 | ✅ 安全 | 相应变换位姿(平移缩放)与内参 |
| 水平翻转 | ⚠️ 谨慎 | 必须同步翻转位姿旋转分量与深度图,极易出错 |
| 大角度旋转 | ❌ 危险 | 破坏重力/运动先验与内镜运动分布,位姿标签失真 |
| 随机擦除组织纹理 | ❌ 危险 | 恰恰抹除位姿估计依赖的关键纹理线索 |
§6.7 模型推荐表
| 任务 | 推荐模型 | 说明 |
|---|---|---|
| 自监督深度+位姿 | Endo-SfMLearner(官方) | 空间注意力 ResNet + 亮度感知混合损失,针对内镜设计 |
| 自监督深度基线 | Monodepth2 / SC-SfMLearner | 通用强基线,SC 版含尺度一致性,更适合单目内镜 |
| 几何法 VO/SLAM | ORB-SLAM3 等特征法+鱼眼模型 | 需替换为 Kannala-Brandt 相机模型 |
| 位姿估计(学习式) | 位姿回归网络+注意力 | 参考 IJCARS 2023 等后续工作在 EndoSLAM 上的评测 |
| Sim2Real | 风格迁移+对抗域适应 | 合成→真实离体序列 |
§6.8 硬件需求表
| 阶段 | 最低配置 | 推荐配置 |
|---|---|---|
| 数据加载与预处理 | 8 核 CPU,16 GB 内存,NVMe SSD | 16 核,64 GB 内存(点云处理) |
| Endo-SfMLearner 训练 | 1×11 GB 显存(1080Ti 级) | 1×24 GB 显存(3090/4090) |
| 3D 重建评测 | 32 GB 内存 | 64 GB 内存+GPU 点云库(Open3D) |
| 存储 | 40 GB 可用 | 100 GB(含中间缓存) |
§6.9 评估指标代码
import numpy as np
def align_umeyama(model, data):
"""Umeyama 刚体+尺度对齐:估计 sim(3) 使 model 对齐 data。"""
mu_m, mu_d = model.mean(0), data.mean(0)
cov = (data - mu_d).T @ (model - mu_m) / len(model)
U, D, Vt = np.linalg.svd(cov)
S = np.eye(3); S[2, 2] = np.sign(np.linalg.det(U @ Vt))
R = U @ S @ Vt
var_m = (model - mu_m).var(0).sum()
s = np.trace(np.diag(D) @ S) / var_m
t = mu_d - s * R @ mu_m
return s, R, t
def ate(pred, gt):
"""绝对轨迹误差:对齐后的平移 RMSE。pred/gt: [N,3]"""
s, R, t = align_umeyama(pred, gt)
err = (s * (R @ pred.T).T + t) - gt
return np.sqrt((np.linalg.norm(err, axis=1) ** 2).mean())
def depth_rmse(pred, gt, median_scaling=True):
"""深度 RMSE:先逐帧中位数缩放消除尺度歧义(坑点 6)。"""
m = np.median(gt) / np.median(pred) if median_scaling else 1.0
return np.sqrt(((m * pred - gt) ** 2).mean())
§6.10 MLOps 笔记
- 数据版本固定:以 Mendeley Data v1(DOI 10.17632/cd2rtzm23r.1)为数据基线,DVC/MD5 登记各子数据集校验和。
- 评测脚本随仓库发布:位姿转换(xyzw→wxyz)、鱼眼去畸变、Umeyama 对齐三件套入库并加单测,避免"复现差异"。
- 划分清单即代码:以 JSON 固化器官级划分,训练任务中校验无越界帧。
- 指标双池报告:Sim 池与 Real 池分开,训练曲线同步记录两池指标以监控 Sim2Real 差距。
- 许可合规:产物若公开分发,须遵循 CC BY 4.0 署名要求并引用论文 DOI。
§6.11 与 evo 评测工具链对接
社区轨迹评测事实标准是 evo 工具链(TUM 格式:timestamp tx ty tz qx qy qz qw,注意其为 (w 后置的 xyzw 序)——恰好与 EndoSLAM 原生顺序一致,仅需补时间戳列):
pip install evo
import numpy as np
def poses_to_tum(poses: np.ndarray, fps: float, out_path: str):
"""EndoSLAM 位姿 [N,7] -> TUM 格式(补时间戳列,帧号/fps 作秒)。"""
n = len(poses)
stamps = np.arange(n) / fps
out = np.column_stack([stamps, poses]) # [N,8]: t tx ty tz qx qy qz qw
np.savetxt(out_path, out, fmt="%.6f")
poses = np.loadtxt("Poses/poses.txt").reshape(-1, 7)
poses_to_tum(poses, fps=20.0, out_path="gt_HighCam.txt") # HighCam 为 20 fps
# Umeyama 对齐后评估 APE(平移分量)与 RPE
evo_ape tum gt_HighCam.txt pred_HighCam.txt -va --align --t_max_diff 0.02
evo_rpe tum gt_HighCam.txt pred_HighCam.txt -va --align --t_max_diff 0.02
evo_traj tum gt_HighCam.txt pred_HighCam.txt -va --plot traj.png
使用建议:--t_max_diff 应按相机帧间隔设置(HighCam/LowCam 0.05 s、OlympusCam 0.033 s、MiroCam 0.33 s);轨迹图务必与 GT 同图叠加,肉眼核对朝向再谈指标——朝向反了说明四元数约定仍有错(回到坑点 3)。
§6.12 端到端复现路线图
以"跑通 Endo-SfMLearner 基准"为目标的最小复现路线(按依赖顺序):
| 步骤 | 内容 | 验收标准 | 常见失败点 |
|---|---|---|---|
| 1 | 下载数据(§6.2),解压至 ENDOSLAM_ROOT |
目录树与 §4.0 一致 | 解压不完整;磁盘不足 33 GB |
| 2 | 对目标子数据集跑 §4.6 校验脚本 | count_match=True,四元数模长误差≈0 | 列序读反 |
| 3 | 克隆官方仓库并安装 requirements | 依赖版本与仓库锁定一致 | PyTorch/CUDA 版本漂移 |
| 4 | 用官方预训练权重对合成集推理深度 | RMSE 与 §8.1 榜单同量级(0.30 附近) | 缩放策略不一致(坑点 6) |
| 5 | 在 1-2 个 HighCam 子数据集上微调 | loss 收敛,轨迹无整体漂移 | 学习率过高;光度损失未做亮度感知 |
| 6 | evo 评测位姿(§6.11),点云评测重建 | ATE 在支架尺度内稳定;重建 RMSE 与 §8.2 同量级 | 外参未换算;对齐方式不一致 |
| 7 | 固化划分清单+评测脚本入库(§6.10) | 第三方按 README 可一键复跑 | 评测脚本散落在 notebook 中 |
预算参考:单卡 24 GB 显存下,步骤 4-6 的单次完整评测可在数小时内完成;点云相关的重建评测耗时主要在 I/O(23.2 GB 点云),建议先把用到的器官点云抽取到本地 NVMe。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 物种/组织偏倚 | 离体猪组织与人体在体组织在颜色、蠕动、血液分布上不同 | 高 | 仅用于方法研发,不外推体内性能;结合体内数据微调 |
| 运动分布偏倚 | 机械臂引导的 L/Z/O 形重复路径,运动模式窄于真实操作 | 中 | 补充手持/临床数据评测(如 SCARED) |
| 光照偏倚 | 光源全部来自内镜自带 LED,无自然光变化 | 中 | 训练时做亮度/光域增强 |
| 病变多样性偏倚 | 息肉样隆起仅 4 个子数据集,无炎症/溃疡/肿瘤谱系 | 高 | 病变相关结论限定于息肉样凸起 |
| 设备偏倚 | 6 类相机覆盖面有限,均为研究/商用特定型号 | 中 | 报告逐相机结果,避免跨设备直接合并 |
| 帧率偏倚 | 胶囊 3-35 fps 与常规 20-30 fps 混合,运动模糊特性不同 | 中 | 分帧率分池评测 |
§7.2 标注质量
位姿真值由 0.1 mm 重复精度机械臂在 1 kHz 下记录,属设备级真值,随机误差极小;系统误差主要来自标定残差与时间戳插值。器官几何真值点精度 ±0.05-0.1 mm(Artec Eva / EinScan Pro 2x,论文附录),但扫描-影像配准环节引入额外误差。息肉样隆起为单专家制作,无多人一致性数据。整体标注质量在同类数据集中属第一梯队。
§7.3 泛化性评估
| 目标场景 | 失效风险 | 证据 |
|---|---|---|
| 人体在体结肠镜 | 高:组织形变、蠕动、血液/残留物与离体猪组织分布不同 | 数据集为离体+phantom 构成,论文自述为 ex-vivo/phantom/synthetic 三源 |
| 胶囊内镜在体导航 | 高:肠道收缩运动与内容物未建模 | 论文 challenges 讨论非朗伯表面与光照快变,未覆盖在体动态 |
| 多器官泛化 | 中:器官间纹理/几何差异明显,8 个个体方差不可忽略 | 离体器官来自不同动物个体,论文按器官分别报告 |
| 跨相机泛化 | 中:FOV 120°-344° 差异巨大 | 相机规格表(附录 A.1)显示视场角跨度极大 |
§7.4 伦理合规
数据集不含人类受试者数据:离体猪器官、硅胶 phantom 与仿真渲染,故无需人类伦理审批与知情同意;动物组织使用遵循所在机构规范。数据以 CC BY 4.0 开放,允许商用但须署名。使用者仍应确认本国对动物源生物样本研究的合规要求。
§7.5 公平性
数据集无人口学维度(不含人类),传统公平性分析(性别/种族亚组)不适用。与"设备公平性"相关的议题是:性能跨 6 类相机差异显著,部署方应报告逐设备指标而非仅报整体均值,避免高性能相机掩盖低性能相机上的失效。
§7.6 数据漂移
EndoSLAM 为一次性冻结发布(Mendeley v1,2021-06-09),无滚动更新,漂移风险主要来自"使用场景漂移":新一代胶囊内镜(更高帧率/分辨率)与临床采集条件可能偏离数据分布;建议以逐相机、逐器官的输入分布监控(亮度直方图、纹理能量)触发再训练评估。
§7.7 DAIMS 数据质量 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 位姿 CSV 每帧一行、列结构固定 |
| 2 | 唯一标识 | ✅ | 器官→子数据集→相机→帧四级唯一路径标识 |
| 3 | 特殊字符 | ✅ | 路径与文件名为 ASCII,无特殊字符风险 |
| 4 | 重复行 | ✅ | 逐帧位姿与帧一一对应,无重复记录 |
| 5 | 缺失编码 | ⚠️ | 真实序列无逐帧深度真值,需以点云渲染补齐 |
| 6 | 标签标识 | ✅ | 息肉有无以轨迹/子数据集级明确标识 |
| 7 | 罕见类分组 | ⚠️ | PillCam 仅 239 帧,建议只作测试不进训练 |
| 8 | 偏倚评估 | ✅ | §7.1 系统列出六类偏倚与缓解 |
| 9 | 数据字典 | ✅ | 论文附录 E/F + GitHub 提供目录与格式说明 |
| 10 | 信息性缺失解释 | ✅ | 点云仅覆盖 6 器官等限制在论文中明示 |
| 11 | 设备记录 | ✅ | 相机/扫描仪/机械臂规格完整(附录 A.1) |
| 12 | 共线性 | ✅ | 位姿各分量独立记录,无共线性风险 |
| 13 | 编码映射 | ✅ | 标定 .mat 提供内参/外参,坐标系统一可换算 |
| 14 | 时间戳处理 | ✅ | 1 kHz 机械臂时标 + 帧率已知,可对齐(见坑点 4) |
| 15 | 划分建议 | ✅ | §5.3 给出器官级划分策略 |
| 16 | 泄漏讨论 | ✅ | 双版本轨迹与多相机泄漏在坑点 5 明确讨论 |
| 17 | 标签分布 | ✅ | §4.2 给出相机/器官/息肉分布 |
| 18 | 测量偏倚 | ⚠️ | 扫描-影像配准误差未逐点量化,评测时需注意 |
| 19 | 外部验证建议 | ✅ | §5.5 与 §7.8 给出外部验证路径 |
| 20 | 版本记录 | ✅ | Mendeley v1 固化发布,DOI 可引用 |
| 21 | 预处理脚本 | ✅ | EndoSfMLearner 仓库提供端到端代码与预训练模型 |
| 22 | 合规要求 | ✅ | CC BY 4.0 + 无人类数据,合规路径清晰 |
| 23 | 多模态对齐 | ✅ | 影像-位姿-点云经标定与配准对齐 |
| 24 | 去标识化 | ✅ | 无人类数据,无去标识化需求 |
DAIMS 评分:22.5 / 24
评分解读:EndoSLAM 在"设备级真值、文档完备性、多模态对齐、许可合规"四个方面接近满分,失分点集中在真实序列缺少逐帧深度真值(第 5 项)与罕见相机子集过小(第 7 项)、配准误差未逐点量化(第 18 项)。与临床数据集相比,它没有隐私与标注一致性负担;与仿真数据集相比,它保留了真实组织的物理复杂性。
对你意味着什么:
- 可直接把该数据集当作内镜 SLAM/深度估计的回归测试基准——真值可信,不必怀疑标签噪声。
- 开工前先按坑点 5 建立器官级划分清单,这一步不做,后续所有指标都不可信。
- 深度评测要么用合成集(有逐帧真值),要么先跑点云渲染深度流水线(§6.3),不要在真实集上直接硬训监督深度。
- PillCam 子集(239 帧)只做胶囊域泛化测试;任何在它上面的训练结果都应视为过拟合证据。
- 引用与再分发遵守 CC BY 4.0,代码产物走 MIT,二者许可不同,注意区分。
§7.9 已知工程问题与规避
| 问题 | 触发场景 | 规避方式 |
|---|---|---|
| 下载体积大、易中断 | Mendeley 逐文件夹下载 9.9 GB+点云 23.2 GB | 分文件夹下载并校验大小;国内环境优先 OpenDataLab 镜像(约 9.9 GB 图像位姿部分) |
| 点云文件过大拖垮内存 | 直接读入 23.2 GB 点云做配准 | 按器官单文件加载+降采样;或先转二进制 PLY 再处理 |
| 目录层级在不同镜像间有差异 | OpenDataLab 镜像与 Mendeley 原包组织方式不完全相同 | 以 §4.0 目录树为参考自行拼接路径前,先 ls 确认实际层级 |
| 位姿文件分隔符/列名差异 | 不同子数据集可能为 CSV 或 TXT | 用 np.loadtxt 前先 head 检查;写解析函数而非内联读取 |
| phantom 序列无位姿真值误用 | 把 phantom 序列喂给位姿评测脚本 | 脚本入口按 camera 字段分流:OlympusCam 只进重建/深度评测 |
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| 内镜位姿估计(立体内镜场景) | 瑞士 ARTORG/伯尔尼团队(Hayoz et al., 2023, IJCARS) | 相机位姿估计 | ATE/RPE(原文报告口径) | 与 EndoSLAM 离体结果不可直接比较 | 立体几何线索+逐像素自适应加权可提升位姿鲁棒性 |
| 临床/合成内镜深度估计 | UNC 团队(Paruchuri et al., 2024, ECCV) | 单目深度估计 | 深度误差指标(原文口径) | 与 EndoSLAM 真实序列结果不可直接比较 | 显式建模近场光照可提升内镜深度估计,并以教师-学生迁移落地 |
| 合成小肠数据集 SimIntestine | 印度团队(Singh et al., 2025, Medical Image Analysis) | 胶囊内镜合成数据构建 | —(构建性工作) | — | 延续 Unity 合成路线,与 EndoSLAM 合成部分互补 |
说明:以上三项为 Semantic Scholar 收录的 EndoSLAM 后续同行评审工作,其具体数值以各自原文口径为准,与 EndoSLAM 内部基准不构成同协议比较(引文图谱)。
§8 基准性能与生态
§8.1 排行榜:论文官方基准
任务一:合成数据单目深度估计(RMSE,mean, stdev;数值不可跨论文直接比较,缩放策略见坑点 6)
| 排名 | 模型 | RMSE (mean, stdev) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | Endo-SfMLearner | 0.2966, 0.0622 | 2021 | 空间注意力 ResNet+亮度感知混合损失 | Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058 | GitHub |
| 2 | Endo-SfM w/o attention | 0.3273, 0.1086 | 2021 | 消融:去空间注意力 | Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058 | GitHub |
| 3 | Endo-SfM w/o brightness | 0.3288, 0.0608 | 2021 | 消融:去亮度感知损失 | Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058 | GitHub |
| 4 | Monodepth2 | 0.3322, 0.0815 | 2019 | 单目自监督+最小重投影 | Godard et al., 2019, ICCV. DOI 10.1109/ICCV.2019.00387 | 作者主页 |
| 5 | SC-SfMLearner | 0.3692, 0.0779 | 2019 | 尺度一致性自监督 | Bian et al., 2019, ICCV. DOI 10.1109/ICCV.2019.00786 | GitHub |
| 6 | SfMLearner | 0.3888, 0.0711 | 2017 | 自监督深度+位姿开创工作 | Zhou et al., 2017, ECCV. DOI 10.1007/978-3-319-57351-9_30 | GitHub |
| 7 | Monodepth2 (pretrained) | 0.4531, 0.1011 | 2019 | KITTI 预训练零样本迁移 | Godard et al., 2019, ICCV. DOI 10.1109/ICCV.2019.00387 | GitHub |
| 8 | SfMLearner (pretrained) | 0.4911, 0.0831 | 2017 | KITTI 预训练零样本迁移 | Zhou et al., 2017, ECCV. DOI 10.1007/978-3-319-57351-9_30 | GitHub |
任务二:稠密 3D 地图重建(点云真值 RMSE,单位 cm)
| 排名 | 方法 | RMSE [cm] | 年份 | 关键技术 | 完整引用 |
|---|---|---|---|---|---|
| 1 | EndoSfMLearner 混合重建 | 0.51 | 2021 | 学习深度+SIFT 匹配混合管线 | Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058 |
| 2 | Shape from Shading | 0.65 | 1994/2021 | 线性近似 SfS | Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058 |
| 3 | SC-SfMLearner 重建 | 0.86 | 2019/2021 | 尺度一致深度重建 | Bian et al., 2019, ICCV(经 EndoSLAM 管线评测) |
§8.2 SOTA 总结与选型建议
2021 年论文基准之后,社区方向已转向更强域适应与光照建模:若追求开箱即用的内镜深度基线,选 Endo-SfMLearner(官方权重可直接下载);若研究光照鲁棒性,参考 ECCV 2024 近场光照路线;若研究位姿不确定性,参考 IJCARS 2023 与 IEEE TMRB 2023 双峰位姿预测工作。评测 EndoSLAM 时务必复用官方缩放与对齐协议,否则与榜单不可比。
§8.3 评测协议
- 深度:合成集逐帧深度真值,median scaling 后计算 RMSE(mean, stdev 按区域/帧报出)。
- 位姿:离体序列,机械臂位姿为真值,Umeyama 对齐后报告 ATE;轨迹曲线与误差随时间变化曲线同报。
- 重建:在 6 个有点云器官上,以重建点云到真值点云的 RMSE(cm)报告。
- 上述协议的官方实现在论文与 GitHub 仓库中,第三方复现应发布协议差异说明。
§8.3b 位姿评测的实施细节
位姿评测是 EndoSLAM 区别于纯深度数据集的核心能力,实施时注意四个协议细节:
- 真值频率与对齐:机械臂位姿 1 kHz 记录、发布包按帧对齐;评测脚本从发布包直接读
Poses/poses.txt,不要自行从原始 1 kHz 流重采样(除非你明确要做时间戳鲁棒性实验,见坑点 4)。 - 对齐方式:单目方法存在尺度歧义,报告 ATE 前必须声明对齐方式(Umeyama 带尺度/仅刚体/无对齐);机械臂真值是米制的,几何法 VO 若输出米制可直接刚体对齐,学习法则常用带尺度对齐。
- 逐轨迹报告:EndoSLAM 的子数据集=独立轨迹,建议逐轨迹给 ATE 再给汇总分布,只报均值会把 Z 形小肠轨迹上的漂移峰值抹平。
- 分段分析:利用支架形态(§3.12)做分段评测——L 形折弯段、O 形环绕段分别统计,能定位算法在"视野突变"与"弱纹理环绕"两类失效模式上的表现差异。
§8.4 相关数据集表
| 数据集 | 关系 | 一句话定位 |
|---|---|---|
| VR-Caps | 姊妹合成环境 | 可交互胶囊内镜虚拟环境,MedIA 2021 |
| SCARED | 同域互补 | 体内立体手术场景+运动学位姿 |
| SimCol | 同任务异域 | 纯合成结肠位姿估计数据集 |
| C3VD | 同器官异任务 | 光度逼真虚拟结肠镜,偏检出/分割挑战 |
| Hamlyn Centre 数据 | 同任务异域 | 临床腹腔镜视频,弱真值 |
§8.5 关键论文 Top 6
- Ozyoruk KB, Gokceler GI, Bobrow TL, et al. EndoSLAM dataset and an unsupervised monocular visual odometry and depth estimation approach for endoscopic videos. Medical Image Analysis, 2021, 71: 102058. DOI 10.1016/j.media.2021.102058 — 数据集本体与 Endo-SfMLearner 基准。
- Incetan K, Celik IO, Obeid A, et al. VR-Caps: A Virtual Environment for Capsule Endoscopy. Medical Image Analysis, 2021 — 可交互胶囊仿真环境,EndoSLAM 合成数据的扩展生态。
- Bian J, Li Z, Wang X, et al. Unsupervised Scale-consistent Depth and Ego-Motion Learning from Monocular Video. ICCV, 2019 — 尺度一致自监督基线,EndoSLAM 主要对比对象之一。
- Godard C, Mac Aodha O, Firman M, Brostow GJ. Digging Into Self-Supervised Monocular Depth Estimation. ICCV, 2019 — Monodepth2,自监督深度通用强基线。
- Zhou T, Brown M, Snavely N, Lowe DG. Unsupervised Learning of Depth and Ego-Motion from Video. CVPR/ECCV, 2017 — SfMLearner,自监督深度位姿范式起点。
- Hayoz M, Hahne C, et al. Learning how to robustly estimate camera pose in endoscopic videos. International Journal of Computer Assisted Radiology and Surgery, 2023 — 在 EndoSLAM 等基准上推进内镜位姿估计鲁棒性。
§8.5b 数据集选型决策表
面对"该用哪个数据集训练/评测"的问题,按约束逐层排除:
| 你的约束 | 推荐 | 理由 |
|---|---|---|
| 必须有胶囊内镜+位姿真值 | EndoSLAM(唯一选择) | 唯一为胶囊内镜提供时标 6 DoF 位姿的公开数据集 |
| 需要体内/在体数据 | SCARED 等 | EndoSLAM 全部为离体/phantom/合成 |
| 需要逐帧稠密深度真值训练 | EndoSLAM 合成集或 C3VD | 合成渲染才有逐帧稠密深度;真实内镜序列普遍缺失 |
| 需要息肉检测/分割标注 | C3VD 等专用挑战数据集 | EndoSLAM 仅有息肉样隆起的轨迹级标识,无逐帧分割标注 |
| 需要临床级设备影像 | EndoSLAM OlympusCam phantom 序列 | 临床在用结肠镜拍摄,但无位姿真值 |
| 需要可交互仿真环境 | VR-Caps | EndoSLAM 姊妹环境,同一团队出品 |
一张总结:EndoSLAM 的不可替代性在"胶囊+真值位姿+3D 地图"三点交集,其余需求应与其他数据集组合使用,而非勉强单打。
§8.6 社区活跃度
GitHub 主仓库(CapsuleEndoscope/EndoSLAM)约 281 stars、52 forks(截至 2026-09,镜像统计);论文 Google Scholar 引用约 305 次(截至 2026-09),Semantic Scholar 收录 217 次引用、其中高影响力引用 30 次(Semantic Scholar)。引用图谱覆盖深度估计、位姿估计、域适应与胶囊机器人综述,是最常被引用的内镜 SLAM 数据集之一。
§8.6b 发布后演进时间线
从引用图谱中可以读出数据集发布后社区的演进方向(Semantic Scholar 引文图谱):
| 时间 | 方向 | 代表工作 | 与 EndoSLAM 的关系 |
|---|---|---|---|
| 2021 | 合成环境扩展 | VR-Caps(MedIA 2021) | 同团队的胶囊可交互仿真环境,补足 EndoSLAM 合成部分不可交互的短板 |
| 2023 | 位姿估计鲁棒性 | Hayoz et al., IJCARS 2023 | 在 EndoSLAM 等基准上引入立体线索与自适应加权 |
| 2023 | 位姿不确定性 | 双峰位姿预测工作(IEEE TMRB) | 在内镜位姿估计中建模多假设分布 |
| 2024 | 光照建模 | Paruchuri et al., ECCV 2024 | 显式近场光照建模+教师-学生迁移,直击坑点 2 |
| 2025 | 合成数据扩展 | Singh et al., Medical Image Analysis 2025(SimIntestine) | 小肠合成数据集,延续 Unity 路线 |
这五个方向的共同点:都在回答"内镜影像为什么难"(光照、无纹理、域差距),而不是单纯堆参数——EndoSLAM 提供的真值让这些机理性分析第一次可以被量化验证。
§8.7 生态快照表
| 资源 | 类型 | 链接 | Star/规模(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| CapsuleEndoscope/EndoSLAM | 官方代码仓库 | GitHub | 约 281 stars | 数据树说明+EndoSfMLearner 全套代码 |
| DeepMIALab/EndoSLAM | 团队镜像仓库 | GitHub | — | 更新的 README 与完整相机规格表 |
| Mendeley Data cd2rtzm23r | 官方数据托管 | Mendeley | v1 固化 | CC BY 4.0、DOI 可引用 |
| OpenDataLab EndoSLAM | 第三方镜像 | OpenDataLab | 约 9.9 GB | 国内下载友好 |
| VR-Caps | 姊妹仿真平台 | 见 MedIA 2021 论文 | 78+ 引用(截至 2026-09) | Sim2Real 研究扩展环境 |
| 采集演示视频 | 官方视频 | YouTube | — | 直观理解采集装置与流程 |
§9 相关资源与引用
§9.1 官方资源列表
- 数据下载(CC BY 4.0):Mendeley Data — EndoSLAM Dataset
- 代码与文档(MIT):GitHub — CapsuleEndoscope/EndoSLAM
- 论文页:ScienceDirect — Medical Image Analysis 71:102058
- arXiv 预印本:arXiv:2006.16670
- 采集过程演示:YouTube 演示视频
- 土耳其国家学术存档:Aperta 记录
- 第三方镜像:OpenDataLab
§9.2 BibTeX 引用块
@article{ozyoruk2021endoslam,
title = {EndoSLAM dataset and an unsupervised monocular visual odometry and
depth estimation approach for endoscopic videos},
author = {Ozyoruk, Kutsev Bengisu and Gokceler, Guliz Irem and Bobrow, Taylor L. and
Coskun, Gulfize and Incetan, Kagan and Almalioglu, Yasin and
Mahmood, Faisal and Curto, Eva and Perdigoto, Luis and
Oliveira, Marina and Sahin, Hasan and Araujo, Helder and
Alexandrino, Henrique and Durr, Nicholas J. and Gilbert, Hunter B. and
Turan, Mehmet},
journal = {Medical Image Analysis},
volume = {71},
pages = {102058},
year = {2021},
publisher = {Elsevier},
doi = {10.1016/j.media.2021.102058}
}
@dataset{endoslam_dataset_2021,
title = {EndoSLAM Dataset},
author = {Ozyoruk, Kutsev Bengisu and Gokceler, Guliz Irem and Bobrow, Taylor L. and others},
year = {2021},
publisher = {Mendeley Data},
version = {V1},
doi = {10.17632/cd2rtzm23r.1},
url = {https://data.mendeley.com/datasets/cd2rtzm23r/1}
}
@article{incetan2021vrcaps,
title = {VR-Caps: A virtual environment for capsule endoscopy},
author = {Incetan, Kagan and Celik, Ibrahim Omer and Obeid, Abdulhamid and others},
journal = {Medical Image Analysis},
volume = {70},
year = {2021},
publisher = {Elsevier}
}
§9.3 引用指南
使用数据集任一部分(含点云、phantom 序列、合成帧)均应引用主论文(MedIA 2021, DOI 10.1016/j.media.2021.102058)与数据 DOI(10.17632/cd2rtzm23r.1);使用合成环境或扩展仿真时建议一并引用 VR-Caps。代码引用注明 MIT 许可与仓库地址。
§9.4 获取与环境常见问题
Q:Mendeley 单文件夹下载总中断怎么办?
Mendeley Data 支持逐文件夹下载,建议按 Ex_vivo → Phantom → Synthetic → 3D_Scanners 的优先级分批下载;若只做位姿/深度研究,可先跳过 23.2 GB 的 3D_Scanners,后续要用重建真值时再补。
Q:GitHub 仓库 requirements 安装失败?
仓库发布于 2021 年,锁定的 PyTorch/CUDA 版本较旧;建议用 conda 新建独立环境按 requirements 固定版本安装,而非升级代码到新框架。若只复用数据加载与评测脚本(不训练),抽取脚本文件单独跑通更省事。
Q:OpenDataLab 镜像和官方包有区别吗?
镜像(约 9.9 GB)覆盖图像与位姿,适合深度/位姿任务上手;官方 Mendeley 包额外含 3D 点云、标定与 phantom CT 等完整内容。发布论文级结果前应以官方包复核,并在文中注明数据版本 DOI。
Q:早期论文里提到的 Dropbox 样本链接还有效吗?
数据分发主渠道已迁移至 Mendeley Data(v1 固化,DOI 可引用),旧 Dropbox 链接不再作为正式渠道,引用时一律使用 DOI。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 模型 | 用途 | 版本/说明 |
|---|---|---|
| 大语言模型(CodeBuddy 研究与写作助手) | 检索整理公开资料、组织词条结构、起草代码示例 | fast-model,2026-09 运行 |
§10.2 AI 参与范围
AI 负责网络检索事实汇总、章节撰写、代码草拟与表格整理;所有关键数字均溯源至论文、GitHub 官方仓库、Mendeley Data 或公开学术档案(见 §9 与正文内联引用);结构与合规由人工审核把关。
§10.3 输入来源列表
- Ozyoruk et al., 2021, Medical Image Analysis. DOI 10.1016/j.media.2021.102058
- Mendeley Data — EndoSLAM Dataset v1, DOI 10.17632/cd2rtzm23r.1
- GitHub — CapsuleEndoscope/EndoSLAM 官方仓库 README
- GitHub — DeepMIALab/EndoSLAM 团队镜像 README
- arXiv:2006.16670(EndoSLAM 预印本全文,ar5iv HTML 版)
- ScienceDirect — S1361841521001043 论文页
- Aperta 土耳其学术存档记录 230078
- Scilit 出版记录与版本历史页
- OpenDataLab — EndoSLAM 数据集页
- Semantic Scholar — 论文引文图谱页
- Google Scholar 引用记录页
- ResearchGate — Kagan Incetan 出版物页(VR-Caps 信息)
- Hayoz et al., 2023, IJCARS;Paruchuri et al., 2024, ECCV;Singh et al., 2025, Medical Image Analysis(后续工作,经 Semantic Scholar TLDR 摘录)
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §0 E-E-A-T 与免责声明 | 千方病案医学编辑部 | 逐字核对固定文本 | ✅ 已通过 |
| §2 医学背景与编码映射 | 千方病案医学编辑部 | 术语与编码核对 | ✅ 已通过 |
| §3-§4 规格、目录树与数据字典 | 数据工程师 | 对照论文附录与 GitHub 规格表 | ✅ 已通过 |
| §6 代码与坑点 | 数据工程师 | 逻辑走查+来源核对 | ✅ 已通过 |
| §7 DAIMS 与偏倚分析 | 医学编辑部+数据工程师 | 交叉评审 | ✅ 已通过 |
| §8-§9 基准、生态与引用 | 数据工程师 | 引用逐条核对 | ✅ 已通过 |
§10.5 AI 生成章节标注
除 §0 固定免责文本外,全部章节由 AI 起草、人工审核修订后发布;正文所有规模数字、日期与许可信息均带内联来源链接,未采用无来源数字。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
§C JSON-LD 结构化数据
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- SLAM-3D-Endoscopic — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- jigsaws — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- m2cai16-tool — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- multibypass140 — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- scared — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- hamlyn-datasets — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- c3vd — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- endomapper — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- misaw — 共享标签:医学影像 / 内窥镜影像 / 手术视频
- cad-cap — 共享标签:医学影像 / 内窥镜影像 / 手术视频
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
