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时出现的依赖包错误。用户之前已经遇到了安装virt-manager的问题,现在又遇到了新的错误,显示在处理这些包时出错。这可能意味着用户在安装或更新某些软件时遇到了依赖关系问题。 首先,我需要理解update-initramfs的作用。这个命令用于生成初始内存磁盘映像,通常在更新内核或相关驱动后需要执行。如果生成过程中出现错误,可能会导致系统启动问题。错误信息中列出的包大部分是开发库和构建工具,比如g++、libglib2.0-dev等,这可能暗示用户正在尝试编译某些软件或安装需要这些依赖的应用程序。 接下来,用户列出的错误包包括libc6-dev:amd64、libpcre3-dev:amd64等,这些包可能属于某个软件包的依赖项。可能的错误原因包括软件源配置问题、包损坏、依赖关系冲突,或者下载过程中出现网络问题。 我需要考虑用户可能的操作背景。用户之前尝试安装virt-manager,现在可能在安装其他软件或更新系统时触发了这个问题。用户可能在使用Ubuntu或其他基于Debian的系统,因为使用的是apt命令。 接下来,我需要整理解决步骤。首先,建议用户更新软件源并修复损坏的包。运行sudo apt update和sudo apt upgrade可以确保软件列表是最新的,并修复可能的依赖问题。如果这些命令无法解决问题,可能需要使用sudo apt --fix-broken install来修复损坏的依赖关系。 如果错误依然存在,用户可能需要手动安装列出的包。例如,逐个安装或使用通配符安装所有列出的包。此外,检查软件源是否正确配置也很重要,确保启用了main、universe、multiverse和restricted仓库。 如果用户正在尝试编译软件,可能需要安装build-essential和其他相关开发工具。如果问题仍未解决,可能需要查看具体的错误日志,通常在/var/log/apt/term.log或/var/cache/apt/目录下的日志文件中,以获取更详细的信息。 最后,需要提醒用户注意,处理系统级包时要小心,避免因不当操作导致系统不稳定。如果用户不确定操作步骤,建议备份重要数据,并在必要时寻求更详细的帮助。</think>你在执行`update-initramfs`时遇到的依赖包错误,通常与系统软件包依赖关系损坏或安装不完整有关。以下是排查和解决方案: --- ### **错误原因分析** - **依赖链断裂**:列出的开发包(如`libc6-dev`、`g++-7`、`build-essential`等)可能是某个软件安装/编译的依赖项 - **软件源同步问题**:本地软件包列表过期或未包含这些包的版本 - **部分包安装失败**:网络中断或权限问题导致安装未完成 - **内核模块编译依赖**:生成initramfs时可能需要重新编译内核模块 --- ### **解决方案** #### 1. 更新软件源并修复依赖 ```bash sudo apt update --fix-missing sudo apt upgrade -f sudo apt --fix-broken install ``` #### 2. 手动安装缺失的开发包 ```bash sudo apt install \ libc6-dev:amd64 \ libpcre3-dev:amd64 \ libstdc++-7-dev:amd64 \ libxcb-xfixes0-dev:amd64 \ zlib1g-dev:amd64 \ build-essential \ g++-7 \ libglib2.0-dev:amd64 \ libibus-1.0-dev:amd64 \ libprotobuf-dev:amd64 \ libpulse-dev:amd64 \ libsdl2-dev:amd64 \ libxcb-present-dev:amd64 \ g++ \ libegl1-mesa-dev:amd64 \ libgl1-mesa-dev:amd64 \ libgles2-mesa-dev:amd64 \ libglu1-mesa-dev:amd64 \ libmirclient-dev:amd64 \ libmircommon-dev:amd64 ``` #### 3. 检查软件源配置 确保`/etc/apt/sources.list`包含正确的仓库(建议启用所有主流仓库): ```bash sudo sed -i 's/# deb/deb/g' /etc/apt/sources.list sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse" sudo apt update ``` #### 4. 清除旧内核相关文件(可选) 如果错误与特定内核版本相关(如`initrd.img-5.3.0-28-generic`),可尝试: ```bash sudo apt autoremove --purge linux-image-5.3.0-28-generic sudo update-initramfs -c -k all ``` --- ### **关键注意事项** 1. 如果正在**编译驱动或虚拟机组件**(如VirtualBox/KVM),建议直接安装完整开发环境: ```bash sudo apt install build-essential dkms linux-headers-$(uname -r) ``` 2. 对于`libstdc++-7-dev`等版本化包,需确保系统版本与包版本匹配(Ubuntu 18.04对应gcc-7,20.04对应gcc-9) 3. 如果问题持续,可查看详细错误日志: ```bash journalctl -xe | grep -i "apt\|dpkg" ``` --- ### **典型场景触发** 这种错误常见于以下操作后: - 强制中断`apt`安装进程 - 手动删除过软件包 - 升级系统时网络波动 - 安装第三方驱动(如NVIDIA驱动)需要重新生成initramfs时 建议操作完成后执行: ```bash sudo reboot ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值