精确 CAD、参考视频、类别名还是都没有?
决定 instance / category / model-free / open-world setting。
Dataset Contract
instance-level localization、category-level pose-and-size、novel object、multi-view、tracking 与 robotic grasping 的测试时资产和输出不同。数据 schema 应直接表达目标任务,不要采完后再从现有字段勉强拼协议。
| 层 | 最低字段 | 它保证什么 |
|---|---|---|
| Identity | obj_id、instance_id、category_id、track_id | 同类多个物体、同物体多次进入场景、遮挡后重现时仍可区分 |
| Geometry | mesh/CAD、object frame、metric unit、diameter、bbox、symmetry | 训练、渲染、PnP、评测与机器人链共享同一资产语义 |
| Camera | RGB / Depth K,D、resolution、frame、timestamp、extrinsics | 每帧投影和 RGB-D 对齐可复现,不依赖隐藏默认值 |
| Pose | 默认 ᶜTₒ、来源链、covariance / quality、validity | 知道矩阵方向、单位、时间和产生方式,而不只是一串 12 个数 |
| Visibility | mask、mask_visib、bbox_obj、bbox_visib、counts、visib_fract | 区分完整轮廓、真实可见部分、截断和 depth invalid |
| Provenance | raw / filtered / aligned / completed、calibration / asset / annotation version | 能追溯标签由哪些输入和工具版本生成 |
| Protocol | train/val/test manifest、target list、license、evaluation contract | 防止数据泄漏并保证数字可比较 |
决定 instance / category / model-free / open-world setting。
决定 localization 与 detection,也决定 negative frames。
决定 size、velocity、identity、grasp 与不确定性字段。
它直接决定 split 的原子分组键。
Object Inventory & Assets
模型顶点、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 拉成单位立方体 |
Capture Matrix
先列 factor,再设计组合、预算和验收覆盖。完全笛卡尔积通常不可行,可用分层、正交设计、主动采样或 difficulty buckets;但被省略的区域必须显式记录,不能用随机拍摄假装“自然覆盖”。
覆盖任务分布,避免只有桌面正视图
与部署运动和遮挡模式一致
不让模型把固定背景当 object identity
覆盖 detection、association 和遮挡难度
分层采样,而不是事后才发现低可见样本几乎没有
覆盖 RGB appearance 和传感器工作区
暴露 RGB / depth 的结构化失效
明确跨设备泛化,不把同设备偏差当普适规律
deployment logs、机器人工作区、目标材质与失败代价
view × distance × visibility × scene × sensor
原子 session、设备状态、资产与操作者
不是只数 frame;查看独立组与联合分布
Calibration Before Annotation
相机内参、RGB–Depth、camera–mocap、marker–object、hand-eye、robot base、turntable axis 与时间同步都可能进入同一标签。每项需要独立数据、残差、验证集、温度/焦距状态和有效期,而不是只保存一个最终 YAML。
覆盖视场与距离;用独立视图检查位置相关重投影残差。
检查不同距离和边缘;记录 target-from-source、单位和 covariance。
覆盖足够旋转轴与工作区;检验姿态相关偏差和装配重复性。
静态空间正确不代表运动时同步;用可观运动估计 offset 与 jitter。
Annotation Routes
Turntable 适合单物体系统视角;mocap 与机器人适合动态采集;reconstruction + CAD alignment 适合把一次人工对齐传播到长 RGB-D 序列;逐帧 PnP 适合少量关键帧修补。实际系统常组合两条路线做交叉验证。
| 路线 | 直接测量 | 核心链 | 优势 | 风险 |
|---|---|---|---|---|
| Fiducial / turntable | marker / board pose、转台角和已标定 mount | camera ← board/marker ← object | 结构简单、精度高、易做单物体视球覆盖 | marker / board 进入背景形成捷径;mount 外参和实物装夹偏差 |
| Optical mocap / tracker | camera rig 与 object rigid body 在 mocap world 中的 pose | CTo=(WTc)⁻¹WTo,含 tracker-to-optical / marker-to-object | 高频多物体、真实运动与遮挡,可与机器人同步 | 反光球遮挡、rigid-body 交换、时间偏移和 mount 松动 |
| Robot kinematics | joint encoder、base-to-end-effector 与 hand-eye | CTo=(BTe · ETc)⁻¹BTo 或相应 eye-to-hand 链 | 自动采集可重复、易设计视点和主动感知轨迹 | 背隙、柔顺、TCP / hand-eye / base 标定误差随姿态变化 |
| Reconstruction + CAD alignment | RGB-D / multi-view camera trajectory、scene mesh、一次 CAD-to-scan alignment | CTo=(STc)⁻¹STo | 少量人工对齐传播到长序列与稠密 pixel labels | camera drift、动态场景、重建形变和错误 CAD alignment 全局传播 |
| Per-frame 2D–3D / PnP | 人工 keypoint、边缘、silhouette 或 pose gizmo | model point ↔ image pixel → candidate ᶜTₒ | 无需外部硬件,可修复少量关键帧和特殊样本 | 人力昂贵、遮挡点不可见、对称多解和帧间抖动 |
| Hybrid refinement | 任一粗真值 + RGB/depth render residual + 人工审核 | measured prior → visibility-aware optimization → audit | 把系统测量与图像证据结合,可发现装配和时间偏差 | 优化吸引域、错误 depth / mask 与自证循环;不可把同一模型输出当独立真值 |
Interactive Annotation Lab
第一个视图用 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
Route contract
Pose label
Propagation error
Asset scale
Object-to-camera ground truth
bbox_obj
bbox_visib
Pixel counts
visib_fract
QA status
Evaluation claim
Split counts
Leakage audit
Coverage gap
Verdict
Masks, Visibility & Occlusion
Full mask 是模型在给定 pose 下的图像轮廓;visible mask 是其中未被场景遮挡且通过可见性规则的部分;depth-valid mask 只说明传感器有有效测量。三者应独立保存,边界容差、抗锯齿和 depth delta 必须版本化。
由 CAD、K/D 和 pose 渲染;包括被其他物体遮挡的 in-image 部分。
将 object depth 与 scene depth 比较,并处理 z-buffer、delta 和 invalid depth。
需要时另存完整 amodal extent 与 truncation;in-image bbox 无法表达图外几何。
先用一致 renderer 生成 object ID、depth、normal 与 full mask。
同一像素只保留相机中最近表面;多实例 GTID 不可混。
在有效场景 depth 上以物理单位比较 |z_render−z_scene|≤δ。
invalid scene depth 的处理要写入协议,不能在不同 split 中改变。
记录 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.ply | metric mesh、normals、texture;BOP 常用 mm |
| models/models_info.json | diameter、bbox 与 symmetry transforms |
| scene_camera.json | per-image cam_K、depth_scale,以及可选 world-to-camera pose |
| scene_gt.json | 每帧每个实例 obj_id、cam_R_m2c、cam_t_m2c |
| scene_gt_info.json | bbox_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,而非“文件夹里全部对象” |
Quality Assurance
人工看十张 overlay 不能证明百万帧真值可靠;单个 mean reprojection error 也会隐藏某个对象 mount 偏差或某段时间不同步。应建立逐样本自动指标、分层控制图、异常队列和独立抽检。
所有 T·T⁻¹≈I,复合链两种路径闭环;RᵀR≈I、detR≈1、单位一致
逐帧绘制坐标轴、CAD silhouette、关键点、3D bbox;检查图像中心与边缘
比较 rendered object depth 与 measured scene depth,只在有效且预期可见区域统计
同一 object point 经不同 camera pose 投影到对应轨迹;相邻 pose 不应无物理跳变
卡尺、已知 board、第二 tracker 或 robot contact 验证绝对尺度与局部位置
按对象、场景、距离、方位、可见率、材质、设备和标注路线分层查看数量与误差
分层随机抽样 + 极端样本全检;双人复核只用于高风险或不确定样本
内部 schema→BOP/COCO/自定义→内部,hash、pose、K、mask counts 不变
Split, Bias & Governance
Seen-instance 新视角可按 capture session / trajectory 分组;new-scene 要隔离场景与背景;category-level unseen instance 要隔离 physical instance 及其全部 asset/onboarding 数据;跨传感器泛化还要隔离设备或采集域。一个数据集可以发布多套 manifest,但每套主张必须单独命名。
相邻视频帧高度相关,只适合已证明独立采样的数据。
整段 session 原子分组,必要时连同照明与操作者一起隔离。
背景、标定、sensor fingerprint 和 domain 不跨 split。
同一实物的所有帧、扫描、CAD 和参考视频只能属于一个 split。
raw manifest、assets、calibration、annotations、splits、tools 各自 hash;修订生成新版本。
物体资产、商标、场景人员、住宅信息与第三方数据需许可、脱敏和删除策略。
记录旧值、新值、原因、工具、人/自动来源与影响 split;不静默覆盖。
Release gate · 12 questions