Zero123++:如何用一张照片快速生成 6 个一致视角(附完整上手步骤)
2026/8/29 21:08:42 网站建设 项目流程

Zero123++:如何用一张照片快速生成 6 个一致视角(附完整上手步骤)

【免费下载链接】zero123plusCode repository for Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model.项目地址: https://gitcode.com/gh_mirrors/ze/zero123plus

你盯着购物网站上那件心仪的商品,页面却只有一张正面照——它侧面长什么样?背面有没有细节?你完全猜不出来。过去想弄清这个问题,要么反复求商家多发图,要么老老实实学一套 3D 建模软件。而Zero123++这个开源项目,正在把这件事变成一句话:丢给它一张照片,几十秒后还给你 6 个彼此一致的视角,就像真的把物体转了一圈看了一遍。

先问一句:只有一张正面照,你甘心吗?

拍过产品图、画过角色设定、做过手办预览的人都有同感:一张图只能展示一个面,信息太少了。多角度展示曾经是专业团队的专利——要建模、要渲染、要花钱买软件。Zero123++ 想解决的就是这个"信息差":它是面向单张图像的多视角扩散基础模型,你给它一张图,它自己"脑补"出物体在三维空间里其他角度的样子,而且是一次性生成 6 个视角

一句话看懂:它到底做了什么

Zero123++ = 你只需投喂一张正方形照片,它就能在几十秒内生成 6 个相机位姿固定、内容一致的视角图。

下面这张图就是官方展示的多种物体多视角生成效果,从左到右、从上到下,每个物体都被"转"了一圈:

它的输出视角是一组固定相机位姿:方位角分别为 30°、90°、150°、210°、270°、330°(相对输入视角),相当于围绕物体转了一圈,每隔 60° 拍一张。v1.2 版本还把仰角调整为 20° 和 -10° 交替,输出视场角统一为 30°,更贴近人眼近距离看物体的真实感觉。

它凭什么好用:三个让你心动的理由

理由一:一张照片,6 个互相"对得上"的视角

解决什么问题:传统的单图生成,每个角度单独生成的话,容易出现"正面是红色、侧面变蓝色""花纹对不上"这类前后矛盾。

怎么解决:Zero123++ 不是逐个角度孤立生成,而是在一次推理里同时产出 6 个视图,模型内部保证它们共享同一套几何结构和材质特征,视角之间天然一致。

带来什么好处:你拿到的不再是 6 张"各说各话"的图,而是一组可以直接用来做展示、做 3D 重建素材的连贯视角。

理由二:输入不用太讲究,随手拍也能喂

解决什么问题:很多生成模型对输入图片挑剔得很,构图偏一点、视场角不对,结果就崩。

怎么解决:v1.2 版本对相机内参的处理更精细,对输入图像的视场角、裁剪方式都更鲁棒,输出视场角统一固定为 30°,模型始终按"归一化物体大小"来生成视角,而不是跟着输入忽大忽小。

带来什么好处:手机随手拍的产品照、网上存的商品图,裁成正方形就能用,省去了标定相机的麻烦。

理由三:装上即用,几行代码跑通全流程

解决什么问题:扩散模型的推理管线又长又绕,自己实现容易劝退新手。

怎么解决:项目为diffusers提供了自定义 pipeline(源码在 diffusers-support/pipeline.py),pip装好依赖后,加载模型、跑推理全部封装好了,不需要你写任何额外代码

带来什么好处:从零到出图的最短路径,甚至不需要深入理解扩散模型原理。

从 0 到 1:把一张汉堡照片变成 6 个视角

下面我们走一个具体任务:把一张汉堡的照片变成 6 个不同角度的展示图——这正是电商产品图最常见的需求。

第一步:准备一张合格的照片

先找到一张正方形的物体照片,分辨率建议不低于 320×320。图片可以直接用手机拍,也可以用现成的产品图,关键是物体在画面里尽量居中、完整。

硬件上,你需要一块 NVIDIA 显卡,基础生成约需5GB 显存。如果只有 CPU,也能跑,但速度会慢很多。

第二步:安装依赖,几分钟搞定

先把项目代码拉到本地,并安装核心依赖:

git clone https://gitcode.com/gh_mirrors/ze/zero123plus cd zero123plus pip install torch diffusers==0.20.2 transformers

这里推荐diffusers==0.20.2:项目的调度器参数timestep_spacing在旧版本里不被支持,版本太旧会出现明显的性能下降。如果你用的是 torch 1.x,建议再补装一个xformers来加速注意力计算。

第三步:写代码,跑起来

新建一个 Python 文件,粘贴下面的代码。它做的事就三件:加载预训练模型、读入你的图片、生成多视角结果。

import torch from PIL import Image from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler # 加载模型:custom_pipeline 指定了项目自带的推理逻辑,不用自己写 pipeline = DiffusionPipeline.from_pretrained( "sudo-ai/zero123plus-v1.1", custom_pipeline="sudo-ai/zero123plus-pipeline", torch_dtype=torch.float16 ) # 换用更合适的调度器,trailing 时间步能让结果更稳定 pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config( pipeline.scheduler.config, timestep_spacing='trailing' ) pipeline.to('cuda:0') # 换成你自己的图片 cond = Image.open("my_burger.jpg") # 推理步数:普通物体 28 步就够;细节多的图(如人脸)建议 75-100 步 result = pipeline(cond, num_inference_steps=75).images[0] result.save("output.png")

第一次运行会从 Hugging Face 下载模型权重,需要耐心等一会儿。跑完之后,output.png就是一张 6 宫格的多视角图——同一个汉堡的 6 个角度。

第四步:看到结果,再做一次"去背景"

注意一个细节:默认生成结果带着灰色背景,这是 Stable Diffusion VAE 的"零值"底色。如果想让物体抠出来、背景干净,多装一个rembg就能一行解决:

pip install rembg
import rembg result = rembg.remove(result) result.show()

到这里,一张干净的多视角展示图就完工了。下面是类似的汉堡生成效果,左列是写实风格,右列是赛博朋克风格,6 个视角的对齐程度一目了然:

另外提醒一句版权相关的真实情况:代码采用 Apache 2.0 许可,但模型权重是 CC-BY-NC 4.0,意味着模型本身不能放进商业产品管线;不过用它生成的图片可以自由使用,你需要对自己生成的内容负责。

新手最容易踩的 4 个坑(附正确姿势)

场景❌ 错误做法✅ 正确做法
输入图片直接丢一张长方形照片进去先裁成正方形,分辨率 ≥320×320,物体尽量居中
推理步数生成人像、手办等细节图只给 28 步普通物体 28 步;细节丰富的图给 75-100 步
输出结果拿到灰底图就直接用rembg.remove()去一次背景,得到透明底
依赖版本随便装个旧版 diffusers固定diffusers==0.20.2;torch 1.x 记得装 xformers

把它玩出花样:三个进阶玩法

玩法一:深度 ControlNet,让视角更"听话"

  • 适用人群:希望生成更可控、还需要深度信息的 3D 内容创作者
  • 效果:以深度图作为额外条件约束生成,多视角的几何关系更稳
  • 关键操作:加载sudo-ai/controlnet-zp11-depth-v1pipeline.add_controlnet(...),参考 examples/depth_controlnet.py,约需 5.7GB 显存
from diffusers import ControlNetModel pipeline.add_controlnet( ControlNetModel.from_pretrained("sudo-ai/controlnet-zp11-depth-v1", torch_dtype=torch.float16), conditioning_scale=0.75 ) result = pipeline(cond, depth_image=depth, num_inference_steps=36).images[0]

玩法二:法线生成器,拿到更干净的 3D 资产

  • 适用人群:做 3D 重建、对物体遮罩精度有要求的开发者
  • 效果:v1.2 新增的 normal ControlNet 能生成视图空间法线图像,用它得到的 alpha 遮罩比基于 SAM 的方法更精确(官方验证集上遮罩 IoU 达 98.81%)
  • 关键操作:使用 v1.2 模型 +sudo-ai/controlnet-zp12-normal-gen-v1,跑 examples/normal_gen.py,再用 examples/matting_postprocess.py 做后处理,输出colors.pngnormals.png

玩法三:不写代码,浏览器里直接玩

  • 适用人群:设计师、普通用户等不想碰代码的人
  • 效果:上传图片、调参数、看结果,全程可视化
  • 关键操作pip install -r requirements.txt后,运行streamlit run app.py;或直接python gradio_app.py打开 Gradio 界面

像下面这种"幽灵吃汉堡"的脑洞场景,也是它信手拈来的作品——草图和概念图喂进去,马上就有多视角预览可以看:

现在,轮到你了

看到这里,你已经掌握了 Zero123++ 的核心用法:一张正方形照片,装上依赖,跑几行代码,就能得到 6 个一致视角,还能用 ControlNet 玩出深度、法线等进阶花样。整个过程不需要建模基础,也不需要理解扩散模型内部原理。

下一步行动:现在就找一件手边的物体——马克杯、键盘、手办都行——给它拍一张正方形的正面照,按上面的步骤跑一遍,亲眼看看那 6 个视角是如何"长"出来的。第一次看到自己的照片被"转"起来的那一刻,你会觉得这一切都值得。动手吧,祝你玩得开心 🎨

【免费下载链接】zero123plusCode repository for Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model.项目地址: https://gitcode.com/gh_mirrors/ze/zero123plus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询