3D 机器学习课程文档

实践操作

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始入门

实践操作

Open In Colab

本实践操作的目标是构建一个文本到泼溅的管道,以 LGM (大型高斯模型) 为例。

这包括生成式 3D 管道的两个部分

  1. 多视角扩散
  2. 对机器学习友好的 3D (高斯泼溅)

设置

打开上面链接的 Colab 笔记本。点击 运行时 -> 更改运行时类型 并选择 GPU 作为硬件加速器。

然后,开始安装必要的依赖项

!pip install -r https://huggingface.co/spaces/dylanebert/LGM-mini/raw/main/requirements.txt
!pip install https://huggingface.co/spaces/dylanebert/LGM-mini/resolve/main/wheel/diff_gaussian_rasterization-0.0.0-cp310-cp310-linux_x86_64.whl

和之前一样,如果笔记本要求您重启会话,请执行重启,然后重新运行代码块。

加载模型

就像在多视角扩散笔记本中一样,加载预训练的多视角扩散模型

import torch
from diffusers import DiffusionPipeline

image_pipeline = DiffusionPipeline.from_pretrained(
    "dylanebert/multi-view-diffusion",
    custom_pipeline="dylanebert/multi-view-diffusion",
    torch_dtype=torch.float16,
    trust_remote_code=True,
).to("cuda")

这是因为多视角扩散是 LGM 管道的第一步。

然后,加载生成式高斯泼溅模型,这是 LGM 的主要贡献

splat_pipeline = DiffusionPipeline.from_pretrained(
    "dylanebert/LGM",
    custom_pipeline="dylanebert/LGM",
    torch_dtype=torch.float16,
    trust_remote_code=True,
).to("cuda")

加载图像

和之前一样,加载著名的猫雕像图像

import requests
from PIL import Image
from io import BytesIO

image_url = "https://huggingface.co/datasets/dylanebert/3d-arena/resolve/main/inputs/images/a_cat_statue.jpg"
response = requests.get(image_url)
image = Image.open(BytesIO(response.content))
image

运行管道

最后,将图像传递到两个管道中。输出将是一个泼溅数据矩阵,可以使用 splat_pipeline.save_ply() 保存。

import numpy as np
from google.colab import files

input_image = np.array(image, dtype=np.float32) / 255.
multi_view_images = image_pipeline("", input_image, guidance_scale=5, num_inference_steps=30, elevation=0)

Multi-view Cats

splat = splat_pipeline(multi_view_images)

output_path = "/tmp/output.ply"
splat_pipeline.save_ply(splat, output_path)
files.download(output_path)

这包括 files.download(),用于在 Colab 中运行笔记本时将文件下载到本地计算机。如果您在本地运行笔记本,则可以删除此行。

恭喜!您已运行 LGM 管道。

Gradio 演示

现在,让我们创建一个 Gradio 演示,以使用户友好的界面端到端地运行模型

import gradio as gr

def run(image):
    input_image = image.astype("float32") / 255.0
    images = image_pipeline("", input_image, guidance_scale=5, num_inference_steps=30, elevation=0)
    splat = splat_pipeline(images)
    output_path = "/tmp/output.ply"
    splat_pipeline.save_ply(splat, output_path)
    return output_path

demo = gr.Interface(fn=run, inputs="image", outputs=gr.Model3D())
demo.launch()

这将创建一个 Gradio 演示,它将图像作为输入并输出 3D 泼溅。

< > 在 GitHub 上更新