Zero123++ 实战指南:如何用一张照片生成 6 个视角的 3D 模型
【免费下载链接】zero123plusCode repository for Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model.项目地址: https://gitcode.com/gh_mirrors/ze/zero123plus
设想一个再常见不过的场景:你的店铺里只有一张产品正面照,顾客却总想知道背面和侧面长什么样;或者你给角色画了一张设定图,想快速看看它转到背后是什么效果。过去,这些需求意味着打开专业建模软件、花上几个小时甚至几天;而现在,一个开源项目让这件事变成了"上传一张图、等几十秒、得到 6 个视角"——它就是Zero123++,一个从单张图像生成一致多视角图像的扩散基础模型。
在这篇文章里,我会从"它到底能做什么"讲起,逐步带你用 3 分钟跑起来,再聊聊新手最容易踩的坑和几个进阶玩法。不堆术语,尽量说人话。
一张照片,真的能变出 6 个视角吗?先看效果
零基础也能看懂的一句话总结:Zero123++ 的输入是一张正方形图片,输出是同一物体在 6 个不同角度下的视图,而且 6 张图在风格、细节上高度一致,就像同一件事物被一台很稳的相机绕着拍了一圈。
下面这张图是项目主页的展示效果,从玩具、灯具到植物,每个物体都被"转"出了多个角度:
更具体一点:输出的 6 个视角,方位角固定为 30°、90°、150°、210°、270°、330°,相当于把物体放在转盘上,每转 60° 拍一张。最新的 v1.2 版本还把输出视场角统一为 30°,更贴近现实中近距离观察的透视感,生成结果也更适合直接喂给下游的 3D 重建流程。
它凭什么能做到?把"机位"写进扩散模型
你可以把 Zero123++ 想象成一位经验老到的摄影师:你只给它一张参考照片,它就自动判断"该站在哪些位置、用什么焦段、以什么俯仰角度拍摄",为你交出 6 张看起来像同一件事物的照片。
这里的底层技术是扩散模型(diffusion model,一种从随机噪声开始、一步步"雕"出图像的生成模型),但 Zero123++ 和普通的"新视角合成"思路很不一样:它从一开始就是按"3D 生成"设计的——假定物体尺寸是归一化的,输出固定的一组相机位姿,而不是随输入图片变化。这让它特别适合作为 3D 重建管线的前置模块。
值得一提的 v1.2 改进有两处:一是相机内参处理更精细,对输入图像视场角的各种裁剪更鲁棒,不再那么容易"翻车";二是仰角从原来的 30°/-20° 调整为 20°/-10°,配合 30° 统一视场角,还原了现实中近距离观看的真实观感。
3 分钟上手:不写代码也能跑起来的两种方式
先克隆项目并安装依赖,终端里执行:
git clone https://gitcode.com/gh_mirrors/ze/zero123plus cd zero123plus pip install -r requirements.txt然后二选一,挑顺手的用:
方式一:Gradio 网页界面(强烈推荐新手)
python gradio_app.py浏览器会自动打开一个图形界面:上传图片、勾选预处理选项、点击 Generate,6 个视角就会逐个显示出来。界面里还内置了示例图片,点一下就能立刻体验,连素材都不用自己准备。
方式二:Streamlit 界面
streamlit run app.py两种界面的体验大同小异,选哪种都行。硬件方面,只要你的电脑有 NVIDIA 显卡、显存约 5GB 以上,基本就能流畅运行。
三行代码调用 Zero123++:开发者最快上手路径
如果你想把它集成进自己的项目,更省事的做法是直接用 Python 调用。项目提供了基于 Diffusers 的自定义管道(源码在 diffusers-support/pipeline.py),加载模型、传入图片、得到结果,三步完成:
import torch from PIL import Image from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler # 1. 加载模型(首次运行会自动下载权重) pipeline = DiffusionPipeline.from_pretrained( "sudo-ai/zero123plus-v1.1", custom_pipeline="sudo-ai/zero123plus-pipeline", torch_dtype=torch.float16, ) pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config( pipeline.scheduler.config, timestep_spacing="trailing" ) pipeline.to("cuda") # 2. 准备一张正方形照片(建议分辨率不低于 320x320) cond = Image.open("my_object.png") # 3. 生成 6 个视角,保存为一张拼接图 result = pipeline(cond, num_inference_steps=75).images[0] result.save("multiview.png")几句大白话解释:
torch.float16是半精度模式,能显著降低显存占用;- 第 3 步的
num_inference_steps是采样步数,普通物体 28 步左右就够,人脸这类细节多的图建议 75~100 步; - 返回的是一张"多格拼接"的大图,里面装着 6 个视角。想拆成 6 张独立图片、或做背景移除,可以参考 gradio_app.py 里的处理逻辑。
完整的可运行示例在 examples/img_to_mv.py,直接python examples/img_to_mv.py就能跑通整个流程。
五个真实场景:Zero123++ 到底能帮你做什么
场景一:电商产品多角度展示
上传一张汉堡照片,立刻得到 6 个角度的视图,顾客不用再靠想象脑补"侧面长什么样"。下面这张图左侧就是生成的多视角结果,右侧是配套的法线图(法线图用来描述表面朝向,是 3D 领域常用的辅助信息):
场景二:创意插画与艺术创作
给插画师一个"会转的草稿"。下面这张"幽灵吃汉堡"就是典型玩法——先画一张概念图,再让 Zero123++ 生成不同视角,构图灵感立刻丰富起来:
场景三:二次元角色多视角预览
画师或模型师可以用它快速预览角色的各个角度,再决定要不要进入精细建模环节,省下大量返工时间:
场景四:3D 打印前的预览检查
打印前把实物照片转成多视角视图,提前发现结构缺陷,避免打印失败造成的材料浪费。
场景五:游戏与影视资产的快速原型
上传设定图或道具草图,立即获得多角度渲染预览,加速原型评审,不用干等完整模型做出来。
新手最容易踩的 5 个坑
- 输入不是正方形。模型要求正方形输入,推荐分辨率 ≥320x320。宽图或竖图要先居中补边成正方形再上传(gradio_app.py 里的
expand2square就是干这个的)。 - 以为灰色背景是 bug。默认输出带灰色背景,这是 Stable Diffusion VAE 的"零值"颜色,属于正常现象,不是生成失败。用
rembg一行就能抠掉:import rembg result = rembg.remove(result) - 步数盲目拉满。步数高不等于效果好:普通物体 28 步足够,人脸等精细细节才需要 75~100 步。步数越高,耗时越长,别做无用功。
- 显存不够就直接放弃。基础版约需 5GB 显存,加了深度 ControlNet 约 5.7GB。显存紧张时优先用半精度
float16,能省下不少空间。 - 忽略版本与许可。项目推荐
diffusers==0.20.2,旧版本可能掉性能;另外代码采用 Apache 2.0 许可,但模型权重是 CC-BY-NC 4.0——模型本身不能用于商用产品线,不过模型生成的输出图片可以自由使用。打算商用前,务必先确认这一点。
进阶玩法:深度图、法线图与一键抠图
如果觉得"6 个视角"还不够,Zero123++ 还有两条进阶链路:
深度 ControlNet:给每个视角加上深度信息
参考 examples/depth_controlnet.py,加载深度控制网络后可以生成带深度信息的图像,为后续重建提供空间线索:
from diffusers import ControlNetModel pipeline.add_controlnet(ControlNetModel.from_pretrained( "sudo-ai/controlnet-zp11-depth-v1", torch_dtype=torch.float16 ), conditioning_scale=0.75)法线生成器 + 抠图后处理:拿到更精准的遮罩
v1.2 新增了法线生成 ControlNet,能输出视图空间的法线图。相比常规抠图,用法线图估计 alpha 遮罩更准确(官方在验证集上的 alpha IoU 达到 98.81%)。一条龙流程可以参考 examples/normal_gen.py 和 examples/matting_postprocess.py。
文生图 → 图生多视角:从一句话到 6 个视角
如果你连参考图都没有,还可以先让 SDXL 按文字生成主体并抠图(见 examples/text_to_img.py),再交给 Zero123++ 转成多视角——等于把"文字 → 3D 预览"的路径也一并打通了。
结语:现在轮到你了
Zero123++ 的价值不在于替代建模师,而在于把"多视角预览"这件事的成本压到近乎为零:一张照片、几十秒、一次生成。无论你是想给商品补几张展示图,还是想给角色草图找找新角度,它都能立刻派上用场。
最好的上手方式,就是现在打开终端,从一张随手拍的日常物品照片开始。遇到问题也别慌:仓库的 Issues 区沉淀了大量同类问题的讨论,项目自带的 README 和 examples 目录几乎覆盖了所有官方用法——照着跑一遍,你就入门了。
祝你玩得开心,期待你生成的第一张多视角图!🎉
【免费下载链接】zero123plusCode repository for Zero123++: a Single Image to Consistent Multi-view Diffusion Base Model.项目地址: https://gitcode.com/gh_mirrors/ze/zero123plus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考