首页 > 其他分享 >2024不可不会的StableDiffusion(一)

2024不可不会的StableDiffusion(一)

时间:2024-01-27 11:00:44浏览次数:38  
标签:diffusion 不可 图像 我们 2024 stable StableDiffusion 模型 SD

1. 引言

这是我在学习 StableDiffusion (稳定扩散模型 简称SD)的第一篇入门文章,主要用于介绍稳定扩散模型和该领域的其他研究。在本文中,我想简要介绍一下如何使用Diffuser扩散库,来创建自己生成图像。下一篇文章,我们将深入研究这个库的各级组件。 闲话少说,我们直接开始吧!


2. SD功能介绍

简单来说,稳定扩散模型是一种可以在给定文本提示词的情况下生成图像的深度学习模型。将其进行抽象,其主要实现的功能如下:

2024不可不会的StableDiffusion(一)_扩散模型

正如我们从上面的图像中看到的那样,我们可以传递一个输入的文本提示,如“戴帽子的狗”,此时稳定的扩散模型可以生成代表文本语义的图像。是不是很神奇?


3. 准备工作

在开始之前,我们首先来安装我们必要的python库,使用以下命令进行安装:

pip install --upgrade diffusers transformers

如果联网环境下,一般使用huggingface_hub 来在线下载相应的模型权重,考虑到受限于网络原因、,加之这些生成式模型又多又大,不绿色上网的话,速度超级感人,不得不吐槽下。基于上述原因,建议将其下载到本地进行操作,同时推荐一个国内的镜像源网站,网址链接,速度嘎嘎快:

这里我们下载模型 CompVis/stable-diffusion-v1-4 ,如下:

2024不可不会的StableDiffusion(一)_生成式AI_02

下载上述文件到本地任意目录即可,当然也可以下载最火的runwayml/stable-diffusion-v1-5,原理类似,不在累述。


4. 运行DEMO

首先第一步工作就是从Diffuser库中,导入我们文生图的Pipeline,代码如下:

from diffusers import StableDiffusionPipeline

接下来我们来初始化我们的Pipeline。由于之前我们已经将模型从线上服务器下载到本地机器。此时我们需要一台GPU机器来能运行以下初始化代码。

sd_path = r'/media/stable_diffusion/CompVis/stable-diffusion-v1-4'
pipe = StableDiffusionPipeline.from_pretrained(sd_path,local_files_only=True,
                                                torch_dtype=torch.float16).to('cuda')

由于我们是加载本地模型,所以我们将参数local_files_only设置为True。现在我们可以传递一个文本提示来生成一个图像了,代码如下:

prompt = 'a dog wearing hat'
img = pipe(prompt).images[0]
plt.imshow(img)
plt.show()

得到结果如下:

2024不可不会的StableDiffusion(一)_文生图_03

可以看到,生成的图像还是很逼真的。


5. 小结

本文重点介绍了StableDiffusion的相关功能以及使用diffusers库来进行相应的文生图的实现,同时介绍了如何离线跑SD模型。在接下来的文章里,我们会将重点放在将SD模型拆成各个组件,来依次介绍每个组件的核心原理和具体功能。

嗯嗯,您学废了嘛!


6. 参考链接

本文涉及的相关参考链接如下:

[1] huggingface戳我

[2] huggingface镜像站戳我

[3] Diffusers官方文档: 戳我

标签:diffusion,不可,图像,我们,2024,stable,StableDiffusion,模型,SD
From: https://blog.51cto.com/u_15506603/9442625

相关文章

  • MFC 菜单路由事件,按钮可用不可用
    点击b会切换a可用状态:添加Menu选项a对应IDID_DEMO_A,b对应IDID_DEMO_B。弹式菜单无法编辑ID。▲右键添加事件处理程序▲路由传递路径frame给到view如果view处理好了,就返回给frame;如果没处理的话,view会给这个路由消息给doc,如果doc没有处理,再返回给......
  • 2024.1.26 大寄特寄
    很好的数学专题,让我发疯A.居然直接加了个限制,要求是对于连续的子序列,要求相等,关键是一定有解,用到了鸽笼原理假设对两个数列求前缀和之后,分别是An,Bn最终要得到Ai-Aj=Bk-Bl但是这样肯定是很麻烦的,要枚举,但是如果移项就可以得到一个有相同格式的式子Ai-Bk =Aj-Bl......
  • 寒假训练2024/1/26
    2024,1,26今天做石子合并的题比较多贴一个模板 for(intlen=2;len<=n;len++){ for(inti=1,j;(j=i+len-1)<=n;i++){for(intk=i;k<j;k++){if(dp[i][j]>dp[i][k]+dp[k+1][j]+pre[j]-pre[i-1]){......
  • 2024 笔记类软件对比(非常主观)
    在线的离线的自用之后的体验主要关注易用性,持久性,价格敏感Logseq:软件在github上开源,文档都是本地的markdown文件形式。工作上用它记了差不多一年,双向链接功能很好用。card和画板功能我没怎么用。因为同步不方便/记录需要先组织好逻辑,逐渐放弃Notion:白嫖了一个教育plan,不......
  • 游记 PKUWC 2024
    2024北京大学全国优秀中学生信息学冬季体验营1.25~1.27重庆市育才中学校1.2613:00网络卡顿挂了5分钟。但没事,因为在写ntt板子。还写挂了。然后看了题目,T1应该可以做出来,T2被吓到了,T3可以想一下。T1->T2->T3。T1首先写了个区间dp交上去。目测是一个dp优化,把......
  • THUWC2024游记
    RP++Day1T1看了一会儿居然没思路。看到数据范围\(n\le15\)想到可以状压,但怎么也想不出来,只好先打掉\(m=16\)和\(n=4\)两档暴力。然后脑子好一点了,枚举前\(i\)个人确定了集合\(S\),发现要枚举子集,预处理了一下做到了\(O(3^nm)\),喜提\(77\)。然后脑子锈掉了。这个......
  • 2024.01.25 近期练习
    CF1856E2如果\(n\le5000\)考虑怎么做。首先我们对于每个节点只考虑大小关系,最后只需要从小到大标号即可。我们考虑把答案放到LCA处统计。若其只有两个儿子\(v_1,v_2\),那最多只有\(siz_{v_1}\timessiz_{v_2}\)个会被统计,即令\(v_1\)所有数大于\(v_2\)。若有多个儿......
  • SMU 2024 winter round1
    题目链接A.直接输出#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;voidsolve(){cout<<"Goodcodeisitsownbestdocumentation."<<'\n';}signedmain(){ios::sync_with_st......
  • 2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面
    考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写。<templatestyle="width:100%"></template><scriptsetup></script><stylescoped></style>搭建页面的基本框架展开代码后复制你需要的代码。比如我选择上中下这种结构,我就复制上......
  • 【随笔】2024年1月1日
    关于Febonacci的一些事学了矩阵加速递推遂顺手给你谷的板子题又过了一遍对于“已知递推式求转移矩阵”的方法仍有疑惑与巨佬WPP交流并丢给WPP一道题请他口糊题:求Febonacci前n项的和(n<=1e18)正解是把S(n)(表示前n项的和)塞到矩阵里一起转移答案矩阵F(n)={f(n-1)f(n-2)S(n......