AI绘画部署-Stable Diffusion(huggingface API图片生成初体验)

引言

最近,在很多地方都看到了各个大佬用AI生成的神图,索性从网上搜集资料部署一下体验一下AI绘画的魅力。本文基于huggingface API在colab上构建AI绘画。

使用步骤

1.huggingface原始环境地址

https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/stable_diffusion.ipynb#scrollTo=AAVZStIokTVv

2.配置colab GPU资源

点击右上角 连接
在这里插入图片描述
初始化完成后,点击此处分配GPU资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此处初始化环境完成,执行 !nvidia-smi,查看被分配的GPU配型,一般是从 K80、T4、P100、V100 中随机分配一个。如果有幸被分配到V100的机器,生成图片会快不少。
在这里插入图片描述

3.安装第三方库

安装相关依赖库,包括 diffusers、scipy、ftfy、transformers 和 accelerate。


在这里插入图片描述

4.加载模型

主流模型如下:
CompVis/stable-diffusion-v1-4
runwayml/stable-diffusion-v1-5
stabilityai/stable-diffusion-2-1-base
stabilityai/stable-diffusion-2-1
可通过修改配置加载各个模型。通过对生成的多组图片对比,V2版本效果整体好于V1,生成的图片质量更好,但是占用资源相对更高。
在这里插入图片描述
模型加载cuda。
在这里插入图片描述

5.图片生成

通过修改prompt,生成你想要的图片
在这里插入图片描述
在这里插入图片描述

6.多个图像生成

如果要为相同的文本提示生成多个图像,只需重复多次输入相同的文本即可。我们可以把文本的列表发送到模型中,让我们编写一个助手函数来显示多个图像

from PIL import Image

def image_grid(imgs, rows, cols):
    assert len(imgs) == rows*cols

    w, h = imgs[0].size
    grid = Image.new('RGB', size=(cols*w, rows*h))
    grid_w, grid_h = grid.size
    
    for i, img in enumerate(imgs):
        grid.paste(img, box=(i%cols*w, i//cols*h))
    return grid
num_images = 3
prompt = ["a photograph of an astronaut riding a horse"] * num_images

images = pipe(prompt).images

grid = image_grid(images, rows=1, cols=3)
grid

在这里插入图片描述

还可以生成n*m张图像:

num_cols = 3
num_rows = 2

prompt = ["a photograph of an astronaut riding a horse"] * num_cols

all_images = []
for i in range(num_rows):
  images = pipe(prompt).images
  all_images.extend(images)

grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid

在这里插入图片描述

7.参数配置

随机种子

多次运行上面的单元格每次都会给你一个不同的图像。 如果想要确定性输出,可以将随机种子传递给管道。 每次使用相同的种子都会得到相同的图像结果。

import torch

generator = torch.Generator("cuda").manual_seed(1024)

image = pipe(prompt, generator=generator).images[0]

image

迭代次数

可以使用 num_inference_steps 参数更改推理步骤的数量。 一般来说,使用的步骤越多,结果越好。 Stable Diffusion 作为最新模型之一,在步数相对较少的情况下效果很好,建议使用默认值 50。如果想要更快的结果,可以使用较小的数字。

import torch

generator = torch.Generator("cuda").manual_seed(1024)

image = pipe(prompt, num_inference_steps=15, generator=generator).images[0]

image

生成图片的高和宽

通过 height 和 width 控制生成图片大小。

import torch

image = pipe(prompt, height=512, width=512).images[0]

image

guidance_scale

一种增加对条件信号(在本例中是文本)以及整体样本质量的依从性的方法。 简单来说,无分类器指导迫使生成更好地匹配提示。默认值7.5。如果使用很大的数字,图像可能看起来不错,但多样性会降低。

import torch

image = pipe(prompt, guidance_scale=7.5).images[0]

image

样例展示

east africa landscape, highly detailed, digital painting, concept art, sharp focus, cinematic lighting, fantasy, intricate, elegant, lifelike, photorealistic, illustration, smooth
在这里插入图片描述

Refia from final fantasy 3ds, Refia staring through the window a little bit sadly, highly detailed, digital painting, 8k resolution
在这里插入图片描述
European and American beauty, good figure,very beautiful,glamorous,8k
在这里插入图片描述
cute mini meka, chibi, disney style, manga style, UHD, HDR, 4K, 8K
在这里插入图片描述
Cute and adorable cartoon fluffy baby rhea, fantasy, dreamlike, surrealism, super cute, trending on artstation, 8k
在这里插入图片描述
以上。

猜你喜欢

转载自blog.csdn.net/qq_43188358/article/details/128756071