EPPUR · 2026-06-27 · repo VIPL-VSU/GEAR · 数据 gear.zip(SAPIEN 多视角)· 新建 conda env gear(torch2.4.1+cu124)· H100
box_100154(一个带 4 个铰链盖的箱子)上端到端跑完 GEAR 的 5 个阶段:SAM mask → coarse GS → 体素化抽关节 → 几何-运动交替精修 → 渲染评测。GEAR 正确分出"底座 + 4 个翻盖"5 个部件、估出 4 条铰链轴,并产出官方关节指标(轴角误差均值 0.0266、轴距 0.0061、运动量误差 0.064、动件 Chamfer 0.155)。
2D Gaussian Splatting 的铰接物体建模:① SAM 出 2D mask;② coarse GS 拿全局几何;③ 两态占据体素化 + Top-K 连通分量抽动件、初始化关节;④ 几何-运动交替精修(GEAR 核心,训练日志可见 Phase=E/M 交替);⑤ 渲染 + 评测(轴角/轴距/Chamfer)。
point_cloud_0/1.ply + larger_motion_state.txt(判出 State 0 = Source)。joint_voxel_info.npy。result.csv(关节指标)+ joint_info.json(运动学树 root heavy + 4 hinge,每个带 axis origin/direction)+ 部件/轴 mesh。| 关节指标(均值) | 值 |
|---|---|
| 轴角误差 avg_angle | 0.0266 |
| 轴距误差 avg_distance | 0.0061 |
| 运动量误差 avg_theta_diff | 0.0638 |
| 动件 Chamfer avg_CD_dynamic | 0.1549 |
| 整体 Chamfer avg_CD_whole | 0.8382 |
PSNR/SSIM/LPIPS = −1:该数据集无 test 划分(test 相机=0),--skip_test 下外观指标不计算;几何/关节指标是这条线重点,正常产出。
<<<<<<< HEAD … >>>>>>> main,只有一个 "init clean" commit)。train_coarse.py 的是平凡冲突(只差引号)。utils/other_utils.py 的 get_larger_motion_state 非平凡:main 一侧引用文件里从未初始化的变量(cano_gs/opacities…),合并时丢了代码、无法运行;HEAD 一侧 + 标记后的 else/return 恰好是完整可跑函数,且 cal_cluster_centers 无人调用,下游 stage3 也只要 point_cloud_{0,1}.ply+larger_motion_state.txt → 取 HEAD 侧清干净。Image.fromarray(...,dtype=np.byte) 新版 Pillow 拒绝 RGBA → 改 np.uint8。args.iterations → 改 getattr 兜底。tensorboard(log_utils 要)补装;依赖 pin numpy/pandas/scipy/sklearn 要 py≥3.11(与 README 的 3.10 自相矛盾)→ 非关键包松绑版本。每 scene 一卡 ~45min 全完;figs/gear_<scene>_seg.png 逐件亲眼渲染核对(逐部件着色 + 关节轴 START|END)。
| scene | 部件(关节) | 轴角° | 轴距 | 运动量 | 动件CD | 整体CD | 评价 |
|---|---|---|---|---|---|---|---|
| box_100154 | 底座+4铰链盖 | 0.027 | 0.006 | 0.064 | 0.155 | 0.838 | ✅ |
| bucket_100481 | 体+2摆件 | 0.000 | 0.003 | 0.024 | 0.084 | 0.662 | ✅ |
| door_9168 | 底座+2门 | 0.000 | 0.003 | 0.058 | 0.114 | 0.276 | ✅ |
| knife_101068 | 柄+3刀片折叠 | 0.141 | 0.001 | 0.073 | 0.201 | 1.271 | ✅ 折叠 |
| eyeglasses_101284 | 框+2镜腿折叠 | 0.045 | 0.000 | 0.047 | 0.041 | 0.091 | ✅ 折叠 |
| refrigerator_10655 | 体+2门 | 0.027 | 0.001 | 0.031 | 0.164 | 1.077 | ✅ |
| oven_7187 | 体+2件 | 0.031 | 0.011 | 119.9 | 226.6 | 22.1 | ⚠️ 轴对/运动量崩 |
| clock_6843 | 体+2件 | 0.033 | 0.000 | 0.000 | 3.07 | 3.09 | ⚠️ 重建CD高 |
| storage_45271 | 体+6抽屉门 | 7.43 | 0.003 | 0.093 | 22.1 | 0.906 | ❌ 1个轴差44.5° |
| faucet_1028 | 体+龙头/出水 | 31.9 | 0.211 | 45.5 | 0.201 | 67.3 | ❌ 旋转抓不住 |



parent=0 全挂 root),结构上表示不了串联链。为实测,我自造了 PNM 折叠台灯 13928 的 GEAR 输入:写 render_lamp_gear.py(pyrender EGL)解析 SDF 的 4 铰串联运动学树(base→静态底座→joint→臂→link0→link1→灯头),FK 算两态(rest/展开),每态渲 100 视角 rgba+depth+实例mask+点云。踩坑修掉:PNM 黑色材质→近黑渲染→GS 在 iter 700 把高斯剪到 0 崩,改每 link 亮色纯材质后稳过。
| GEAR 抽出关节 | 类型 | 最近 GT | 轴角差 |
|---|---|---|---|
| joint_2 | hinge | base→臂(主导铰链) | 0.0° ✓ |
| joint_1 | hinge | link0→link1 | 26.4° |
| joint_3 | hinge | link0→link1 | 33.9° |
| joint_4 | slider(误判) | link0→link1 | 30.0° |
parent=0 星形 —— 串联链结构被彻底压平(GT 是 5 节父子相连)。voxelize 阶段 matched=1(只干净匹配出 1 个动态分量)印证:整条臂相对底座的运动被并成 1 块。
数据集 10 个 sapien scene 全解压在 data/gear/sapien/;台灯输入由 render_lamp_gear.py 生成。报告 EPPUR/experiments/gear_repro_20260627/REPORT_GEAR复现_20260627.md。