news 2026/8/24 15:05:34

三维扫描一键变 CAD:Scan2CAD 把家具模型自动摆进真实房间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三维扫描一键变 CAD:Scan2CAD 把家具模型自动摆进真实房间

三维扫描一键变 CAD:Scan2CAD 把家具模型自动摆进真实房间

【免费下载链接】Scan2CAD[CVPR'19] Dataset and code used in the research project Scan2CAD: Learning CAD Model Alignment in RGB-D Scans项目地址: https://gitcode.com/gh_mirrors/sc/Scan2CAD

Scan2CAD 是一个把三维扫描转 CAD 的深度学习方案:输入一个扫描出的室内场景和一堆 CAD 家具模型,它自动告诉你每件家具是哪个模型、放在哪、多大。CVPR 2019 Oral 论文的开源实现,数据集覆盖 1506 个扫描场景、14225 个物体、97607 组对应点。

先跑起来:三步快速上手 🚀

第 1 步,装环境。克隆仓库,装 Python 依赖;C++ 小工具(体素化、裁切、网格转换那几个目录)各自进目录make一下即可。

第 2 步,拿数据。这个仓库没有现成的预训练模型权重,示例数据就是你的"起步包":Assets/scannet-sample是一份 ScanNet 示例场景,Assets/shapenet-sample是几件 ShapeNet 模型,Assets/training-data是训练样本索引。想拉一份示例扫描数据,跑一下python3 Assets/download_dataset.py

第 3 步,执行转化。下面这条是官方 run.sh 里的核心命令:

git clone https://gitcode.com/gh_mirrors/sc/Scan2CAD cd Scan2CAD/Network/pytorch python3 ./main.py --name example --weight 64.0 --batch_size 8 \ --train_list ../../Assets/training-data/trainset.json \ --mask_neg 1 --with_scale 1 --with_match 1

热图网络训完,接着用Alignment9DoF.py解出 9DoF 位姿,再用Alignment2Mesh.py把结果转成能打开看的网格,一条链路就通了。

它是怎么工作的

体素化:把三维数据变成"我的世界方块"

网络吃不了点云和网格,得先变成规整的三维数组。Scan2CAD 把扫描融合成 SDF 符号距离体素网格(默认分辨率 3cm、截断距离 15cm),CAD 模型变成 df 距离网格——相当于把房间变成我的世界场景,每个小方块里存着"离表面有多远"。这块逻辑在Routines/DFGen/CADVoxelization.py里。

3D CNN 对应预测:玩一局"找同一处"

网络(Network/pytorch/ 下的 model.py)同时看"扫描裁剪块"和"候选 CAD",输出热图,指明扫描上的特征点对应到 CAD 的哪个位置——就像找茬游戏:给你一张实拍的椅子和一张理想化的椅模,让你指认靠背落在哪儿。训练样本正是这样的成对数据。

9DoF 姿态优化:推、转、缩放,推到严丝合缝

热图只告诉你"在哪儿"。网络还顺带预测语义匹配(这俩是不是同一类东西)和缩放比,剩下的交给优化求解器:平移 3 个方向、旋转 3 个方向、缩放 3 个方向,共 9 个参数一起解,把 CAD 又推又转又缩放,直到"卡"进扫描里。位姿运算基于 SE3 李群,代码在Routines/AlignmentHeatmap/

调参微调出效果 🎯

参数都是main.py的命令行参数,run.sh里那组就是推荐起点:

  • 训练太慢:先看--batch_size(8)和--n_threads(4);显存富余就把 batch_size 往上加。
  • 损失降不动:把--lr从默认 0.01 降到 0.001,官方脚本就是这么设的。
  • 负样本干扰大:保持--mask_neg 1;想让网络学语义判断开--with_match 1,想让它预测尺度开--with_scale 1
  • 体素化参数设置:扫描侧默认 3cm 体素、15cm 截断。想更细就调小体素,但体积和内存大致按分辨率的立方膨胀,显卡和硬盘扛得住再动。

卡住了怎么办

问:对齐结果偏了,怎么查?先看输入——裁剪块是不是完整、候选 CAD 和场景里的东西是否同类。再看输出目录里的predict-match.txt:如果是 0,说明网络自己就觉得"这俩不是一回事",问题在匹配而不是位姿。最后比对predict-scale.txtgt-scale.txt,差得远多半是数据或尺度学习的问题。

问:.vox / .df 文件打不开?Routines/Vox2Mesh/的工具转成网格:./main --in 文件.vox --out 文件.ply,再拖进 Meshlab 就能看到。

问:训练日志半天不更新?--interval_eval调小(run.sh 用的是 50),每 50 个迭代打印一次验证统计。

它能帮你做什么 📦

  • 开箱即用的数据Assets/scannet-sample(ScanNet 场景,网格 + 语义标签)、Assets/shapenet-sample(椅子、桌子、垃圾桶等模型)、Assets/training-data(训练样本对),拿它们就能把整条流水线跑通。
  • 公开评测:Scan2CAD 维护着 CAD 模型对齐的公开 benchmark,你的方法可以上去跟别人的比。
  • 能延伸的方向:改model.py的网络结构、调losses.py的损失权重,或者把Routines/Script/的数据管线搬到你自己扫的场景上——"体素化 → 生成对应 → 训热图 → 解 9DoF"这套流程换个场景照样成立。

一间屋子扫得好、家具库备得全,Scan2CAD 就能把"是哪个、在哪、多大"一次算清——这正是三维扫描转 CAD 这条路上很实用的一块起点。把仓库克隆下来,照着上面三步从示例数据跑一遍,你就知道它适合不适合你的场景了。

【免费下载链接】Scan2CAD[CVPR'19] 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 15:05:05

软件测试面试核心考察维度与高频技术问题解析

1. 软件测试面试的核心考察维度 在软件测试岗位的面试中,面试官通常会从四个核心维度评估候选人的专业能力。理解这些维度不仅能帮助你在面试中有的放矢,更能让你在日常工作中明确提升方向。 1.1 理论基础与概念辨析 扎实的理论基础是测试工程师的立身…

作者头像 李华
网站建设 2026/8/24 15:03:47

集合排序和流排序

import lombok.extern.slf4j.Slf4j;import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;/*** HBase工具类,提供数据解析和多列排序功能…

作者头像 李华
网站建设 2026/8/24 15:03:34

【C++ 面试真题】29. 聊聊 C++ 的线程管理(std::thread)

【C 面试真题】聊聊 C 的线程管理(std::thread)C11 之前想写多线程只能抱 pthread 或 Win32 API,跨平台靠宏;C11 把线程收进了语言标准。背得出"thread 创建线程"只是及格,真考你的是"join 和 detach 不…

作者头像 李华
网站建设 2026/8/24 15:00:13

单片机毕设项目:基于 STM32/51 单片机的4 通道无线病房呼叫液晶显示与语音报警系统设计 主从架构 NRF24L01 病床呼叫终端软硬件设计(020204)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/24 14:58:35

7个我自己常用的学习网站

很多想自学黑客技术的朋友,很容易走错方向。作为一名11年的资深白帽,给大家推荐7个我自己常用的学习网站,并且都是合法的学习网站,能带你了解到黑客有关的技术,视频,电子书,实践,工具…

作者头像 李华