
GT 展示已重做:下面表格仍保留 Source GT 与 PAct-ref GT 的评测口径对照;交互式 3D viewer 的左侧 9 个资产已全部改为 Raw GT(source-faithful SDF + 可用的 raw
新版分类页:按视觉现象 + 量化指标重构的 Failure Taxonomy。
mobility_v2.json 轴信息),右侧仍为 PAct output。完整核对文件:gt_audit.json。
新版分类页:按视觉现象 + 量化指标重构的 Failure Taxonomy。
| # | 现象 | 样本 | Source GT links/joints | PAct-ref GT parts/movable | score | part_mae | joint_F1 | axis° |
|---|---|---|---|---|---|---|---|---|
| 1 | 复杂物体 | #73 PM/electronics | 33 / 32 | 31 / 30 | 44.30 | 0 | 0.077 | 24.2 |
| 2 | 低频/OOD | #19 GRScenes/window | 5 / 4 | 4 / 3 | 52.52 | 0 | 0.333 | 2.3 |
| 3 | 遮挡 | #72 PM/major_appliances | 14 / 13 | 12 / 11 | 52.60 | 0 | 0.222 | 2.2 |
| 4 | 小 part | #35 ArtVIP/scissors_23 | 4 / 3 | 3 / 2 | 35.50 | 0 | 0.000 | 90.0 |
| 5 | 关节参数 | #58 PM/small_appliances | 4 / 3 | 2 / 1 | 41.26 | 0 | 0.000 | 90.0 |
| 6 | mask orig / 0 / noise | #62 PM/small_appliances | 4 / 3 | 2 / 1 | 82.05 / 0.00 / 82.04 | 0 / 2 / 0 | 1.0 / 0 / 1.0 | 0 / 90 / 0 |
| 7 | 拓扑/关节树 | #4 GAPartNet/small_appl. | 14 / 13 | 12 / 11 | 51.77 | 3 | 0.333 | 8.8 |
| 8 | 简单物体翻车 | #67 PM/household_fixtures | 4 / 3 | 2 / 1 | 41.13 | 0 | 0.000 | 90.0 |
| 9 | 纹理/外观歧义 | #22 ArtVIP/folder | 3 / 2 | 2 / 1 | 36.09 | 0 | 0.000 | 90.0 |
axis = 90.0 表示"无关节落入 30° 匹配阈值"(评测的占位值),等价于轴向完全错。Source GT joint 数包含 fixed;PAct-ref GT 是本页状态图和 evaluator 使用的折叠口径。
① 复杂物体 / 高 part count
| weighted score | 44.30 |
| part_count_mae | 0 |
| joint_count_mae | 8 |
| joint_F1 | 0.077 |
| axis° (matched) | 24.2 |
失败原因:cardfix 让 part 数对得上(0 误差),但 PAct 在 32 个候选关节上做轴向回归时被稀释 —— 它能"长出"零件,却无法在如此多 part 之间维持一致的折页/拉链约束。
改进方向
- 结构化解码:关节预测改成 part-图上的 GNN 消息传递
- render-and-compare loss:用预测关节驱动 mesh 重渲染回压 RGB
- 课程式训练:先 ≤6 关节,再线性递增到 32+
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT


d=+0.00m

d=+0.45m

d=+0.89m
PAct
↑ same input

θ=0°

θ=180°

θ=360°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;t=0 = reference_object rest pose,不保证等同 raw SDF 的语义 closed;t=1 = range 中绝对值更大的端点。每帧下方为该样本主关节的实际角度/位移。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
② 低频 / OOD 类别
| weighted score | 52.52 |
| part_count_mae | 0 |
| joint_F1 | 0.333 |
| axis° (matched) | 2.3 |
| origin err (m) | 0.989 |
失败原因:方向预测精确(2.3°),但 origin 偏差近 1 m。GRScenes 的建筑尺度(窗扇 ~1.5 m)远大于 PAct 训练分布(家电 < 1 m),尺度泛化失败而非结构失败。
改进方向
- AABB 长边归一化训练 + 反归一化预测
- 跨源 fine-tune(加入 ArtVIP/GRScenes)
- 数据源 one-hot 条件注入 latent
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT


θ=0°

θ=45°

θ=90°
PAct
↑ same input

θ=0°

θ=180°

θ=360°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;t=0 = reference_object rest pose,不保证等同 raw SDF 的语义 closed;t=1 = range 中绝对值更大的端点。每帧下方为该样本主关节的实际角度/位移。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
③ 重度自遮挡
| weighted score | 52.60 |
| part_count_mae | 0 |
| joint_count_mae | 4 |
| joint_F1 | 0.222 |
| axis° | 2.2 |
失败原因:被预测出的关节方向都很准(2.2°),但看不见的 movable part 直接被放弃。Source GT 是 14 links / 13 joints;PAct-ref GT 折叠 fixed 后是 12 parts / 11 movable,其中 raw movable = 9 个 prismatic + 2 个 revolute。当前输入视角只能看到少量外侧结构,PAct 既无 RGB 信号、mask 也只覆盖可见像素。与 diagnostics_20260514 的 occluded → recall = −0.27 相关性一致。
GT 诊断修正(#3):原页面把 source joint 数、PAct-ref movable 数和抽屉数量混在一起,且 state grid 的代表 caption 被最大的 revolute 角度主导;9 个 prismatic 的 range 只有 0.002 m,在这张 2D 预览里几乎不可见。因此这里的 GT 图只能看作 PAct-ref 关节驱动诊断,不再作为“抽屉全部打开”的视觉证据。
改进方向
- 多视角条件(2–3 帧拼接)
- 对称性先验(家电对称多)
- 不可见 part 也参与训练监督(不是输入)
Input RGB
rest (t=0)
diagnostic mid
diagnostic end
Ref GT


θ=0°

rep. revolute θ=45°

rep. revolute θ=90°
PAct
↑ same input

θ=0°

θ=180°

θ=360°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;#3 的 GT caption 只标代表 revolute,不能覆盖 9 个微小 prismatic 关节。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
④ 小 part / 薄结构
| weighted score | 35.50 |
| part_count_mae | 0 |
| joint_F1 | 0.000 |
| axis° | 90.0 |
| 对照 #27 scissors_21 | 55.62 / F1 0.5 |
失败原因:薄物体(厚度方向只有 1–2 voxel),SLAT 解码网格分辨率不足以支撑轴向回归。同类对照:#27 同样是剪刀但稍厚,PAct 命中 2/3 关节 —— 同一类别内 PAct 表现剧烈分化。
改进方向
- 提高 SLAT 解码网格分辨率(或多尺度)
- SDF/mesh 替换 voxel SLAT
- 独立关节预测分支(不依赖 part voxel 支持)
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT


θ=0°

θ=10°

θ=20°
PAct
↑ same input

θ=0°

θ=-28°

θ=-55°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;t=0 = reference_object rest pose,不保证等同 raw SDF 的语义 closed;t=1 = range 中绝对值更大的端点。每帧下方为该样本主关节的实际角度/位移。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
⑤ 关节参数(轴向)错(最干净的演示)
| weighted score | 41.26 |
| part_count_mae | 0 |
| parent_child_acc | 1.0 |
| tree validity | 1 |
| joint_F1 | 0.000 |
| axis° | 90.0 |
失败原因:所有结构性指标都满分(part / parent-child / tree validity),但轴向完全错。从正面看 hinge 在左 / 在上是局部对称的 —— 方向歧义在单视角 RGB 下有合理性。
改进方向
- 多假设输出:axis 分支输出 k 个候选 + 置信度
- 物理一致性 loss:用 part 运动序列对齐 RGB 中的缝隙/阴影
- VLM-as-prior:让大模型猜"门往哪边开"作为软先验
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT


d=+0.00m

d=+0.15m

d=+0.30m
PAct
↑ same input

θ=0°

θ=36°

θ=72°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;t=0 = reference_object rest pose,不保证等同 raw SDF 的语义 closed;t=1 = range 中绝对值更大的端点。每帧下方为该样本主关节的实际角度/位移。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
⑥ 2D mask 依赖(输入扰动消融)
关键发现:把 mask 全置零,PAct 完全崩溃(score=0,part_count=0,tree invalid);把 mask 的 part 标签 30% 随机错位(label 1↔2 互换,前景像素总数不变),输出几乎完全不变(82.05 vs 82.04)。这说明 PAct 把 mask 当成前景/背景的二值 gate,对像素级 part-id 鲁棒 —— 所谓"过度依赖 mask"应精确表述为"硬性 gating 依赖,不依赖细粒度 part-id"。
改进方向
- mask-free fallback:训练时 5–10% 概率用 RGB saliency / SAM zero-shot 替代 mask
- 解耦输入:把 mask 拆成"二值前景 channel" + "可选 part-id channel"
- 自训练 mask:用 PAct step-0 输出投影回 2D 作为伪 mask 迭代细化
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT




PAct orig
↑ same input



PAct mask=0
↑ same input
PAct 没有产生任何 part(part_count=0,无 mesh 可渲染)
PAct noise
↑ same input



同一 PAct-ref GT、同一视角,三种 mask 输入下 PAct 的开/合状态对比;t=0 = 关节角度 0 (rest),t=1 = 关节 range 中绝对值更大的端点。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
⑦ 拓扑 / 关节树不一致
| weighted score | 51.77 |
| part_count_mae | 3 |
| joint_count_mae | 4 |
| joint_F1 | 0.333 |
| axis° | 8.8 |
| tree validity | 1 |
失败原因:cardfix 修复了 mask 入口,但 PAct 在生成阶段又"合并"了 3 个 part(输出 9 / PAct-ref GT 12)。diagnostics_20260514 报告 73% 的输出有兄弟 part AABB 重叠 > 50%,印证拥挤场景下倾向"少生成几个"。
GT 诊断修正(#7):交互式 3D viewer 已改用 raw/source-faithful GT,并从 raw
mobility_v2.json 恢复 8/9/10 三个 knob 的不同 revolute origin;旧 2D state 预览不可作为 open/closed 证据。改进方向
- part query 之间加 DPP/NMS-style 排斥项
- Stage-1 part token 数加 cardinality loss
- 后处理 graph-cut 拆分高重叠 part
Input RGB
rest frame
same GT frame
same GT frame
Ref GT


identical render

identical render

identical render
PAct
↑ same input

θ=0°

θ=180°

θ=360°
状态预览 · #7 的旧 2D GT 三帧不可作为真实开合证据;请用交互式 3D 查看器检查 raw GT 的 part/tree/axis 与 PAct 的差异。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
⑧ 简单物体也翻车
| weighted score | 41.13 |
| part_count_mae | 0 |
| joint_F1 | 0.000 |
| axis° | 90.0 |
| PM-easycase 8 样本均值 | F1 = 0.125 |
失败原因:与现象 5 同根 —— 简单物体反而陷入局部对称歧义。pm_easycase_probe 选了 8 个最易的 PM 样本,整体 mean F1=0.125;其中仅 #62 命中 F1=1.0,其余 7 个全部 F1=0。87.5% 的最易样本仍然完全失败。复杂物体反倒因 part 多互相约束而保住下限。
改进方向:同现象 5(多假设 + 物理一致性 + VLM prior);额外建议在"门/抽屉/柜门"这一最常见可动结构上专门 fine-tune 把 F1 拉到 > 0.5。
Input RGB
closed (t=0, rest)
mid (t=0.5)
open (t=1.0)
Ref GT


θ=0°

θ=10°

θ=21°
PAct
↑ same input

θ=0°

θ=180°

θ=360°
状态预览 · PAct-ref GT 与 PAct 在同视角下用 t∈[0,1] 驱动各自关节;t=0 = reference_object rest pose,不保证等同 raw SDF 的语义 closed;t=1 = range 中绝对值更大的端点。每帧下方为该样本主关节的实际角度/位移。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
⑨ 纹理 / 外观歧义
| weighted score | 36.09 |
| part_count_mae | 0 |
| joint_F1 | 0.000 |
| axis° | 90.0 |
失败原因:双重打击 —— 几何薄(同现象 4)+ RGB 几乎无任何纹理梯度可指示折页方向(封面/封底视觉一致)。这类对象本质上需要外部知识("文件夹从一侧打开")。
GT 诊断修正(#9):PAct-ref 只有 1 个 movable revolute,range = [-1.396, 0] rad;θ=0° 是 reference rest/folded,t=1 对应负方向约 -80° 的打开。reference_object.json 中名为 knob 的 moving part 实际是文件夹活动面板,不应按“旋钮”理解。
改进方向
- 类别名→关节先验:folder/book/laptop 从模板库检索初始关节
- VLM-grounded prior(同现象 5)
- DINOv2 全局+patch token 拼接,让"我看到的是 X"的语义更显式
Input RGB
rest/folded (θ=0°)
opening (θ≈-40°)
open (θ≈-80°)
Ref GT


θ=0° rest/folded

θ=-40°

θ=-80°
PAct
↑ same input

θ=0°

θ=-35°

θ=-69°
状态预览 · #9 使用负向 revolute range;这里的 closed/open 标签按 reference rest → 负角度打开解释,不再把零位写成负角度。
→ 打开交互式 3D 查看器
拖动旋转 · 滑块驱动关节 · Raw GT 与 PAct 并排
综合洞察
- Part-decomposition 不再是主要瓶颈 — 9/9 现象里 8 个 part_count_mae=0(cardfix 把这一关基本攻下)。
- Joint axis 是新的主要瓶颈 — 5/9 现象的 axis=90.0(完全 miss),3/9 在 2–24°,只有 mask_orig 这一理想条件能 0°。
- 复杂度并不必然导致更差 — #73(Source GT 32 joints / PAct-ref 30 movable)score 44.30,#22(Source GT 2 joints / PAct-ref 1 movable)score 36.09。简单物体落在局部对称歧义死胡同里;复杂物体因 part 多互相约束而保底。
- Mask 是二值 gate,不是细粒度 hint — 现象 6 消融说明,提升 mask 质量未必能换来输出质量提升;真正缺的是关节方向的多假设/物理约束/外部先验。
- 跨数据源尺度漂移 — 现象 2 揭示 PAct origin 对尺度泛化弱(窗 origin 误差 ~1 m)。
Source artifacts ·
portal index ·
报告:reports/20260513_pact_transporter_exploration/runs/pact_official_failure_modes_20260525/report.md ·
per-sample 数据:per_phenomenon.json