问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

diffuser库使用本地模型生成图像

创作时间:
作者:
@小白创作中心

diffuser库使用本地模型生成图像

引用
CSDN
1.
https://m.blog.csdn.net/weixin_46763552/article/details/146011860

本文详细介绍了如何使用diffuser库生成图像,重点记录了模型下载过程,包括git下载和镜像网站工具下载两种方法,并提供了详细的代码示例。

实验目的

使用diffuser库生成图像的文章是很多的,使用方法也并不复杂,安装库后调用现成的模型和接口即可,但是因为网络原因,模型下载总会遇到问题,对于使用服务器的研究者来说,挂梯子并不可行,而且现有的文章对这部分也语焉不详。故本文旨在记录一个更详细、完整、对新手友好的生图过程。

基本认识

扩散生成技术

扩散原本是热力学的概念,指分子无规则热运动而形成的物质传递现象,DDPM论文开天辟地地将扩散用于生成技术提高到了实际应用层面,该算法分为前向扩散和逆向生成两个过程:

前向扩散过程是向图像不断添加高斯噪声,直到原图完全变成噪声图像,将该过程序列与文本提示词一起输入网络进行训练。

逆向生成过程则是由训练好的网络根据噪声和提示词逐步猜测恢复出原图像的过程。

训练与生成算法的数学表示和生成过程如下图:

diffuser库

首先我们要了解一个开源生成模型——Stable Diffusion,该模型可以说是DDPM技术推动的产物,正如蒸汽机和蒸汽火车、发电机和电灯。该模型完全遵循 DDPM 的前向扩散 + 逆向生成框架,但通过潜在空间优化了计算效率。并且在 DDPM 的基础上引入 LDM、文本引导等技术,使其成为更实用、更强大的生成工具。

而diffuser库则是一个通用的扩散模型工具包,支持多种预训练扩散模型(如 Stable Diffusion、DALL-E、Imagen 等),并提供统一的 API 接口。

总的来说,

diffuser

库是封装了扩散生成模型,给开发者提供统一接口的生成模型库。

模型下载

按照官方示例直接跑会报一大串错误:

原因是服务器连接不上,而且模型很大,最好我们手动下载模型,相关文章对这部分只是一句带过:

模型很大不太好下

或者用

git 手动下载一下

,本文主要对该过程进行补充。

更详细的方法及比较可见快速下载Hugging Face模型,本文参考实现了简单可用的两种方法。

git下载

git

是分布式版本控制系统,可以理解为一个仓库存储了软件不同版本,方便恢复和拉取,在克隆过程中会将仓库的整个历史记录传输到客户端,具体操作可见git菜鸟教程。

Git LFS(Large File Storage)是一个用于Git版本控制系统的扩展,它专门用来管理大型文件,如图像、音频和视频文件。它通过延迟地(lazily)下载大文件的相关版本来减少大文件在仓库中的影响,具体来说,大文件是在

checkout

的过程中下载的,而不是

clone

fetch

过程中下载的(这意味着你在后台定时

fetch

远端仓库内容到本地时,并不会下载大文件内容,而是在你

checkout

到工作区的时候才会真正去下载大文件的内容)。

对目前来说简单将其理解为

git

管理大文件的扩展即可。

安装

git

lfs

的命令及解释如下:


sudo apt-get install git 	# 安装git
git --version 				# 查看git版本
mkdir git					# 创建文件夹,名称任意
cd git						# 进入文件夹
git init					# 初始化文件夹为git仓库 
git lfs install				# 查看lfs是否安装成功
有如下输出说明安装成功 
Updated git hooks.
Git LFS initialized.

首先进入Hugging Face官网,推荐使用国内镜像网站,点击model选项卡可见各种模型:

搜索后可见该模型的详细界面,点击红框的三个点,和

Clone

即可获得

git

命令,然后进入到我们先前初始化的

git

仓库即可拉取下载:

但是由于

git

的机制,拉取仓库时会拉取所有版本的内容,对网络和磁盘要求很高,详细教程也更推荐下面的方式。

镜像网站工具下载

镜像网站基于

aria2

开发了huggingface的专用下载工具,支持多现成下载,不断连,使用方法如下:


wget https://hf-mirror.com/hfd/hfd.sh		# 下载hfd
chmod a+x hfd.sh							# 授予权限
export HF_ENDPOINT=https://hf-mirror.com	# 设置环境变量
./hfd.sh 模型名								# 下载模型

启动下载后如下图所示:

下载完成后可以看到整个模型文件,还是比较大的,有二十多个G:

补充:需授权的模型下载

这步科学上网是免不了的,比如要下载目前最新的

stable-diffusion-3.5

,通过镜像网站可以看到该模型下载是需要

token

的:

该过程比较简单,镜像站中有教程,只要去

huggingface

网站注册账号后生成即可:

然后使用详细方法中的命令

./fhd.sh 模型名 --hf_username 用户名 --hf_token Token

即可下载,但直接使用该命令下载会报一串拒绝连接的错:

这步我怀疑是不是获取的

token

无效,最后使用终端输入

huggingface-cli login

登陆

huggingface

账号验证发现

token

是有效的:

最后记不清在哪看了个印象,需登陆的模型可能需要验证,到官网看了一下模型,确实需要申请:

填完申请以后再重新下载即可。

生成库的使用

前面下载好的模型放到项目目录下,生成的示例代码如下:


import torch
from diffusers import StableDiffusionPipeline
import time
# 定义管道和预训练模型,未下载的会自动下载, GPU RAM 少于 10GB,
# 加载 StableDiffusionPipeline 时使用 float16 精度,而不是的默认 float32 精度。
model_id = "CompVis/stable-diffusion-v1-4"
# 本地模型路径
model_path="./stable-diffusion-v1-4"
start = time.time()
print("正在加载模型...")
pipe = StableDiffusionPipeline.from_pretrained(model_path,
         revision="fp16", torch_dtype=torch.float16)
# 提示词
prompt = "a photograph of an astronaut riding a horse"
# 使用GPU
pipe.to("cuda")
print("正在生成图像...")
image = pipe(prompt).images[0]
end=time.time()
print("消耗时间为:",end-start)
# 保存图像
image.save(f"astronaut_rides_horse.png")

其他详细原理和操作可见官方文档,包括使用自训练模型,更改推理过程等,都可以通过继承不同的模块实现。

对应输出和生成的图像如下:

面部细节有些失真,马蹄也有点不统一,但是整体效果还可以。

总结

本文记录了

diffuser

库使用

CompVis/stable-diffusion-v1-4

模型生成图像的详细过程:

包括库和扩散生成的基本认识;

CompVis/stable-diffusion-v1-4

模型下载;

diffuser

库的使用和生成图像的示例代码。

这是手动生成图像的第一步,但也是关键一步,后续可以根据继承该模型的不同模块,调整参数和生成手段,达到自己想要的效果。

补充:

另外记录了如何使用镜像网站下载需验证模型的方法,官网登陆注册获取

token

以外,还需到模型页面看看是否需要单独填申请,这不说谁能知道,不得不承认这WALL提供了保护的同时对科学研究也确实造成了很大的不方便。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号