【文生图系列】 Stable Diffusion v2复现教程

news/2024/11/16 4:39:39/

文章目录

    • xformers
      • bug 记录
    • txt2img
    • diffusers
    • 参考

基础环境承接Stable Diffusion v1, 详情请见我的博文【文生图系列】 Stable Diffusion v1复现教程。然后更新pytorch和torchvision的版本,因为要使用GPU和xformers,需要下载gpu版本的pytorch。再下载open-clip-torch库文件,安装命令如下所示:

conda install pytorch == 1.12.1 torchvision == 0.13.1 torchaudio0.12.1 cudatoolkit=11.3 -c pytorch
pip install open-clip-torch
2.7.0
pip install -e .

在pytorch官网上寻找下载命令,pytorch为1.12.1时,有cuda 10.2, 11.3 和11.6的版本,我选择了cuda为11.3版本,那么对应的cudatoolkit=11.3,pytorch安装命令如上所示。

xformers

xformers能够有效地利用GPU,未安装xformers,我的GPU内存为15多G,会出现CUDA out of memory的错误,利用xformer,运行scripts/txt2img.py时,GPU内存占用最高为13多G。

官方文档中是cuda-11.4,由于我的pytorch的cuda是11.3,按照官方教程安装xformers,会出现xFormers wasn’t build with CUDA support cuda错误。所以将cuda的版本更改为11.3。

export CUDA_HOME=/usr/local/cuda-11.3
conda install -c nvidia/label/cuda-11.3.0 cuda-nvcc
conda install -c conda-forge gcc
conda install -c conda-forge gxx_linux-64==9.5.0

下载并安装xformers,在pip install -e .时,会耗费较长时间。

cd …
git clone https://github.com/facebookresearch/xformers.git
cd xformers
git submodule update --init --recursive
pip install -r requirements.txt
pip install -e .
cd …/stablediffusion

bug 记录

  1. Torch not compiled with CUDA,需要下载带有cuda版本的pytorch
  2. xFormers wasn’t build with CUDA support cuda版本不匹配,就如上述所述,将cuda版本由11.4更改为11.3,然后重新安装xformers

txt2img

下载stable-diffusion-2-1 模型,下载链接如下所示。stable-diffusion-2-1 是在stable-diffusion-2模型上微调得到的。数据未变,设置punsafe=0.1额外训练了55k步,然后调整punsafe=0.98后再额外训练155k步。

v2-1_768-ema-pruned.ckpt下载: https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.ckpt

sd v2版本和sd v1版本的超参数几乎一样,这里不再赘述,具体见【文生图系列】 Stable Diffusion v1复现教程。sd v2相比于v1支持更高分辨,能生成更高清的图片。

python scripts/txt2img.py --prompt “a professional photograph of an astronaut riding a horse” --ckpt v2-1_768-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768 --device cuda

宇航员骑马的生成图片如下所示,相比于v1,生成的图片更全面,也更有质感。马生成的不错,不够露脸的宇航员有些恐怖。

在这里插入图片描述ps: 原图近乎9M,CSDN最高上传5M的图片,将图片进行了压缩到了3M。

租赁的服务器,明天就要到期了。配置完环境之后,趁着最后的时间极速测试一下。下图是生成的一张白发帅哥,超级帅气,很像贝克汉姆。

python scripts/txt2img.py --prompt “a best-quality photo of an extremely handsome young man with white hair who is muscle” --ckpt v2-1_768-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768 --device cuda

在这里插入图片描述

python scripts/txt2img.py --prompt “a best-quality photo of a classical Chinese Tang Dynasty beauty who is drinking tea” --ckpt v2-1_768-ema-pruned.ckpt --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768 --device cuda

和sd v1相比,相同的提示词,“唐朝美女喝茶的提示词”,sd v2能把品茗这个动作画出来,但是服饰不怎么像唐朝。

在这里插入图片描述
原图近乎9M,CSDN最高上传5M的图片,将图片进行了压缩到了3M。

diffusers

使用diffusers库能够更简单更有效率地运行sd 2。

Cannot initialize model with low cpu memory usage because accelerate was not found in the environment. Defaulting to low_cpu_mem_usage=False. It is strongly recommended to install accelerate for faster and less memory-intense model loading. You can do so with:

pip install accelerate safetensors

import torch
from diffusers import StableDiffusionPipeline, DPMSolverMultistepSchedulermodel_id = "stabilityai/stable-diffusion-2-1"# Use the DPMSolverMultistepScheduler (DPM-Solver++) scheduler here instead
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe.enable_attention_slicing()#如果出现CUDA out of memory.加这行代码
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
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")

"a photo of an astronaut riding a horse on mars"在火星上骑马的生成图片如下所示,宇航员、马和火星三个要素都具备,而且riding这个动词也能够很好地表现出来。同样的prompt,sd v2相比于sd V1版本的生成图像更全面。

在这里插入图片描述

参考

  1. Stability-AI/stablediffusion
  2. stabilityai/stable-diffusion-2-1

http://www.ppmy.cn/news/244218.html

相关文章

如何从零开始构建 API ?

假设你请承包商从零开始建造一座房子,你肯定期望他们交付最高质量的房子。他们必须通过检查、遵守安全规范并遵循项目中约定的要求。因为建房子可容不得走捷径。如果承包商经常走捷径,他们的声誉会受到影响,从而失去客户。其实,开…

[codeup 1818最大公约数]

[codeup 1818最大公约数] 题目: 求最大公约数与最小公倍数 CODE #include <cstdio>int gcd(int a,int b){if(b0)return a;return gcd(b,a%b); }int lcm(int gcd,int a,int b){return (a/gcd)*b; }int main(){int a,b;scanf("%d %d",&a,&b);int ret…

ios13全选手势_ios13的三指手势操作怎么关闭 只要几步就行了

在 iOS 13 中&#xff0c;苹果增加了全新的文本编辑手势&#xff0c;能够让用户轻松地完成剪切、拷贝和粘贴。但该功能会默认进行开启&#xff0c;很多用户发现&#xff0c;该功能与游戏的三指操作冲突了&#xff0c;非常影响游戏操作。 iOS 13 三指操作如何关闭? 比较遗憾的是…

#动态规划,离散#洛谷 1052 codevs 1105 jzoj 1818(junior)1169 (senior)过河

题目 青蛙从0开始&#xff0c;不停的向终点跳跃。一次跳跃的距离是 S S S到 T T T之间的任意正整数&#xff08;包括 S , T S,T S,T&#xff09;。当青蛙跳到或跳过坐标为 L L L 的点时&#xff0c;就算青蛙已经跳出了独木桥。问最少要踩多少石子过去。 分析 动态规划&…

python 力扣(LeetCode) 1818.绝对差值和

题目链接 力扣&#xff08;LeetCode&#xff09; 1818.绝对差值和 不想戳的看下图&#xff1a; 样例&#xff1a; 数据范围&#xff1a; 解题思路&#xff1a; 二分查找后进行排序。 代码如下&#xff1a; class Solution:def minAbsoluteSumDiff(self, nums1: List[int], …

vivo 1805的usb调试模式在哪里,开启vivo 1805usb调试模式的流程

经常我们使用安卓手机通过数据线连接上PC的时候&#xff0c;如果手机没有开启usb调试模式&#xff0c;PC则没办法成功识别我们的手机&#xff0c;部分软件也没办法正常使用&#xff0c;此情况我们需要找方法将手机的usb调试模式打开&#xff0c;下面我们讲解vivo 1805如何开启u…

[BZOJ1818][CQOI2010]内部白点

题目链接&#xff1a; BZOJ1818 首先&#xff0c;题目根本不会有\(-1\)的情况&#xff0c;且所有节点变色只发生在第一秒。 证明&#xff1f;如果一个节点\((x,y)\)在第二秒变色&#xff0c;那么一定有一个节点会在第一秒内于\((x,y)\)的四周生成。 假设在左边&#xff08;其他…

【bzoj1818】[Cqoi2010]内部白点

Description 无限大正方形网格里有n个黑色的顶点&#xff0c;所有其他顶点都是白色的&#xff08;网格的顶点即坐标为整数的点&#xff0c;又称整点&#xff09;。每秒钟&#xff0c;所有内部白点同时变黑&#xff0c;直到不存在内部白点为止。你的任务是统计最后网格中的黑点…