一种从单张2D图像生成3D模型的有效损失函数,无需渲染
论文代码 | 论文
诺维萨德大学 剑桥大学
引用
除了AIAI 2021外,我们的论文还收录在Springer出版的名为"人工智能应用与创新"的书中:链接
如果您发现此代码对您的研究有用,请引用我们的论文。
@InProceedings{zubic_aiai_2021,
author="Zubi{\'{c}}, Nikola
and Li{\`o}, Pietro",
title="An Effective Loss Function for Generating 3D Models from Single 2D Image Without Rendering",
booktitle="Artificial Intelligence Applications and Innovations (AIAI)",
year="2021",
publisher="Springer International Publishing",
pages="309--322",
}
先决条件
- 下载代码:
使用以下命令克隆代码:
git clone https://github.com/NikolaZubic/2dimageto3dmodel.git
- 使用Conda环境(Python 3.7)打开项目
- 安装软件包:
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch
然后在根目录(2dimageto3dmodel)文件夹中克隆Kaolin库,使用以下提交,并运行以下命令:
cd kaolin
git checkout e7e513173b
python setup.py install
pip install --no-dependencies nuscenes-devkit opencv-python-headless scikit-learn joblib pyquaternion cachetools
pip install packaging
运行程序
从根目录/code/(2dimageto3dmodel/code/)目录运行以下命令:
python main.py --dataset cub --batch_size 16 --weights pretrained_weights_cub --save_results
用于CUB鸟类数据集。
python main.py --dataset p3d --batch_size 16 --weights pretrained_weights_p3d --save_results
用于Pascal 3D+数据集。
结果将保存在2dimageto3dmodel/code/results/
路径。
继续训练
要继续训练过程:
从根目录/code/(2dimageto3dmodel/code/)目录运行以下命令(不包括--save_results
):
python main.py --dataset cub --batch_size 16 --weights pretrained_weights_cub
用于CUB鸟类数据集。
python main.py --dataset p3d --batch_size 16 --weights pretrained_weights_p3d
用于Pascal 3D+数据集。
生成伪真实数据
在这些重建步骤中,我们需要一个经过训练的网格估计模型。我们可以使用预训练模型(已提供)或从头开始训练。CUB鸟类的伪真实数据按以下方式生成:
python run_reconstruction.py --name pretrained_reconstruction_cub --dataset cub --batch_size 10 --generate_pseudogt
对于Pascal 3D+数据集:
python run_reconstruction.py --name pretrained_reconstruction_p3d --dataset p3d --optimize_z0 --batch_size 10 --generate_pseudogt
通过这个,我们替换一个缓存目录,其中包含用于评估Frechet Inception距离的预计算统计数据、姿态和图像元数据,以及每个图像的伪真实数据。
从头开始训练网格生成器
按照上述部分设置伪真实数据,然后执行以下命令:
python main.py --name cub_512x512_class --conditional_class --dataset cub --gpu_ids 0,1,2,3 --batch_size 32 --epochs 1000 --tensorboard
在这里,我们训练一个基于类别标签条件的CUB鸟类模型,训练1000个周期。每20个周期,我们进行FID评估(可以通过--evaluate_freq
更改)。使用不同数量的GPU可能会产生略微不同的结果。Tensorboard允许我们将结果导出到Tensorboard的日志目录tensorboard_gan
。
训练后,我们可以使用以下命令找到最佳模型的检查点:
python main.py --name cub_512x512_class --conditional_class --dataset cub --gpu_ids 0,1,2,3 --batch_size 64 --evaluate --which_epoch best
网格估计模型训练
使用以下两个命令从头开始训练:
python run_reconstruction.py --name pretrained_reconstruction_cub --dataset cub --batch_size 50 --tensorboard
python run_reconstruction.py --name pretrained_reconstruction_p3d --dataset p3d --optimize_z0 --batch_size 50 --tensorboard
Tensorboard日志文件保存在tensorboard_recon
中。
许可证
MIT
致谢
这个想法是基于Insafutdinov & Dosovitskiy的架构构建的。
泊松表面重建用于点云到3D网格的转换。
GAN架构(用于纹理映射)是Xian的TextureGAN和Li的GAN的混合。