Scan2CAD 实战从 RGB-D 扫描到 CAD 模型自动对齐的完整路径【免费下载链接】Scan2CAD[CVPR19] Dataset and code used in the research project Scan2CAD: Learning CAD Model Alignment in RGB-D Scans项目地址: https://gitcode.com/gh_mirrors/sc/Scan2CAD手里有一份办公室的 RGB-D 扫描仓库里躺着一把 CAD 椅子要确认椅子在扫描中的位置和朝向过去靠人眼拖拽加 ICP 反复微调。Scan2CAD 把这件事交给一张 3D CNN输入扫描与 CAD 的体素网格直接输出 9 自由度位姿替掉手工对齐里最耗时的试错环节。项目定位它替代了哪种手工活过去的做法在网格编辑软件里把 CAD 模型拖到扫描上再用人选对应点跑 ICP一个场景多个物体时要来回折腾几十次稍有不慎就掉进局部最优。现在的做法Scan2CAD 用一份大规模标注数据公开集含 1506 个扫描、14225 个物体、97607 组关键点匹配训练网络让模型直接给出每个 CAD 在场景中的平移、旋转和缩放。隐藏测试集另有 97 个场景、1160 个物体、7557 组对应关系专门留给基准评测。一句话定位它不重建几何只回答哪个 CAD 模型、放在哪里、转多少、放大几倍。工作原理一对体素网格如何变成 9 自由度位姿输入两种体素网格。扫描经体素融合变成 SDF 网格分辨率 3cm、截断距离 15cmCAD 模型转成无符号距离网格 df。处理核心是 Network/pytorch/ 里的编码器-解码器 3D CNN。扫描网格逐级下采样到 4×4×4CAD 网格同样压到 4×4×4两路特征在瓶颈处拼接后解码回去同时输出三样东西heatmapCAD 网格上的对应关系热图match0/1 判断这对输入是不是同一种物体scaleCAD 应放的缩放 (x, y, z)# Network/pytorch/model.py 前向输出示意 heatmap, match, scale model(sdf_scan, df_cad)大白话网络先在 CAD 身上找哪块对应扫描这块顺手回答是不是同一种东西和要放大几倍。输出网络只给初值精活由 Routines/AlignmentHeatmap/ 里的 C 优化程序收口对平移3DoF、旋转3DoF、缩放3DoF做 9 自由度搜索按对齐代价排序取最优。训练样本长这样左边是扫描裁剪块右边是 CAD 上的热图真值。对齐结果可视化如下扫描与摆回去的 CAD 基本重合快速上手从克隆到出结果的最小路径仓库自带样例数据Assets/ 下不需要申请完整数据集也能先把流程跑通。git clone https://gitcode.com/gh_mirrors/sc/Scan2CAD cd Scan2CAD pip install -r Routines/Script/requirements.txt cd Network/pytorch ./run.sh依赖就五个numpy、numpy-quaternion、plyfile、PyWaveFront、pybind11。Routines/Script/ 的 Parameters.json 里配好六个数据路径后正式流程按顺序走编译 C 模块cd {Vox2Mesh, DFGen, CropCentered}后make→CADVoxelization.py体素化 CAD →GenerateCorrespondences.py生成对应关系全量数据约 500GB样例 trainset.json 足够试跑→./run.sh训练 →Alignment9DoF.py --projectdir 输出目录出位姿 →Alignment2Mesh.py转网格查看。参数怎么调不翻车关键参数速查参数散在 run.sh、main.py 和数据脚本里真正常动的就下面这些默认值都能直接跑。参数位置默认值作用batch_sizerun.sh8单步显存占用显存紧就先降它lrrun.sh0.001学习率SGD momentum 0.9weightrun.sh64.0heatmap 损失总权重n_threadsrun.sh4DataLoader 线程数interval_eval / n_samples_evalrun.sh50 / 1024评估间隔与评估样本上限体素分辨率CADVoxelization.py3cm截断 15cm扫描 SDF 网格尺寸match / scale 损失权重main.py0.1 / 0.2辅助任务权重代码里固定原则先跑样例默认值确认输出目录里出现 predict 结果再谈调参。踩坑记录4 个高频现象与解法 现象main.py 报 train-list does not exist 原因训练样本没生成或数据集没放进 Parameters.json 指定的路径。 解法三个数据集按路径就位后先跑体素化和 GenerateCorrespondences.py只想试跑就直接用 Assets/training-data/trainset.json。现象对齐结果整体偏 90 度 原因ShapeNet 是 y-upScanNet 是 z-up坐标系不一致。 解法Alignment9DoF.py 默认已乘[1,-1,0,0]做修正换数据集时先核对 up 向量。现象Alignment9DoF.py 跑不动日志停在调用外部程序 原因Routines/AlignmentHeatmap/build/main这个 C 程序没编译脚本本身只负责拼任务 json。 解法先编译 AlignmentHeatmap 模块再跑。现象GPU 显存溢出 原因batch_size8 对低显存卡偏重。 解法降 batch_sizen_threads 补到 CPU 核数附近lr 保持 0.001 别动。延伸资源数据、基准与应用样例数据全在 Assets/scannet-sample扫描、shapenet-sampleCAD、training-data训练样例、output-network示例预测输出含 gt 与 predict 对照适合当验收基线完整数据集ScanNet ShapeNet Scan2CAD 标注zip 约 8MB通过项目主页的申请表单获取回复很快官方对齐基准隐藏测试集 97 个场景提交结果可比排名论文CVPR 2019 Oral引用格式见 README.md典型场景室内重建中把扫描资产挂回 CAD 库、BIM 资产注册、AR 家具摆放的位姿估计下一步动作克隆仓库后用样例 trainset.json 跑一次./run.sh打开 Assets/output-network/example 里任意子目录对比 predict-match.txt 和 gt-match.txt 的差距——这就是你后续调参的基线。【免费下载链接】Scan2CAD[CVPR19] Dataset and code used in the research project Scan2CAD: Learning CAD Model Alignment in RGB-D Scans项目地址: https://gitcode.com/gh_mirrors/sc/Scan2CAD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考