当前位置: 首页 > news >正文

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

实验目的

使用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管理大文件的扩展即可。

安装gitlfs的命令及解释如下:

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选项卡可见各种模型:
Hugging Face模型
搜索后可见该模型的详细界面,点击红框的三个点,和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 模型名								# 下载模型

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

生成库的使用

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

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")

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

对应输出和生成的图像如下:
1.4模型输出
宇航员骑马图
面部细节有些失真,马蹄也有点不统一,但是整体效果还可以。

总结

本文记录了diffuser库使用CompVis/stable-diffusion-v1-4模型生成图像的详细过程:
包括库和扩散生成的基本认识;
CompVis/stable-diffusion-v1-4模型下载;
diffuser库的使用和生成图像的示例代码。

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

相关文章:

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

实验目的 使用diffuser库生成图像的文章是很多的,使用方法也并不复杂,安装库后调用现成的模型和接口即可,但是因为网络原因,模型下载总会遇到问题,对于使用服务器的研究者来说,挂梯子并不可行,…...

递归—基础算法

#基线条件和递归条件 #每个递归函数都有两部分:基线条件和递归条件。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 #栈:栈是一种数据结构,它是一种线性数据结构&#xff0c…...

全面复习回顾——C++语法篇2

23、字符串相加 string s3;s3s1s2;cout<<s3; 24、结构体基本操作 struct student {// write your code here......string name;int age;double height0.0; };int main() {// write your code here......student s;cin>>s.name;cin>>s.age;cin>>s.hei…...

探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比

文章目录 三、算法在现代通信系统中的应用3.1 5G 通信中的应用3.1.1 信道编码与调制解调3.1.2 大规模 MIMO 技术3.1.3 案例分析&#xff1a;5G 基站与终端实现 3.2 卫星通信中的应用3.2.1 抗干扰与纠错编码3.2.2 信号处理与调制解调3.2.3 案例分析&#xff1a;卫星通信系统实例…...

Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴

注&#xff1a;本文为 “ Vim 中鼠标右键粘贴、跨系统复制粘贴问题解决方案” 相关文章合辑。 未整理去重。 Linux 入门&#xff1a;vim 鼠标不能右键粘贴、跨系统复制粘贴 foryouslgme 发布时间 2016 - 09 - 28 10:24:16 Vim 基础 命令模式&#xff08;command - mode&…...

无人机遥控器扩频技术解析!

一、扩频技术基本原理 扩频技术&#xff08;Spread Spectrum, SS&#xff09;通过将信号的频谱扩展至远大于原始带宽进行传输&#xff0c;提升抗干扰性、隐蔽性和多用户能力。其核心原理包括&#xff1a; 直接序列扩频&#xff08;DSSS&#xff09; 利用高速伪随机码&#x…...

Spring Boot API 项目中 HAProxy 与 Nginx 的选择与实践

在开发 Spring Boot 构建的 RESTful API 项目时&#xff0c;负载均衡和反向代理是提升性能与可用性的关键环节。HAProxy 和 Nginx 作为两种流行的工具&#xff0c;经常被用于流量分发&#xff0c;但它们各有侧重。究竟哪一个更适合你的 Spring Boot API 项目&#xff1f;本文将…...

OpenBMC:BmcWeb构造connect对象

OpenBMC:BmcWeb server.run-CSDN博客 server在接收了tcp连接请求后,会构造一个ConnectionType对象,然后通过post调度,运行该对象的start函数 1.ConnectionType类型 其实也就是using ConnectionType = Connection<Adaptor, Handler>;类型 由于ConnectionType实例化于…...

ORB-SLAM2源码学习(六):相机跟踪(局部地图跟踪和关键帧创建)

目录 1.局部地图跟踪 1.1 更新局部关键帧UpdateLocalKeyFrames 1.2 更新局部地图点&#xff08;来自局部关键帧&#xff09;UpdateLocalPoints() 1.3 投影匹配 2. 对比四种跟踪方式以及使用的投影匹配 3.关键帧创建 3.1 判断是否需要创建新关键帧: NeedNewKeyFrame() 3…...

WordPress使用(3)

前面文章讲述了如何利用docker进行wordpress系统的安装及相关设置&#xff0c;本文将介绍如何进行站点数据和数据库数据的备份。 1. 备份数据库 # 进入mysql容器内部 docker exec -it mysqlwp bash# 使用mysqldump 命令导出数据库 mysqldump -u root -p wordpress > wordp…...

Docker基础篇——什么是Docker与Docker的仓库、镜像、容器三大概念

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起了解下什么是Docker与与Docker的仓库、镜像、容器三大概念。 …...

Gitlab配置personal access token

1.点击左上角个人账号 -> Preferences 2. 点击左边栏 Access Tokens 3. 点击Add new token &#xff0c;输入token名称&#xff0c;勾选权限&#xff08;注意截至日期 “Expiration date” 可不填&#xff09; 4. 创建成功后&#xff0c;显示token信息&#xff0c;复制到本地…...

使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)

1.打开STM32CubeMX&#xff0c;点击File->New Project&#xff0c;新建一个新工程。 2.搜索芯片型号&#xff0c;选择正确的芯片封装规格&#xff0c;准备对芯片的引脚进行配置。 进行上面的操作后&#xff0c;跳转到如下的页面。 3.选择要配置的引脚进行配置。此处我的LED是…...

django中路由配置规则的详细说明

在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...

游戏引擎学习第138天

仓库:https://gitee.com/mrxiao_com/2d_game_3 资产&#xff1a;game_hero_test_assets_003.zip 发布 我们的目标是展示游戏运行时的完整过程&#xff0c;从像素渲染到不使用GPU的方式&#xff0c;我们自己编写了渲染器并完成了所有的工作。今天我们开始了一些新的内容&#…...

测试理论快速入门

软件测试的目的是什么 查出缺陷 查找程序的错误&#xff1a;测试功能是否可用&#xff0c;添加的功能是否成功添加实现 发现性能问题&#xff1a;查看响应速度是否在可接受范围内 找出兼容性问题&#xff1a;这个功能是否在多端都能成功使用&#xff0c;例如pc端和mo端 确保交…...

【PostgreSQL】如何免密使用PostgreSQL数据库内置工具

如何免密使用PostgreSQL数据库内置工具 方法 1&#xff1a;使用 .pgpass 文件自动输入密码步骤&#xff1a; 方法 2&#xff1a;使用环境变量 PGPASSWORD步骤&#xff1a; 我们在PostgreSQL数据库自带的各种工具时&#xff0c;每次使用都要输入数据库密码。比如在使用pg_dump 备…...

模块15.常用API

文章目录 模块15.常用API第一章.Math类1.Math类介绍2.Math类方法 第二章.BigInteger1.BigInteger介绍2.BigInteger使用 第三章.BigDecimal类1.BigDecimal介绍2.BigDecimal使用3.BigDecimal除法过时方法解决 第四章.Date日期类1.Date类的介绍2.Date类的使用3.Date类的常用方法 第…...

5c/c++内存管理

1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…...

python实现的可爱卸载动画

在逛掘金时&#xff0c;掘金用户在B站看到的灵感进行的一个卸载窗口的动画效果的实用案例。人类是一种不断在学习的动物&#xff0c;并且是一种模仿能力学习能里比较强的动物。我这里是第三波的学习实践者咯&#xff01; 相对VUE构建动画效果窗口&#xff0c;我更加喜欢用pytho…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...