今天的分享将从一段简单的代码开始。对于不了解代码的小伙伴来说,可能觉得有点压力。其实不用担心,今天分享的重点在于穿过各种神秘的AIGC工具表面,窥伺一下底层的基本逻辑,非常有助于理解实际应用AIGC工具时发现的很多问题。
我会对代码的主要功能进行解释。具体代码所能实现的功能,如果有兴趣是可以猜出来。
#以下代码为程序运行进行设置
import os
from diffusers import AutoPipelineForText2Image
import torch
#以下代码加载模型
pipe_txt2img = AutoPipelineForText2Image.from_pretrained(
"digiplay/majicMIX_realistic_v7",
torch_dtype=torch.float16, use_safetensors=True
).to("cuda")
#以下代码加载并处理提示词
prompt = ("cinematic photo of Godzilla eating sushi with a cat in a izakaya, 35mm photograph, film, professional, 4k, highly detailed")
generator = torch.Generator(device="cpu").manual_seed(47)
#以下代码由提示词生成图片
image = pipe_txt2img(prompt, generator=generator).images[0]
image.show()
代码很简单吧。而且我们知道了,如果通过提示词生成图片,只需要提示词和一个模型文件就够了。作为参考,我们使用最容易上手的Easy Diffusion时,还需要提前准备多个文件,看起来哪些文件也不都是必须的啊。AIGC工具神秘的面纱已经被我们轻轻地揭开了一点点。
运行这段程序,代码会自动下载模型文件,并生成图片。
代码里使用了Pipeline(管道)这个词,后续会反复出现。之所以用这个词,我的理解是使用的Diffusers代码生成图像等过程像管道一样,数据像流水通过这些管道,最后生成结果。Diffusers代码不仅可以生成图像、而且为视频、音频和修复等基本任务提供了许多管道。除此之外,还有用于适配器和升级、超分辨率等功能的专用管道。有这么多不同的管道,要知道使用哪个管道类可能会让人不知所措。
代码中使用的是AutoPipeline类旨在简化需要使用的管道的种类。它是一个通用的任务优先管道,可让用户专注于生成图像等任务本身,而无需先去考虑选择特定的管道。AutoPipeline类会自动检测要使用的正确管道。我会以此为基础,逐渐展开介绍其它的管道,帮助大家了解AIGC工具背后更多的逻辑。
修改一下程序的这行代码
prompt = "cinematic photo of Godzilla eating sushi with a cat in a izakaya, 35mm photograph, film, professional, 4k, highly detailed"
换个提示词(1girl,hair with bangs,black long dress,pink background),也就是改成
prompt = "1girl,hair with bangs,black long dress,pink background"
再运行一下程序。
哈哈,是不是你也会写程序了。