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},
}