CADCrafter: Generating Computer-Aided Design Models from Unconstrained Images

https://arxiv.org/pdf/2504.04753

CADCrafter: Generating Computer-Aided Design Models from Unconstrained Images

摘要

CADCrafter 是一种从非约束图像生成计算机辅助设计(CAD)模型的方法。该方法通过仅使用合成的无纹理 CAD 数据进行训练,但在真实世界图像上进行测试,从而解决了实际世界 CAD 数据稀缺的问题。为了弥合图像和参数化 CAD 模型之间的显著表示差异,我们引入了几何编码器以准确捕获多样化的几何特征。此外,由于将 CAD 参数序列编译为显式 CAD 模型是一个不可微分的过程,我们采用直接偏好优化(Direct Preference Optimization, DPO)来利用 CAD 序列质量的自动代码检查器反馈微调模型。我们还收集了一个真实世界的数据集,包含多视图图像和相应的 CAD 命令序列对,用于评估我们的方法。实验结果表明,我们的方法能够稳健地处理真实非约束 CAD 图像,并且能够泛化到未见过的一般对象。

1. 引言

1.1 背景

计算机辅助设计(CAD)提供了创建形状和机制的基本机械组件,这些组件在所有制造和设计应用中都是必不可少的。参数化 CAD 命令序列能够精确控制形状,并便于将来对尺寸和比例进行修改。然而,手动创建 CAD 命令序列既繁琐又耗时,这促使了逆向工程研究的发展,以从现有的 CAD 模型中恢复 CAD 设计过程。

1.2 现有方法的局限性

当前的研究主要集中在从 3D 表示(如 B-Reps、点云和体素)重建 CAD 命令序列。这些形式通常来自合成数字数据或通过昂贵的 3D 传感器获得的高质量 3D 重建。这种对复杂数据和昂贵技术的依赖限制了这些方法在实际日常应用中的可行性。

1.3 我们的方法

我们提出了一种直接从图像生成可编辑 CAD 命令序列的方法。然而,这项任务特别困难,因为 CAD 命令由离散的几何操作和连续参数混合组成,而图像捕获的是具有有限空间信息的原始外观。此外,非约束图像经常表现出相机姿态、光照条件和噪声的变化,以及对象的各种材料和纹理。

1.4 贡献

我们的贡献包括:

  • 提出 CADCrafter,一种基于潜在扩散的框架,利用几何特征弥合合成训练数据和真实测试数据之间的域差距。
  • 引入自动代码检查器,通过直接偏好优化(DPO)微调我们的扩散模型,从而提高准确性并减少无效输出。
  • 我们的方法支持单视图和多视图输入,并引入了一个包含 3D 打印 CAD 图像和 CAD 命令的数据集,展示了模型的鲁棒性和泛化能力。

2. 相关工作

2.1 CAD 生成模型

大多数现有的 CAD 生成研究集中在无条件生成或基于完整 3D 信息的条件生成,例如点云、草图、B-Reps 和体素网格。例如,DeepCAD 利用自编码器对 CAD 模型进行编码,并使用 GAN 进行无条件生成。然而,这些模型通常在无噪声的合成数据上进行训练和测试。

2.2 3D 生成模型

随着大规模模型训练的兴起,最近的 3D 生成模型取得了显著进展。大多数现有方法以离散形式生成 3D 形状,例如隐式神经场、点云和网格。然而,这些生成的形状通常缺乏锐利的几何特征,且无法直接由用户编辑。

3. 方法

3.1 CAD 命令序列编码

我们关注两种常用类别:草图和拉伸,这些类别提供了足够的表达能力。我们采用命令 {⟨SOL⟩, L, A, R}(开始、线、弧和圆)来绘制形成封闭 2D 区域的曲线,然后使用拉伸命令 E 将每个 2D 轮廓提升为 3D 实体。每个离散命令由其独特的连续参数定义,这些参数决定了大小、位置、比例和类型。

3.2 几何条件编码器

CAD 命令是基于几何结构的精确操作,因此从输入图像中探索更多的几何信息非常重要。我们提取深度和表面法线图,并使用预训练的 DINO-V2 编码器获取 DINO 特征。我们设计了一个基于变换器的几何编码器,以自适应地整合每个视图和模态的几何线索。

<think>好的,我现在需要帮用户解决在运行update-initramfs时遇到的错误。用户提到生成initrd.img时出现错误,涉及多个软件包,比如libc6-dev:amd64、build-essential等。首先,我得弄清楚这些错误的原因可能是什么。 首先,常见的可能性是这些软件包可能没有正确安装或者存在依赖问题。可能用户最近更新了系统或者安装某些软件,导致依赖关系被破坏。或者,软件包在安装过程中被中断,导致部分文件缺失或配置未完成。 接下来,我应该考虑如何修复这些依赖问题。通常,使用apt的修复命令,比如sudo apt install -f,可以解决依赖问题。用户可能需要先更新软件包列表,然后尝试修复损坏的包。此外,手动重新安装列出的所有软件包也是一个方法,确保每个包都正确安装。 另外,用户可能缺少某些仓库或源,导致无法下载正确的依赖包。这时候需要检查/etc/apt/sources.list中的源是否正确,并更新。如果某些软件包版本过旧或过新,也可能导致兼容性问题,可能需要指定版本安装。 还有一种可能是磁盘空间不足,导致安装过程中无法写入文件,进而引发错误。需要检查磁盘空间,使用df -h命令查看。 此外,内核头文件的问题也可能导致initramfs生成失败。用户可能需要安装对应内核版本的头文件,比如linux-headers-5.3.0-28-generic。 如果上述方法都无效,可能需要考虑生成initramfs时忽略某些错误,但这不是推荐的做法,可能会影响系统稳定性。最后,建议用户查看详细的日志文件,比如/var/log/apt/term.log,以获取更具体的错误信息,从而更有针对性地解决问题。 需要确保用户按照步骤操作,并在每个步骤后检查是否解决了问题。如果问题依旧存在,可能需要进一步的诊断,比如查看更详细的日志或寻求社区支持。</think>您在运行 `update-initramfs` 时遇到的错误与多个开发库和构建工具包相关,以下是分步解决方案: **1. 先修复软件包依赖关系** ```bash sudo apt --fix-broken install sudo apt autoremove sudo apt clean ``` **2. 手动重新安装关键软件包** ```bash sudo apt install --reinstall \ libc6-dev:amd64 \ build-essential \ g++ \ libglib2.0-dev:amd64 \ zlib1g-dev:amd64 ``` **3. 确保内核头文件存在** ```bash # 确认已安装对应内核头文件 sudo apt install linux-headers-$(uname -r) ``` **4. 强制重新生成 initramfs** ```bash sudo update-initramfs -c -k $(uname -r) ``` **可能原因分析:** - 开发库不完整(常见于从源码编译软件后的残留配置) - 跨版本升级后的依赖冲突 - 软件源配置异常导致部分包版本不一致 **扩展检查建议:** ```bash # 检查软件源有效性 sudo apt update # 查看详细错误日志 journalctl -xe | grep -i initramfs ``` 如果问题仍未解决,建议提供以下信息: 1. 操作系统具体版本(`lsb_release -a`) 2. `/var/log/apt/history.log` 中最近的操作记录 3. 完整错误输出的最后 20 行内容 这些错误通常不会影响现有系统的正常运行,但可能阻碍后续软件更新或内核升级操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值