(本文将围绕 安装Diffusers库及其依赖、理解Diffusers核心概念:Pipeline, Model, Scheduler 、使用预训练模型进行推理(文生图、图生图等) 、 自定义模型和调度器 、训练自己的扩散模型(可选,需要大量资源)、以及高级应用:ControlNet、LoRA等进行展开)

官网链接:huggingface

镜像链接:mirror

一、安装Diffusers库

Diffusers 已在 Python 3.8+、PyTorch 1.7.0+ 和 Flax 上进行了测试。请按照以下适用于您正在使用的 Deep Learning Library 的安装说明进行作:

# 使用 conda 安装
# 激活虚拟环境后,使用 (由社区维护):conda
conda install -c conda-forge diffusers
# 从源码安装
# 在从源安装 🤗 Diffusers 之前,请确保您已安装 PyTorch 和 🤗 Accelerate。
# 要安装 🤗 Accelerate:
pip install accelerate
# 然后从源码安装 🤗 Diffusers:
pip install git+https://github.com/huggingface/diffusers可编辑安装
git clone https://github.com/huggingface/diffusers.git
cd diffusers克隆更新到最新版本的 🤗 Diffusers:
cd ~/diffusers/
git pull

      此命令将安装最前沿版本,而不是最新版本。 该版本有助于及时了解最新发展。 例如,如果自上次正式发布以来已修复错误,但尚未推出新版本。 但是,这意味着版本可能并不总是稳定的。 我们努力保持版本可运行,大多数问题通常会在几小时或一天内得到解决。 如果您遇到问题,请打开https://github.com/huggingface/diffusers/issues/new/choose

二、模型文件和布局

     扩散模型以各种文件类型保存,并按不同的布局进行组织。Diffusers 将模型权重作为 safetensors 文件存储在 Diffusers-multifolder 布局中,它还支持从 diffusion 生态系统中常用的单文件布局加载文件(如 safetensors 和 ckpt 文件)。每种布局都有自己的优点和用例,本指南将向您展示如何加载不同的文件和布局,以及如何转换它们。

1. Safetensors 库

Safetensors 是一种安全快速的文件格式,用于安全地存储和加载张量。Safetensors 限制 header 大小以限制某些类型的攻击,支持延迟加载(对分布式设置很有用),并且通常具有更快的加载速度。

# 确保已安装 Safetensors 库。
!pip install safetensors

     Diffusers 库是 Hugging Face 官方开发的 开源 Python 库,专门用于简化扩散模型(Diffusion Models)的部署与应用。

  1. Diffusers-multifolder 布局:可能有几个单独的 safetensors 文件,每个管道组件(文本编码器、UNet、VAE)一个,组织在子文件夹中(查看 stable-diffusion-v1-5/stable-diffusion-v1-5 存储库作为示例)
  2. 单文件布局:所有模型权重都可以保存在一个文件中(查看 WarriorMama777/OrangeMixs 存储库作为示例)

2.LoRA 文件

LoRA 是一种轻量级适配器,训练快速且易于,因此在以某种方式或样式生成图像方面特别受欢迎。这些适配器通常存储在 safetensors 文件中,并且在 civitai 等模型共享平台上广泛流行。LoRA 使用 load_lora_weights() 方法加载到基础模型中。

from diffusers import StableDiffusionXLPipeline
import torch# base model
pipeline = StableDiffusionXLPipeline.from_pretrained("Lykon/dreamshaper-xl-1-0", torch_dtype=torch.float16, variant="fp16"
).to("cuda")# download LoRA weights
!wget https://civitai.com/api/download/models/168776 -O blueprintify.safetensors# load LoRA weights
pipeline.load_lora_weights(".", weight_name="blueprintify.safetensors")
prompt = "bl3uprint, a highly detailed blueprint of the empire state building, explaining how to build all parts, many txt, blueprint grid backdrop"
negative_prompt = "lowres, cropped, worst quality, low quality, normal quality, artifacts, signature, watermark, username, blurry, more than one bridge, bad architecture"image = pipeline(prompt=prompt,negative_prompt=negative_prompt,generator=torch.manual_seed(0),
).images[0]
image

 3.CKPT

PyTorch 的 torch.save 函数使用 Python 的 pickle 实用程序来序列化和保存模型。这些文件保存为 ckpt 文件,并且包含整个模型的权重。

使用 from_single_file() 方法直接加载 ckpt 文件。

from diffusers import StableDiffusionPipelinepipeline = StableDiffusionPipeline.from_single_file("https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned.ckpt"
)

4.存储布局

有两种方式组织模型文件,一种是 Diffusers-multifolder 布局,另一种是单文件布局。Diffusers-multifolder 布局是默认布局,每个组件文件(文本编码器、UNet、VAE)都存储在单独的子文件夹中。Diffusers 还支持从单文件布局加载模型,其中所有组件都捆绑在一起。

Diffusers-multifolder

Diffusers-multifolder 布局是 Diffusers 的默认存储布局。每个组件(文本编码器、UNet、VAE)的权重都存储在单独的子文件夹中。权重可以存储为 safetensors 或 ckpt 文件。

要从 Diffusers-multifolder 布局加载,请使用 from_pretrained() 方法。

from diffusers import DiffusionPipelinepipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0",torch_dtype=torch.float16,variant="fp16",use_safetensors=True,
).to("cuda")

使用 Diffusers-multifolder 布局的好处包括:

  1. 单独或并行加载每个组件文件的速度更快。

  2. 减少了内存使用量,因为您只加载了所需的组件。例如,SDXL Turbo、SDXL Lightning 和 Hyper-SD 等型号除 UNet 外具有相同的组件。您可以使用 from_pipe() 方法重用它们的共享组件,而无需消耗任何额外的内存(请查看 重用管道指南),并且只加载 UNet。这样,您就不需要下载冗余组件,也无需不必要地使用更多内存。

import torch
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler# download one model
sdxl_pipeline = StableDiffusionXLPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0",torch_dtype=torch.float16,variant="fp16",use_safetensors=True,
).to("cuda")# switch UNet for another model
unet = UNet2DConditionModel.from_pretrained("stabilityai/sdxl-turbo",subfolder="unet",torch_dtype=torch.float16,variant="fp16",use_safetensors=True
)
# reuse all the same components in new model except for the UNet
turbo_pipeline = StableDiffusionXLPipeline.from_pipe(sdxl_pipeline, unet=unet,
).to("cuda")
turbo_pipeline.scheduler = EulerDiscreteScheduler.from_config(turbo_pipeline.scheduler.config,timestep+spacing="trailing"
)
image = turbo_pipeline("an astronaut riding a unicorn on mars",num_inference_steps=1,guidance_scale=0.0,
).images[0]
image

三、 理解Diffusers核心概念

Pipeline, Model, Scheduler

 核心功能全景

功能实例代码示例
文生图输入“星空下的城堡” → 生成高清图像pipe("星空下的城堡").images[0]
图生图将照片转为梵高风格pipe(image=输入图, prompt="梵高风格")
图像修复智能补全破损老照片inpaint_pipeline(mask=蒙版, image=原图)
视频生成生成 3 秒动画片段video_pipe("跳舞的机器人", num_frames=24)
音频合成文本转自然语音audio_pipe("你好,世界", output_type="mp3")

  核心概念速查表

概念说明代码示例
Pipeline端到端生成流程StableDiffusionPipeline
Scheduler控制扩散过程EulerDiscreteScheduler
Model核心神经网络UNet2DConditionModel
VAE图像编码/解码AutoencoderKL
Tokenizer文本处理CLIPTokenizer

3. 使用预训练模型进行推理(文生图、图生图等)

4. 自定义模型和调度器

5. 训练自己的扩散模型(可选,需要大量资源)

6. 高级应用:ControlNet、LoRA等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912672.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912672.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912672.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VPC技术】基础理论篇

文章目录 概述相关基础核心知识软件定义网络SDNOverlay 技术 安全组概述 参考博客 😊点此到文末惊喜↩︎ 概述 相关基础 基本概念 虚拟私有云VPC:是一个隔离的网络环境,每个VPC拥有专属的IP地址范围(CIDR)、路由表、…

在 RK3588 Ubuntu 上编译 eglinfo:全流程实战 + 常见报错修复

dv1/eglinfo 是一个开源的 EGL 信息检测工具,广泛用于 OpenGL ES 图形栈调试、驱动验证和嵌入式平台图形支持排查。在 Rockchip RK3588 上编译该工具可以协助我们确认 EGL DRM 是否配置正确,尤其在无窗口系统(如 eglfs、framebuffer&#xf…

开源推荐:基于前后端分离架构的WMS仓储管理系统

开源推荐:基于前后端分离架构的WMS仓储管理系统 🔥 在线演示地址:https://tob.toolxq.com/wms/wms.html 点击上方链接可直接体验系统功能和界面,无需安装部署 前言 在企业数字化转型的浪潮中,仓储管理系统&#xff08…

Redis中List类型常见的操作命令有哪些?

Redis中List类型是一个字符串列表,这里是一些常见的命令: 1)lpush:将一个或多个值插入到列表头部。列表不存在,一个新的列表会被创建。 2)rpush:将一个或多个值插入到列表尾部。 3)lpop:移除并返回列表头…

mac重复文件清理,摄影师同款清理方案

摄影师小林盯着屏幕上的警告:“存储空间不足”,离截稿只剩3小时。她的MacBook如同塞满回忆的阁楼,128GB的“其他”空间神秘消失。翻看照片库时,她惊讶地发现——同一组西藏雪山照片竟有十几个副本!这是mac重复文件问题…

lua脚本为什么能保证原子性

Redis 处理客户端请求是基于单线程模型的( Redis 6.0 开始引入了多线程处理网络 IO,但命令执行仍然是单线程的)。这意味着,在任意时刻 Redis 只会执行一个命令或脚本。这种单线程特性确保了当 Redis 在执行一个 Lua 脚本时&#x…

爬虫详解:Aipy打造自动抓取代理工具

一、爬虫的本质与核心功能 爬虫是一种通过编写程序自动抓取互联网公开数据的技术工具,其核心流程包括: 模拟浏览器行为:发送 HTTP 请求访问目标网页解析页面结构:提取 HTML/XML 中的关键信息(如文本、链接、图片&…

Leetcode百题斩-栈

终于来到了栈专题,想想之前来阿里的时候就是面试了一道栈最终通过了终面,也是十分怀念了。 739. Daily Temperatures[Medium] 思路:这就是最典型的单调栈问题了。从后向前维护下一个更大值或者下一个更大值的位置。 可以看一下当年面阿里时…

PIXHAWK(ardupilot4.52)NMEA的解析bug

最近在测试过程中发现在椭球高为负的地方,地面站读取GPS_RAW_INT (24)消息中的alt高度竟然是正值。而消息中定义的alt并不是一个unsigned数据,理论上是带有正负符号的。 查看gga的原始信息: $GPGGA,063718.40,3714.8533856,N,11845.9411766,…

Linux容器讲解以及对应软件使用

一、容器基础知识讲解 1.1 微服务的部署策略 部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N)服务器(物理机或虚拟 机),在每台服务器上运行若干个(M)应用实例。部…

企业级应用技术-ELK日志分析系统

目录 #1.1ELK平台介绍 1.1.1ELK概述 1.1.2Elasticsearch 1.1.3Logstash 1.1.4Kibana #2.1部署ES群集 2.1.1基本配置 2.1.2安装Elasticsearch 2.1.3安装Logstash 2.1.4Filebeat 2.1.5安装Kibana 1.1ELK平台介绍 1.1.1ELK概述 ELK 是三个开源工具的缩写,分别是Elas…

Shiro漏洞复现

Shiro简介 Apache Shiro是一种功能强大且易于使用的Java安全框架,它执行身份验证、授权、 加密和会话管理,可用于保护任何应用程序的安全。 Shiro提供了应用程序安全性API来执行以下方面: 1.身份验证:证明用户身份,通…

VSCode 中使用 Google Test(GTest)框架测试

VSCode 中使用 Google Test(GTest)框架在 VSCode 中对 C 代码进行测试的示例: 一、Unbutu x86使用gtest 环境配置 安装 GTest :在 Ubuntu 系统中,可以通过命令sudo apt-get install libgtest-dev安装 GTest 库。对于…

【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】

1.6 漫画数据库设计实战 - 从零开始设计高性能数据库 🎯 学习目标 掌握数据库表结构设计原则理解字段类型选择与优化学会雪花算法ID生成策略掌握索引设计与优化技巧了解分库分表设计方案 📖 故事开始 小明: “老王,我总是不知道怎么设计数…

OSPF虚拟链路术语一览:快速掌握网络路由

大家好,这里是G-LAB IT实验室。今天带大家了解一下OSPF的相关知识! 01 OSPF虚拟链路术语大全 网络架构中,OSPF(开放式最短路径优先)是一种重要的路由协议。通过其链路状态路由机制,OSPF能够有效维护和更新…

oracle常用的函数(一) 之 to_char、to_date

文章目录 前言to_char基本语法格式模型格式模型介绍无FM示例使用FM输出货币负数输出尖括号 将日期格式化将数字格式化为带有货币符号和千位分隔符的格式总结 to_date语法语法示例 戳这里,第二弹 → oracle常用的函数(二) 之 nvl、decode、l…

数据库服务器宕机的处理方法与实战策略

在当今数字化时代,数据库作为企业数据存储与管理的核心,承载着业务运行的关键信息。一旦数据库服务器宕机,将导致业务中断、数据丢失等严重后果,甚至可能给企业带来巨大的经济损失和声誉损害。因此,掌握一套系统、科学的数据库服务器宕机处理方法尤为重要。本文将从应急响…

如何hack边缘的kubelet修改Cgroup数值

之前做了一个VPA项目的需求,就是需要不重启的方式修改容器的Cgroup的值已达到垂直扩缩容的目的,项目中核心的思路如下 上游下发要VPA的结果的值写入到容器的Annotation里面Kubelet 感知到这个 annoation 的变化我们本地运行一个 Agent,里面运…

熟悉 PyCharm

界面 我们常用的就这个几个地方: 常用配置 调整字体大小 Ctrl 滚轮调整字体大小 插件推荐 Indent Rainbow 该插件的作用在于能够对于不同层级缩进的空格标注不同的颜色: 快捷键 快捷键的 pdf 下载链接: Windows 版:https:…

pytorch--模型训练的一般流程

文章目录 前言0、数据集准备1、数据集2、dataset3、model4、训练模型 前言 在pytorch中模型训练一般分为以下几个步骤: 0、数据集准备 1、数据集读取(dataset模块) 2、数据集转换为tensor(dataloader模块) 3、定义模型…