已解决
扩散模型Diffusers Pipeline API使用介绍
来自网友在路上 174874提问 提问时间:2023-10-25 04:54:01阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
1 关于Diffusers Pipeline
1.1 简介
大部分扩散模型包含多个独立训练的子模型和组件模块组合而成,例如StableDiffusion 有:
- 3个独立训练的子模型:Autoencoder、 Conditional Unet、CLIP text encoder
- 调度器组件scheduler,
- CLIPImageProcessor,
- safety checker.
为了让开发者以最简单的方式使用最新最先进的扩散模型,diffusers
开发了pipeline
管理和使用这些类,使得开发者可以以端对端方式使用扩散模型。
注意:pipeline本身没有提供任何训练相关功能,如果想要实现训练,可以参考官方的训练样例
1.2 官方Pipeline
以下表格是diffusers官方实现的Pipeline,每个Pipeline有对应的论文。
2 Pipeline API接口
扩散模型包含多个独立的模型和组件,不同任务中模型独立训练,并且可以用其他模型替换。不同的Pipeline可能包含专有的函数接口,但所有Pipeline都有的共同函数如下:
- from_pretrained(cls, pretrained_model_name_or_path, **kwargs): 参数
pretrained_model_name_or_path
可以是Hugging Face Hub repository
的 id, 例如: runwayml/stable-diffusion-v1-5 或本地路径:"./stable-diffusion"
. 为了确保所有模型和组件能被正确加载,需要提供一个model_index.json
文件, 例如: runwayml/stable-diffusion-v1-5/model_index.json, 这个文件定义了所有要被加载的组件。其格式如下:<name>: ["<library>", "<class name>"]
,其中<name>
是类<class name>
实例的名称。此类可以在库"<library>"
中加载到。 - save_pretrained(self, save_directory) : 参数save_directory为本地目录路径,例如:
./stable-diffusion
,所有的模型和组件会被保存。每个模型和组件创建一个对应的子目录,子目录名称为模型或组件的属性名称如./stable_diffusion/unet
. 此外,还会再根目录创建model_index.json
文件如:./stable_diffusion/model_index.json
- to(self, torch_device: Optional[Union[str, torch.device]] = None) 参数torch_device为
string
或torch.device
类型,将所有torch.nn.Module
类型的对象转移到指定的device上,此函数与pytorch的to函数功能一致。 __call__
函数执行推理,此函数定义了pipeline的推理逻辑,不同的Pipeline对应的推理输入差别很大,例如文生图PipelineStableDiffusionPipeline
的输入应该是文本prompt,输出是生成的图。 而DDPMPipeline 则无需提供任何输入。因此读者需要根据实际的Pipeline功能以及查看相应的官方文档使用。
注意: 所有的Pipeline的
__call__
函数会自动调用torch.no_grad
函数禁用梯度,因为Pipeline不是用于训练。如果你在前向推理后有保存梯度的需求,可以自定义Pipeline,参考官方示例
3 使用示例
1 扩散模型:文生图
# make sure you're logged in with `huggingface-cli login`
from diffusers import StableDiffusionPipeline, LMSDiscreteSchedulerpipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
pipe = pipe.to("cuda")prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0] image.save("astronaut_rides_horse.png")
2 扩散模型:图生图
类StableDiffusionImg2ImgPipeline
接受一个文本prompt和初始图片作为条件,指导生成新图。
import requests
from PIL import Image
from io import BytesIOfrom diffusers import StableDiffusionImg2ImgPipeline# load the pipeline
device = "cuda"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5",torch_dtype=torch.float16,
).to(device)# let's download an initial image
url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((768, 512))prompt = "A fantasy landscape, trending on artstation"images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).imagesimages[0].save("fantasy_landscape.png")
可以在colab
中直接运行colab
3 扩充模型:In-painting
类 StableDiffusionInpaintPipeline
接受文本prompt和mask,用于编辑图像指定区域。
import PIL
import requests
import torch
from io import BytesIOfrom diffusers import StableDiffusionInpaintPipelinedef download_image(url):response = requests.get(url)return PIL.Image.open(BytesIO(response.content)).convert("RGB")img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"init_image = download_image(img_url).resize((512, 512))
mask_image = download_image(mask_url).resize((512, 512))pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting",torch_dtype=torch.float16,
)
pipe = pipe.to("cuda")prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
image = pipe(prompt=prompt, image=init_image, mask_image=mask_image).images[0]
可以在colab
中直接运行 colab
查看全文
99%的人还看了
相似问题
- 最新AIGC创作系统ChatGPT系统源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图,图片对话理解功能
- 思维模型 等待效应
- FinGPT:金融垂类大模型架构
- 人工智能基础_机器学习044_使用逻辑回归模型计算逻辑回归概率_以及_逻辑回归代码实现与手动计算概率对比---人工智能工作笔记0084
- Pytorch完整的模型训练套路
- Doris数据模型的选择建议(十三)
- python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
- ChatGLM2 大模型微调过程中遇到的一些坑及解决方法(更新中)
- Python实现WOA智能鲸鱼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
- 扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件
猜你感兴趣
版权申明
本文"扩散模型Diffusers Pipeline API使用介绍":http://eshow365.cn/6-23913-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 前端在项目中添加自己的功能页面
- 下一篇: 【软件安装】Linux系统中安装MySQL数据库服务