projection-conditioned-point-cloud-diffusion
用扩散模型从单张RGB图像重建三维点云,CVPR 2023 Highlight论文官方实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用扩散模型从单张RGB图像重建三维点云,CVPR 2023 Highlight论文官方实现
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你用手机拍下一只玩具消防车,系统立刻「吐出」它的三维点云模型——你能从任意角度观察它的每个细节。这不是科幻,而是 CVPR 2023 Highlight 论文 PC² 正在做的事。

图1:PC² 单图三维重建效果展示。输入任意一张 RGB 图像,系统输出对应的三维稀疏点云。
传统的单图三维重建是计算机视觉领域的「硬骨头」——2D 图像里缺少大量三维信息,需要算法「猜」出物体的深度和形状。以往的方法要么依赖多视角图像,要么对真实场景的泛化能力很差。
PC²(Projection-Conditioned Point Cloud Diffusion) 的核心思路是:将单图三维重建建模为一个条件去噪扩散过程(Conditional Denoising Diffusion Process)。简单来说,算法从一团随机噪声点云出发,在每一步去噪迭代中,参考输入图像的视觉特征,将点云逐渐「雕琢」成与输入图像一致的物体形状。
这个过程的关键创新叫做 Projection Conditioning(投影条件化):在每一个扩散步骤,算法将输入图像的视觉特征从相机视角投影到当前的部分去噪点云上,给每个 3D 点附加上对应的 2D 视觉信息。这种几何一致的条件化方式,让模型能够生成高分辨率的稀疏几何结构,与输入图像精确对齐。

图2:PC² 方法原理图。模型接收 RGB 图像和相机位姿,逐步将随机高斯噪声点云去噪为物体三维形状,同时通过投影条件化机制保证几何一致性。
PC² 的代码架构分为三个核心层次:
项目使用 timm 库提供的预训练 Vision Transformer(ViT)作为图像特征 backbone,支持三种规格:
vit_small_patch16_224_msn(默认,384 维特征)vit_base_patch16_224_mae(768 维特征)vit_large_patch7_224_msn(1024 维特征)这些 ViT 模型从 ImageNet 预训练权重加载(通过 Facebook 公共文件服务器托管的 .pth.tar 文件),在训练时可以选择冻结(freeze)以节省显存。ViT 负责将输入 RGB 图像编码为密集的 2D 特征图,为后续投影步骤提供原材料。
这是 PC² 的核心创新所在。投影模块利用 PyTorch3D 的可微渲染管线,在每个扩散步骤执行以下操作:
代码中控制这些行为的参数包括:use_local_colors、use_local_features、use_global_features、use_mask(输入图像掩码)、use_distance_transform(距离变换图)等。这种设计让研究者和开发者可以灵活实验不同条件化组合。
附加了图像条件的点云,进入 PVCNN(Point-Voxel CNN) 进行去噪预测。PVCNN 是一种同时处理点云和体素化数据的双分支卷积网络,兼顾了局部精细结构和全局几何感知。代码支持三种点云模型:
pvcnn(默认,Point-Voxel 双分支卷积网络)pvcnnplusplus(增强版)simple(简化版,适合快速实验)扩散调度器采用 HuggingFace diffusers 库,支持 DDPM、DDIM、PNDM 三种主流方案。推理时可通过 diffusion_scheduler 参数切换,默认采样步数为 1000 步。
项目还包含一个着色模型(Coloring Model),在点云形状重建完成后,额外预测每个点的 RGB 颜色。这通过 main_coloring.py 实现,是独立的第二阶段模型。着色模型同样基于投影条件化机制,但将预测目标从点云位置替换为颜色值。由于着色模型是确定性的(not really doing any sampling),推理速度快于形状生成阶段。
项目在工程实践上非常规范,体现了学术代码少见的成熟度:
Hydra 配置管理:所有超参数通过 experiments/config/structured.py 中的 Python dataclass 定义,支持命令行覆盖,例如 dataset.category=hydrant dataloader.batch_size=24。这是目前最优雅的深度学习配置方案之一,支持超参数扫描和实验管理。
多后端优化器:代码支持 PyTorch 原生优化器、timm 优化器和 Transformers 优化器,通过配置灵活切换。
分布式训练:通过 accelerate 库支持多 GPU 训练,支持混合精度(fp16),支持 Weights & Biases(wandb)完整实验记录,包括代码版本追踪(wandb.run.log_code)。
Checkpoints 与可视化:每 1000 步保存 checkpoint,支持在训练中途生成可视化结果(点云渲染),并提供预训练模型下载脚本(scripts/download-example-logs-and-checkpoints.sh)。
项目使用 Facebook Research 的 Co3Dv2(Common Objects in 3D Version 2)数据集,这是目前规模最大的单目三维重建数据集之一,涵盖真实场景多类别物体。作者在单个类别(如消防车、毛绒玩具熊)上训练模型,并提供了相应的预训练 checkpoint 下载,大小约 1.2GB。
项目代码存在一些需要手动处理的坑:
PyTorch3D 版本敏感:作者使用 0.7.3 版本,并提供了一个针对 pytorch3d/implicitron/dataset/frame_data.py 第 634 行的 patch(将 load_image 返回值转为 Tensor),否则会报错。
Accelerate 库 patch:需要修改 accelerate/utils/operations.py 中的 recursively_apply 函数,添加对 PyTorch3D FrameData 对象的特殊处理,否则分布式训练时 FrameData 批量化会失败。
PVCNN 编译:运行前需要确保已安装 gcc 和 g++,否则 _pvcnn_backend C++ 扩展编译失败。
数据准备繁琐:需要手动下载 Co3Dv2 数据集并设置 CO3DV2_DATASET_ROOT 环境变量,下载量较大。
无容器化:没有提供 Dockerfile 或 conda 环境文件,完全依赖用户自行解决依赖问题,部署门槛较高。
PC² 的出现标志着扩散模型从图像生成走向三维重建的重要一步。与同期的 Score Jacobian Chaining(SJC)等方法相比,PC² 的投影条件化机制在几何一致性上表现更优,尤其在真实场景数据上有显著优势。该论文获得了 CVPR 2023 Highlight(仅约 4% 的投稿获得此荣誉),影响力可见一斑。
从工程角度看,项目作者将原始论文实现重构为基于 HuggingFace diffusers 库的标准架构,降低了学术复现的门槛,也为后续研究提供了良好的 baseline。
PC² 是单图三维重建领域的里程碑工作,代码工程化程度较高但缺乏开箱即用的部署支持。它代表了一个趋势:用 diffusion 模型的强大生成能力,解决三维视觉问题。对于希望深入了解 3D 生成或复现该工作的研究者和开发者,建议阅读论文原文,配合代码进行复现实验。