扩散模型Diffusers Pipeline API使用介绍
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有对应的论文。
| Pipeline | Source | Tasks |
|---|---|---|
| dance diffusion | Dance Diffusion | Unconditional Audio Generation |
| ddpm | Denoising Diffusion Probabilistic Models | Unconditional Image Generation |
| ddim | Denoising Diffusion Implicit Models | Unconditional Image Generation |
| latent_diffusion | High-Resolution Image Synthesis with Latent Diffusion Models | Text-to-Image Generation |
| latent_diffusion_uncond | High-Resolution Image Synthesis with Latent Diffusion Models | Unconditional Image Generation |
| pndm | Pseudo Numerical Methods for Diffusion Models on Manifolds | Unconditional Image Generation |
| score_sde_ve | Score-Based Generative Modeling through Stochastic Differential Equations | Unconditional Image Generation |
| score_sde_vp | Score-Based Generative Modeling through Stochastic Differential Equations | Unconditional Image Generation |
| stable_diffusion | Stable Diffusion | Text-to-Image Generation |
| stable_diffusion | Stable Diffusion | Image-to-Image Text-Guided Generation |
| stable_diffusion | Stable Diffusion | Text-Guided Image Inpainting |
| stochastic_karras_ve | Elucidating the Design Space of Diffusion-Based Generative Models | Unconditional Image Generation |
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
相关文章:
扩散模型Diffusers Pipeline API使用介绍
1 关于Diffusers Pipeline 1.1 简介 大部分扩散模型包含多个独立训练的子模型和组件模块组合而成,例如StableDiffusion 有: 3个独立训练的子模型:Autoencoder、 Conditional Unet、CLIP text encoder调度器组件scheduler,CLIPImageProcesso…...
el-date-picker 组件 监听输入的内容 并按照时间格式 格式化
这个时间选择组件在输入的时候是监听不到输入的值的,所以我们在外层再套个div,然后用获取焦点事件去操作dom 页面中 <div id"inParkingData"><el-date-pickerv-model"indateRange"size"small"value-format"…...
组件通信$refs | $parent |$root
父组件传值子组件用Props 子组件传值父组件用$emit 父组件直接还可以直接取子组件的值用$refs 父组件直接从子子组件中获取值$refs 不建议使用会增加组件之间的耦合度,一般用于第三方插件的封装 ref如果绑定在dom节点上,拿到的就是原生dom节点。 ref如…...
springboot中@Async的使用
1.AsyncAnnotationBeanPostProcessor是主要逻辑类 (1)AsyncAnnotationBeanPostProcessor实现BeanFactoryAware接口 在setBeanFactory(BeanFactory beanFactory)中初始化advisorAsyncAnnotationAdvisor() (2)AsyncAnnotationBeanPostProcessor实现BeanPostProcessor接口 在p…...
学C++从CMake学起
Cmake在此引入c17编译器,就可以使用c17的新特性了。 c17定义了一些算法,都定义在了下面这个头文件里。 #include <numeric> 通过redurce函数求和 将9行的std::plus{}换成std::times{}就是相乘。...
lv8 嵌入式开发-网络编程开发 20 域名解析与http服务实现原理
目录 1 域名解析 2 如何实现万维网服务器? 2.1 HTTP 的操作过程 2.2 万维网服务器实现 1 域名解析 域名解析gethostbyname函数 主机结构在 <netdb.h> 中定义如下: struct hostent {char *h_name; /* 官方域名 */char **h_alias…...
只要路由器有WPS按钮,佳能打印机连接到Wi-Fi网络的方法就很简单
佳能打印机是很好的设备,可以让你从智能手机、电脑或平板电脑打印照片。它们还提供其他功能,如扫描文档和复制图像。 最新的型号还允许你连接到Wi-Fi,因此你不需要使用电线将设备连接到打印机。 Wi-Fi是通过本地网络传输数据的标准方式。它…...
Cmake输出git内容方式
实现背景 在定位问题时,固件无法获取当前设备中版本的详细信息,无法准确获取版本具体内容 输出效果 实现方式 以下是基于Cmake的语法实现 在CMake中获取git信息,可以通过execute_process命令运行git命令并将结果保存在一个变量中。然后可…...
实现多余内容变成省略号
实现效果 代码 <p class"item-content">{{ item.content }}</p>样式 .item-content {white-space: nowrap;/* 禁止换行 */overflow: hidden;/* 隐藏溢出部分 */text-overflow: ellipsis;/* 使用省略号表示溢出部分 */ }...
WAL 模式(PostgreSQL 14 Internals翻译版)
性能 当服务器正常运行时,WAL文件不断被写入磁盘。但是,这些写操作是顺序的:几乎没有随机访问,因此即使是HDD也可以处理这个任务。由于这种类型的加载与典型的数据文件访问非常不同,因此有必要为WAL文件设置一个单独的物理存储&a…...
2023年信息科学与工程学院学生科协第二次软件培训
2023年信息科学与工程学院学生科协第二次软件培训 文章目录 2023年信息科学与工程学院学生科协第二次软件培训一维数组数组的概念定义格式一维数组的访问例题:练习题: 数组元素数量一维数组的初始化 二维数组定义格式二维数组的访问二维数组的存储结构二…...
渗透测试tomcat错误信息泄露解决办法
解决方法: 1、使用tomcat8.5.16,会重定向非法url到登录url 2、配置server.xml,加上 <Valve className"org.apache.catalina.valves.ErrorReportValve" showReport"false" showServerInfo"false" />配置…...
notes_NLP
RNN > LSTM, GRU model特点RNNLSTMinputforgetputput;GRUresetupdate;参数比LSTM少,计算效率更高; 循环神经网络(RNN/LSTM/GRU) 人人都能看懂的GRU transformer > self-attention 根据Query和Key计…...
内存分段、分页
大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。 前言 每个进程都有一套自己的虚拟地址,尽管进程可能有相同的虚拟地址,…...
Python-pptx教程之一从零开始生成PPT文件
简介 python-pptx是一个用于创建、读取和更新PowerPoint(.pptx)文件的python库。 典型的用途是根据动态内容(如数据库查询、分析数据等),将这些内容自动化生成PowerPoint演示文稿,将数据可视化,…...
k8s 使用ingress-nginx访问集群内部应用
k8s搭建和部署应用完成后,可以通过NodePort,Loadbalancer,Ingress方式将应用端口暴露到集群外部,提供外部访问。 缺点: NodePort占用端口,大量暴露端口非常不安全,并且有端口数量限制【不推荐】…...
企业数据泄露怎么办?
随着数字化时代的到来,威胁企业数据安全的因素越来越多。一旦机密数据泄露,不仅会对企业造成巨大的经济损失,还会对企业的声誉和客户信任度造成严重影响。发生数据泄露情况时,企业该怎样应对? 1.确认数据泄露 确认是…...
GoLong的学习之路(一)语法之变量与常量
目录 GoLang变量批量声明变量的初始化类型推导短变量声明匿名变量 常量iota(特殊)(需要重点记忆) GoLang go的诞生为了解决在21世纪多核和网络化环境越来越复杂的变成问题而发明的Go语言。 go语言是从Ken Thomepson发明的B语言和…...
Go-Python-Java-C-LeetCode高分解法-第十一周合集
前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C 欢迎订阅CSDN专栏,每日一题,和博主一起进步 LeetCode专栏 我搜集到了50道精选题,适合速成概览大部分常用算法 突…...
封装axios的两种方式
作为前端工程师,经常需要对axios进行封装以满足复用的目的。在不同的前端项目中使用相同的axios封装有利于保持一致性,有利于数据之间的传递和处理。本文提供两种对axios进行封装的思路。 1. 将请求方式作为调用参数传递进来 首先导入了axios, AxiosIn…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
