← 返回知识体系
10 真实数据 6D Pose 标注 数据工程 质量控制

Dataset Design & Real-data Annotation

从一件实物到
可审计的位姿真值

6D pose 数据集不是“拍很多图,再存 R、t”。它是一组长期绑定的契约:物理实例与 CAD、object frame 与单位、相机和时间、真值测量链、可见性、切分、版本与误差。任何一环含糊,规模只会放大系统偏差。

Dataset Contract

先写清最终要证明什么,再决定采集和标注

instance-level localization、category-level pose-and-size、novel object、multi-view、tracking 与 robotic grasping 的测试时资产和输出不同。数据 schema 应直接表达目标任务,不要采完后再从现有字段勉强拼协议。

层最低字段它保证什么
Identityobj_id、instance_id、category_id、track_id同类多个物体、同物体多次进入场景、遮挡后重现时仍可区分
Geometrymesh/CAD、object frame、metric unit、diameter、bbox、symmetry训练、渲染、PnP、评测与机器人链共享同一资产语义
CameraRGB / Depth K,D、resolution、frame、timestamp、extrinsics每帧投影和 RGB-D 对齐可复现,不依赖隐藏默认值
Pose默认 ᶜTₒ、来源链、covariance / quality、validity知道矩阵方向、单位、时间和产生方式,而不只是一串 12 个数
Visibilitymask、mask_visib、bbox_obj、bbox_visib、counts、visib_fract区分完整轮廓、真实可见部分、截断和 depth invalid
Provenanceraw / filtered / aligned / completed、calibration / asset / annotation version能追溯标签由哪些输入和工具版本生成
Protocoltrain/val/test manifest、target list、license、evaluation contract防止数据泄漏并保证数字可比较
TEST-TIME ASSET

精确 CAD、参考视频、类别名还是都没有?

决定 instance / category / model-free / open-world setting。

TARGET PRESENCE

目标 ID / 数量 / ROI 是否已知?

决定 localization 与 detection,也决定 negative frames。

OUTPUT SPACE

6D、Sim(3)、9DoF、track 还是 grasp?

决定 size、velocity、identity、grasp 与不确定性字段。

GENERALIZATION

新视角、新场景、新实例还是新传感器?

它直接决定 split 的原子分组键。

“数据量”至少有五种单位。 帧数、独立 trajectory、scene、physical object instance 与传感器/采集日不能互换。十万相邻视频帧可能只覆盖一次照明、一个背景和一条物体轨迹。

Object Inventory & Assets

先冻结 physical object、digital asset 与 object frame 的对应

模型顶点、pose translation、diameter、对称变换和机器人 grasp 全部依赖同一 object frame 与单位。若 CAD 原点、轴或尺寸在中途改变,旧标签即使矩阵不变也已指向另一套几何语义。

资产项必须决策验收测试
物理实例 ↔ 数字资产每个 physical instance 绑定唯一 asset hash;记录 CAD、扫描或重建来源尺寸、质量和可识别特征与实物一致;同类别不静默复用近似 mesh
Object frame固定 origin、+x/+y/+z、自然正立方向与左右手系;保存 physical-to-model 外参在多个独立视角渲染坐标轴、轮廓和关键点,人工能解释每根轴
Metric unit内部统一 m 或 mm,导出层显式转换;mesh vertex、translation、diameter 同步已知卡尺尺寸、mesh bbox、投影尺寸和 depth 距离闭环一致
Mesh topology去孤立片、非流形、重复面;统一 normals、winding、texture 与 watertight 需求多后端渲染 mask/depth 一致,法向朝外,无 NaN / 极端坐标
Symmetry标注离散/连续等价变换与任务是否区分纹理方向旋转等价 pose 后 geometry / appearance 是否真的不可区分
Category canonical类别级任务固定 NOCS / canonical frame、尺寸向量和实例形变规则不同实例的语义部位、up/front 和归一化尺度可对齐,不只把 bbox 拉成单位立方体
Physical tracker frame → published object frame
CTO=(WTC)−1WTM MTO{}^{C}\mathbf T_O=\left({}^{W}\mathbf T_C\right)^{-1}{}^{W}\mathbf T_M\,{}^{M}\mathbf T_O
M 可以是 object marker、mocap rigid body、turntable fixture 或 reconstruction frame 中的临时对齐框。静态 mount ^MTO 把物理追踪 frame 转到最终发布的 object/model frame,必须独立标定、版本化并验证。
对称不能只留给评测脚本。 它影响人工对齐、PnP 多解、时序连续性、pose loss、可视化 QA 和抓取语义。若纹理打破几何对称,也应分别记录 geometry symmetry 与 task / appearance symmetry。

Capture Matrix

把部署分布拆成可检查的采集维度

先列 factor,再设计组合、预算和验收覆盖。完全笛卡尔积通常不可行,可用分层、正交设计、主动采样或 difficulty buckets;但被省略的区域必须显式记录,不能用随机拍摄假装“自然覆盖”。

01 · Viewpoint

azimuth、elevation、roll、in-plane、distance、image size

覆盖任务分布,避免只有桌面正视图

02 · Object state

稳定放置、手持、运动、关节状态、抓取接触

与部署运动和遮挡模式一致

03 · Scene

背景、桌面、货架、容器、室内/室外、空间尺度

不让模型把固定背景当 object identity

04 · Clutter

实例数、同类重复、相似干扰物、接触与堆叠

覆盖 detection、association 和遮挡难度

05 · Visibility

occlusion、truncation、self-occlusion、tiny object

分层采样,而不是事后才发现低可见样本几乎没有

06 · Illumination

方向、强度、色温、曝光、高光、阴影、HDR

覆盖 RGB appearance 和传感器工作区

07 · Material

纹理、透明、镜面、黑色、薄边、柔性邻近物

暴露 RGB / depth 的结构化失效

08 · Sensor

设备、镜头、分辨率、焦距、距离、同步、温度

明确跨设备泛化,不把同设备偏差当普适规律

SPECIFY

任务分布

deployment logs、机器人工作区、目标材质与失败代价

→
STRATIFY

覆盖桶

view × distance × visibility × scene × sensor

→
CAPTURE

session manifest

原子 session、设备状态、资产与操作者

→
AUDIT

缺口与偏差

不是只数 frame;查看独立组与联合分布

Detection 数据必须包含负样本与相似干扰物。 若训练/验证帧总含目标、每类总在固定背景或每段视频只有一个物体,系统可能学到 presence prior 与 scene shortcut,无法证明真正的 object discovery。

Calibration Before Annotation

真值精度上限由最弱的静态外参与时间链决定

相机内参、RGB–Depth、camera–mocap、marker–object、hand-eye、robot base、turntable axis 与时间同步都可能进入同一标签。每项需要独立数据、残差、验证集、温度/焦距状态和有效期,而不是只保存一个最终 YAML。

INTRINSIC

K、D 与分辨率

覆盖视场与距离;用独立视图检查位置相关重投影残差。

CROSS-SENSOR

RGB–Depth / camera–tracker

检查不同距离和边缘;记录 target-from-source、单位和 covariance。

HAND-EYE / FIXTURE

robot、end-effector、object mount

覆盖足够旋转轴与工作区;检验姿态相关偏差和装配重复性。

TIME

timestamp、exposure 与 latency

静态空间正确不代表运动时同步;用可观运动估计 offset 与 jitter。

Mocap / marker chain with explicit mounts
CTO=(WTMC MCTC)−1(WTMO MOTO){}^{C}\mathbf T_O=\left({}^{W}\mathbf T_{M_C}\,{}^{M_C}\mathbf T_C\right)^{-1}\left({}^{W}\mathbf T_{M_O}\,{}^{M_O}\mathbf T_O\right)
MC 与 MO 是 tracker 直接测量的 camera/object rigid-body frames;MC→C 与 MO→O 是静态 mount calibration。若两条 tracker pose 不是同一时刻,还需对运动进行插值或时间补偿。
标定残差不是标签不确定性的完整答案。 还需加上 tracker noise、robot repeatability、物体/mount 形变、时间 offset、CAD-to-physical 偏差和传播 Jacobian。最小交付至少保存每项校准残差与独立 end-to-end overlay 误差。

Annotation Routes

没有一种真值路线适合所有对象、场景和预算

Turntable 适合单物体系统视角;mocap 与机器人适合动态采集;reconstruction + CAD alignment 适合把一次人工对齐传播到长 RGB-D 序列;逐帧 PnP 适合少量关键帧修补。实际系统常组合两条路线做交叉验证。

路线直接测量核心链优势风险
Fiducial / turntablemarker / board pose、转台角和已标定 mountcamera ← board/marker ← object结构简单、精度高、易做单物体视球覆盖marker / board 进入背景形成捷径;mount 外参和实物装夹偏差
Optical mocap / trackercamera rig 与 object rigid body 在 mocap world 中的 poseCTo=(WTc)⁻¹WTo,含 tracker-to-optical / marker-to-object高频多物体、真实运动与遮挡,可与机器人同步反光球遮挡、rigid-body 交换、时间偏移和 mount 松动
Robot kinematicsjoint encoder、base-to-end-effector 与 hand-eyeCTo=(BTe · ETc)⁻¹BTo 或相应 eye-to-hand 链自动采集可重复、易设计视点和主动感知轨迹背隙、柔顺、TCP / hand-eye / base 标定误差随姿态变化
Reconstruction + CAD alignmentRGB-D / multi-view camera trajectory、scene mesh、一次 CAD-to-scan alignmentCTo=(STc)⁻¹STo少量人工对齐传播到长序列与稠密 pixel labelscamera drift、动态场景、重建形变和错误 CAD alignment 全局传播
Per-frame 2D–3D / PnP人工 keypoint、边缘、silhouette 或 pose gizmomodel point ↔ image pixel → candidate ᶜTₒ无需外部硬件,可修复少量关键帧和特殊样本人力昂贵、遮挡点不可见、对称多解和帧间抖动
Hybrid refinement任一粗真值 + RGB/depth render residual + 人工审核measured prior → visibility-aware optimization → audit把系统测量与图像证据结合,可发现装配和时间偏差优化吸引域、错误 depth / mask 与自证循环;不可把同一模型输出当独立真值
Robot eye-in-hand example
CTO=(BTE(q) ETC)−1BTO{}^{C}\mathbf T_O=\left({}^{B}\mathbf T_E(\mathbf q)\,{}^{E}\mathbf T_C\right)^{-1}{}^{B}\mathbf T_O
若物体安装在 end-effector、相机固定在外部或同时运动,链会改变。不要背一条 hand-eye 公式;先画 frame graph,再沿 source→target 路径复合。机器人关节时间必须与相机曝光中心对应。
Reconstruction propagation
CiTO=(STCi)−1STO{}^{C_i}\mathbf T_O=\left({}^{S}\mathbf T_{C_i}\right)^{-1}{}^{S}\mathbf T_O
S 是 scan / reconstruction frame。人工只需在融合模型中对齐一次 ^STO,但每帧标签继承 camera trajectory 和 CAD alignment 的误差;闭环更新相机轨迹后必须重新生成全部标签与 mask。

Interactive Annotation Lab

把 pose、visibility 与 split 三类隐藏假设变成可检查数字

第一个视图用 4×4 变换实际传播 rotation、translation、time 和 CAD scale 错误;第二个视图在教学 raster 上独立计算 full silhouette、depth-valid 与 visible pixels;第三个视图对 240 条确定性记录执行四种 group split,报告 scene、trajectory 和 instance leakage。

Interactive · Ground Truth Production

标注变换链、可见性与数据泄漏实验室

先比较动捕、机器人、重建和逐帧 PnP 的真值来源,再用 raster 计算 full / visible mask 与 BOP 风格统计,最后观察按 frame、trajectory、scene 或 object instance 切分会泄漏什么。
truth = measured chain mask ≠ visibility split by claim
camera / sensor object / model measured intermediate 画布为 X–Y 示意;数值使用 4×4 齐次刚体变换

Route contract

—

——

Pose label

estimated ᶜTₒ

—translation · yaw slice

Propagation error

against clean chain

——

Asset scale

pose matrix does not store CAD scale

——

Object-to-camera ground truth

CTO · 4 × 4

clean
高精度 tracker 只保证它自己的 frame。 最终物体真值还会经过 tracker-to-camera、marker-to-object、robot hand-eye、CAD-to-physical-object 等静态外参。任何一个未标定或装配松动,都会把系统偏差传播到所有帧;帧数再多也不会平均消失。

Masks, Visibility & Occlusion

从 pose 渲染 full geometry,再用场景证据判断 visible

Full mask 是模型在给定 pose 下的图像轮廓;visible mask 是其中未被场景遮挡且通过可见性规则的部分;depth-valid mask 只说明传感器有有效测量。三者应独立保存,边界容差、抗锯齿和 depth delta 必须版本化。

BOP-style visible fraction
visib_fract=px_count_visibpx_count_all\mathrm{visib\_fract}=\frac{\mathrm{px\_count\_visib}}{\mathrm{px\_count\_all}}
BOP 官方格式同时保存 px_count_all、px_count_valid 与 px_count_visib。可见率分母不是 depth-valid pixels;否则透明物体或深度空洞会把“传感器失效”误算成高可见率。
MASK / FULL

完整投影轮廓

由 CAD、K/D 和 pose 渲染;包括被其他物体遮挡的 in-image 部分。

MASK_VISIB

场景中真正可见

将 object depth 与 scene depth 比较,并处理 z-buffer、delta 和 invalid depth。

AMODAL / TRUNCATION

图像外不是遮挡

需要时另存完整 amodal extent 与 truncation;in-image bbox 无法表达图外几何。

01

先用一致 renderer 生成 object ID、depth、normal 与 full mask。

02

同一像素只保留相机中最近表面;多实例 GTID 不可混。

03

在有效场景 depth 上以物理单位比较 |z_render−z_scene|≤δ。

04

invalid scene depth 的处理要写入协议,不能在不同 split 中改变。

05

记录 bbox、counts、visib_fract 与 failure reason,支持分层评测。

BOP & Export Contract

格式转换不是改文件名,而是保持几何语义

BOP 使用右手 model/camera/world frame、OpenCV optical camera、model-to-camera pose,并常以毫米保存模型与 translation。内部系统可用米和自定义 schema,但导出时必须同时转换 mesh、t、diameter、bbox、symmetry 和 depth_scale。

文件关键语义
models/obj_XXXXXX.plymetric mesh、normals、texture;BOP 常用 mm
models/models_info.jsondiameter、bbox 与 symmetry transforms
scene_camera.jsonper-image cam_K、depth_scale,以及可选 world-to-camera pose
scene_gt.json每帧每个实例 obj_id、cam_R_m2c、cam_t_m2c
scene_gt_info.jsonbbox_obj / bbox_visib、px_count_all / valid / visib、visib_fract
rgb/ · depth/同 image_id 的颜色与 uint16 depth;深度乘 depth_scale 得到 mm
mask/ · mask_visib/IMID_GTID.png,GTID 对应 scene_gt 中实例索引
test_targets_*.json评测真正要求的 scene/image/object/instance targets,而非“文件夹里全部对象”
导出后必须重新渲染,而不是只比较 JSON。 用导出的 mesh、K、depth_scale 和 `cam_R_m2c / cam_t_m2c` 生成 overlay、mask 与 depth,与内部版本逐像素/逐点比较;这能发现转置、方向、米/毫米和实例索引错误。

Quality Assurance

质量控制要同时验证代数、图像、深度、时间和分布

人工看十张 overlay 不能证明百万帧真值可靠;单个 mean reprojection error 也会隐藏某个对象 mount 偏差或某段时间不同步。应建立逐样本自动指标、分层控制图、异常队列和独立抽检。

01 · Transform algebra

所有 T·T⁻¹≈I,复合链两种路径闭环;RᵀR≈I、detR≈1、单位一致

02 · Projection overlay

逐帧绘制坐标轴、CAD silhouette、关键点、3D bbox;检查图像中心与边缘

03 · Depth residual

比较 rendered object depth 与 measured scene depth,只在有效且预期可见区域统计

04 · Multi-view consistency

同一 object point 经不同 camera pose 投影到对应轨迹;相邻 pose 不应无物理跳变

05 · Independent measurement

卡尺、已知 board、第二 tracker 或 robot contact 验证绝对尺度与局部位置

06 · Distribution audit

按对象、场景、距离、方位、可见率、材质、设备和标注路线分层查看数量与误差

07 · Human spot check

分层随机抽样 + 极端样本全检;双人复核只用于高风险或不确定样本

08 · Round-trip export

内部 schema→BOP/COCO/自定义→内部,hash、pose、K、mask counts 不变

Visibility-aware depth residual
rz(u)=zscene(u)−zrender(u;K,CTO),u∈Ωvalid∩Ωexpected visibler_z(\mathbf u)=z_{\rm scene}(\mathbf u)-z_{\rm render}(\mathbf u;\mathbf K,{}^{C}\mathbf T_O),\qquad \mathbf u\in\Omega_{\rm valid}\cap\Omega_{\rm expected\ visible}
只在场景 depth 有效且当前 pose 预期可见的区域比较;遮挡前景、透明空洞和图像外像素不能与普通表面点同权。统计 median、quantile 和空间图,不只报告均值。
不要用待评测模型给自己生成“真值”。 模型预测可用于 proposal、异常发现或人工工具初值,但最终标签需由独立测量链、人工证据或与训练模型隔离的明确协议确认,并保存 correction history。

Split, Bias & Governance

Split 必须隔离评价主张相关的共享因素

Seen-instance 新视角可按 capture session / trajectory 分组;new-scene 要隔离场景与背景;category-level unseen instance 要隔离 physical instance 及其全部 asset/onboarding 数据;跨传感器泛化还要隔离设备或采集域。一个数据集可以发布多套 manifest,但每套主张必须单独命名。

FRAME SPLIT

通常不安全

相邻视频帧高度相关,只适合已证明独立采样的数据。

TRAJECTORY / DAY

新视角与采集复现

整段 session 原子分组,必要时连同照明与操作者一起隔离。

SCENE / SENSOR

环境或设备泛化

背景、标定、sensor fingerprint 和 domain 不跨 split。

OBJECT INSTANCE

类别级新实例

同一实物的所有帧、扫描、CAD 和参考视频只能属于一个 split。

VERSION

不可变 release

raw manifest、assets、calibration、annotations、splits、tools 各自 hash;修订生成新版本。

LICENSE & PRIVACY

真实采集也有合规边界

物体资产、商标、场景人员、住宅信息与第三方数据需许可、脱敏和删除策略。

CHANGELOG

逐标签可追溯

记录旧值、新值、原因、工具、人/自动来源与影响 split;不静默覆盖。

Release gate · 12 questions

  1. 任务、测试时资产与输出定义是否冻结?
  2. physical instance 和 mesh hash 是否一一绑定?
  3. object frame、单位和 symmetry 是否可视化验证?
  4. 所有 K/D/外参/时间戳是否带版本?
  5. pose chain 是否能从原始测量重新计算?
  6. full / visible / valid mask 是否分开?
  7. 每帧异常指标和 review state 是否保存?
  8. 分布覆盖是否按联合 factor 审计?
  9. split 是否按评价主张隔离 group?
  10. 导出格式是否完成 round-trip render?
  11. 许可证、隐私和删除策略是否明确?
  12. release 是否有 manifest、hash、changelog 与基线?
数据格式、真实标注流程与代表性 6D pose 数据集展开查看 BOP、LabelFusion、T-LESS、YCB-Video、NOCS、HouseCat6D 与 AprilTag 来源