HarmonyView:协调单图像到 3D 的一致性和多样性
该存储库包含论文的官方 pytorch 实现:“HarmonyView:Harmonizing Consistency and Diversity in One-Image-to-3D”。在此存储库中,我们发布了具有新颖扩散采样技术的Syncdreamer改进版本的代码。
用于单图像转 3D 的 HarmonyView。HarmonyView 仅使用单个图像即可生成逼真的 3D 内容。它擅长在生成的视图中保持视觉和几何一致性,同时增强新颖视图的多样性,即使在复杂的场景中也是如此。
更新
- 2023.12.26:首次发布。
设置
- 请确保您的 gcc 版本高于 8。
conda create -n syncdreamer python=3.8
conda activate syncdreamer
pip install -r requirements.txt
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
pip install git+https://github.com/openai/CLIP.git
- 从这里下载 nvdiffrast 。然后,安装 nvdiffrast。
cd nvdiffrast
pip install -e .
cd ..
- 在此处下载 ViT-L-14 和syncdreamer-pretrain 的检查点。
- 确保您拥有以下型号。
HarmonyView
|-- ckpt
|-- ViT-L-14.ckpt
|-- syncdreamer-pretrain.ckpt
对图像集进行采样并生成网格
- 在此处下载用于训练 NeuS 的样本图像和日志。
- 确保您具有以下结构。
HarmonyView
|-- output_gso
|-- alarm
|-- backpack
|-- ...
|-- output_gso_renderer
|-- alarm-0-neus
|-- alarm-1-neus
|-- ...
- 或者,如果需要,您还可以对图像进行采样并训练 NeuS 以获得 3D 表面。
object_name="alarm backpack bell blocks chicken cream elephant grandfather grandmother hat leather lion lunch_bag mario
oil school_bus1 school_bus2 shoe shoe1 shoe2 shoe3 soap sofa sorter sorting_board stucking_cups teapot toaster train turtle"
SCALES1=2.0
SCALES2=1.0
NUM_SAMPLES=4
## Sample Images - Train NeuS - Export Mesh
for object in ${object_name}
do
python generate.py --ckpt ckpt/syncdreamer-pretrain.ckpt --sample_num ${NUM_SAMPLES} --cfg_scales ${SCALES1} ${SCALES2} --decomposed_sampling --input gso-eval/${object}/000.png --output output_gso/${object} --elevation 30 --crop_size -1
for id in $(seq ${NUM_SAMPLES})
do
python train_renderer.py -i output_gso/${object}/$((id-1)).png -n ${object}-$((id-1))-neus -b configs/neus.yaml -l output_gso_renderer
done
done
计算评估指标
- 评估 PSNR、SSIM、LPIPS、E_flow、倒角距离和体积 IoU。我们还提供了计算统计数据的代码。
object_name="alarm backpack bell blocks chicken cream elephant grandfather grandmother hat leather lion lunch_bag mario
oil school_bus1 school_bus2 shoe shoe1 shoe2 shoe3 soap sofa sorter sorting_board stucking_cups teapot toaster train turtle"
NUM_OBJECTS=30
NUM_SAMPLES=4
## Eval PSNR, SSIM, LPIPS, E_flow, Chamfer Distance, Volume IoU - Calculate Statistics
for object in ${object_name}
do
python eval_consistency.py --pr output_gso/${object} --gt gso-eval/${object} --name ${object} --num_samples ${NUM_SAMPLES}
python eval_nvs.py --gt gso-eval/${object} --pr output_gso/${object} --name ${object} --num_samples ${NUM_SAMPLES}
python eval_CD_score.py --pr output_gso/${object} --name ${object} --num_samples ${NUM_SAMPLES}
for id in $(seq ${NUM_SAMPLES})
do
python eval_mesh.py --pr_mesh output_gso_renderer/${object}-$((id-1))-neus/mesh.ply --gt_mesh gso-eval/${object}/model.obj --gt_name ${object}
done
done
python gso_nvs_statistics.py --log output_gso --num_samples ${NUM_SAMPLES} --num_objects ${NUM_OBJECTS}
python gso_mesh_statistics.py --log output_gso_renderer --num_samples ${NUM_SAMPLES} --num_objects ${NUM_OBJECTS}
- 请参阅示例脚本,了解如何重现我们的结果的详细说明。
你自己的图像
(可选)预处理
- 如果您的图像不包含 Alpha 通道,请将前景蒙版预测为 Alpha 通道。
python foreground_segment.py --input <image-file-to-input> --output <image-file-in-png-format-to-output>
采样不同的多视图图像。
python generate.py --ckpt ckpt/syncdreamer-pretrain.ckpt
--sample_num ${NUM_SAMPLES} --cfg_scales 2 1 --decomposed_sampling
--input <image-file-to-input> --output <output-folder-to-output>
--elevation ${elevation} --crop_size ${crop_size}
- 详细解释参见SyncDreamer。
--sample_num
:您想要生成多少个实例。--input
:您自己的图像的路径。--output
:输出文件夹的路径。--elevation
:输入图像的仰角(以度为单位)。--crop_size
:输入图像大小调整为256*256,对象大小调整为crop_size。
火车 纽斯
- 请选择一个好的生成图像集(我们提供了示例代码
0.png
)
python train_renderer.py -i <output-folder-to-output>/0.png -n neus -b configs/neus.yaml -l <output-folder-to-output>
致谢
该代码库借鉴了最著名的SyncDreamer和NeuS。非常感谢作者慷慨地分享他们的代码!
引文
如果您发现此存储库对您的项目有帮助,请考虑引用我们的工作。:)
@article{woo2023harmonyview,
title={HarmonyView: Harmonizing Consistency and Diversity in One-Image-to-3D},
author={Woo, Sangmin and Park, Byeongjun and Go, Hyojun and Kim, Jin-Young and Kim, Changick},
journal={arXiv preprint arXiv:2312.15980},
year={2023},
}