侧边栏

初识stable-diffusion

发布于 | 分类于 杂项

在过去的几年中,我也断断续续地进行了很多游戏demo的开发,碰到的一个难题就是游戏素材。游戏的核心逻辑代码好像没有那么难写,但游戏原画和动画素材却移植没有什么进展。

今年AIGC非常火热,通过AI可以生成大段的文本内容,也可以生成图片,因此我决定研究一下现在AIGC到什么程度了,以及是否可以用来生产游戏素材图片。

最终,在本文主要整理了stable-diffusion的安装和使用,以及一点点关于AIGC的思考。

参考

AIGC

什么是AIGC?复习一下传统的内容生成模式

  • 专业生产内容(PGC, Professional-generated Content)
  • 用户生产内容(UGC, User-generated Content)

AI生产内容——AIGC(Artificial Intelligence Generated Content),是指基于生成对抗网络、大型预训练模型等人工智能的技术方法,通过已有数据的学习和识别,以适当的泛化能力生成相关内容的技术

给定一段文字,AI可以结合上下文输出新的文字内容,比如最近很火热的ChatGPT。

除了输出文字之外,一些大模型还可以生成图片,目前比较流行的是MidJourneyStable Diffusion

对比一下两个产品

  • MidJourney是商业项目,闭源,需要付费订阅,新手上手门槛低,使用自然语言生成
  • Stable Diffusion是开源项目,可以本地安装,需要使用有权重的提示词,有一定的门槛

作为开发者,我准备先安装Stable Diffusion体验一下

安装

参考Mac本地安装部署Stable diffusion最全教程,AI绘画无痛入门指南,这篇文章写的很全了,基本上跟着就可以把本地的环境跑起来。

大概就是下载一个叫stable-diffusion-webui的仓库,这个仓库可以运行一个Python的Web服务,之后就可以在本地通过浏览器访问这个服务,体验AI生成图片的功能。

下面整理一下大概的步骤

克隆仓库

仓库有点大,需要花费一点时间

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

下载模型

刚开始可以先下载一些官方模型,比如stable-diffusion-inpainting,模型一般是“.ckpt”或“.safetensors”后缀内容

下载好的模型,放在目录/stable-diffusion-webui/models/Stable-diffusion/

关于模型的概念,在下面的“使用”章节会提到。

运行安装脚本

仓库根目录有个webui.sh的文件,首次运行会开始安装,这一步注意把vpn的代理命令复制到终端再运行,不然可能会出现一些网络问题

# 复制自己本地的vpn终端代理命令
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

# 运行安装脚本
./webui.sh

运行后需要等待一段时间。

到最后安装python依赖的时候,需要关闭终端代理,否则运行会报错

fatal: unable to access 'https://github.com/brkirch/k-diffusion.git/': HTTP/2 stream 1 was not closed cleanly before end of the underlying stream

先关闭终端,然后重新运行webui.sh就行了,这一步不知道是不是我自己本地环境的问题

最后看到在启动成功后,访问127.0.0.1:7890就可以看见 web ui的界面了

安装插件

SD webui社区提供一些扩展功能,要使用这些功能需要安装对应的插件,常见的插件比如汉化插件、lora插件等,都可以通过输入插件github地址的方式直接安装。

几种模型

在使用SD webui中,最常听到的就是xx模型,模型是什么,有什么作用呢?

大模型

大量经过训练的图片合集,被称作大模型,也就是chekpoint模型

大模型一般体积较大,一般真人版的单个模型的大小在7GB左右,动漫版的在2-5个G之间。

早期的CKPT后缀名是ckpt,如今新的CKPT后缀名都是safetensors。

.ckpt 文件是用 pickle 序列化的,这意味着它们可能包含恶意代码,如果你不信任模型来源,加载 .ckpt 文件可能会危及你的安全。

.safetensors 文件是用 numpy 保存的,这意味着它们只包含张量数据,没有任何代码,加载 .safetensors 文件更安全和快速。

安装路径:安装目录\models\Stable-diffusion\xxx

lora模型

LoRA全称Low-Rank Adaptation of Large Language Models,直译为大型语言模型的低阶自适应,通过矩阵分解的方式,微调少量参数,并加总在整体参数上,所以它现在主要用来控制很多特定场景的内容生成。

lora是一种体积较小的绘画模型,是对大模型的微调。与每次作画只能选择一个大模型不同,lora模型可以在已选择大模型的基础上添加一个甚至多个。一般体积在几十到几百兆左右。后缀也是safetensors

使用lora模型需要安装additional-networks插件,然后将下载好的lora模型放在/extensions/sd-webui-additional-networks/models/lora目录下面(注意不是/models/Lora下面

Embedding 模型

Textual Inversion(也称为 Embedding,文本转换模型),只训练负责的文本理解的模块,体积很小。

它是一种从少量示例图像中捕捉新概念/新词语的技术,随后可以将新词用在 Prompt 中来精细控制文生图的结果

简单来说就是文本的压缩表达(即将文字变成数值以便计算机处理),用来提升提示的准确性。

下载模型资源

模型资源下载网站

使用

选好模型之后,还需要填写一些参数,用来控制生成的图片

一些参数

提示词

SD webui最基础的功能就是文字转图片,提示词用来告诉AI需要什么样的图片,提示词分为

  • 正向提示词prompt,表示你希望这个图符合什么要求
  • 反向提示词negative Prompt,表示这个图不希望符合什么要求

提示词可以是英文短句或单词,以逗号进行分隔,它们类似标签 (tag) 列表。

采样方法 (Sampler)

用于去噪,平衡生成图的速度和质量,目前看起来 DPM++ 2M Karras 用的比较多

迭代步数 (Steps)

去噪过程的采样步骤数。越多越好,但需要更长的时间。一般在 20-30 之间

提示词引导系数 (CFG Scale)

提示词相关性,用于控制模型应在多大程度上遵从您的提示,默认为7,数值越大越严格遵守提示

提示词语法

下面的相关概念都来自于网络整理,并不能保证完全的准确性。

提示词使用英文。

prompt可以是一段句子描述画面的内容,也可以将想要描述的内容按单个单词的形式使用逗号分隔,这样更方便测试多个参数。

不同的单词有不同的权重,一般来说越靠前的词汇权重越高,因此,调整单词权重最简单的方式就是调整顺序

越想要看到的单词放在靠前的位置,此外,每个词可以通过()增强或[]减弱权重

text
(keyword:value) 强度变为value倍,value需要大于1,默认为1.1
[keyword:value] 强度变为value倍,value需要小于1,默认为0.9
(keyword): 1.1倍
((keyword)): 1.21倍,可以写多个括号,一般不建议这种写法
[keyword]: 0.9倍
[[keyword]]: 0.81倍

下面介绍一个万能公式:质量+主体+动作/场景+风格+细节补充

  • 质量: 代表画面的品质,如1girl 结合 high quality 使用来获得高质量图像,常见的有masterpiece, best quality
  • 主体: 画面主要内容,这是任何提示的基本组成部分,常见的有solo, 1girl,upper body
  • 代表动作/场景: 描述了主体在哪里做了什么
  • 风格:画面风格 (可选)
  • 细节补充: 可以使用 艺术家,工作室,摄影术语,角色名字,风格,特效等等

常用的prompt开头

masterpiece, best quality, highres, highly detailed, 1girl,

常用的negative prompt开头

lowres, bad anatomy, bad hands, nsfw, bad anatomy, long neck, (worst quality, bad quality, normal quality:1.3), lowres

目前还有一种比较骚操作的做法:通过chatGPT等文本生成模型来优化SD webui的提示词,貌似也有一定的效果。

图生图

根据传入的图片,可以创建蒙版(大致是涂改原图的部分区域),结合prompt生成全新的图片,或者只替换蒙版出的图片。

图生图还有一种用途:根据草图和prompt生成更完善的图片,参考:stable-doodle

这里暂时不在展开。

生成连续帧或动画

有一种AI风格的视频,实际上是将视频一帧一帧导出,然后通过图生图的方式生成单张图片,再转回视频。

这里要研究的是直接通过prompt生成视频的过程

参考:

一番研究之后,发现目前并没有非常合适的生成动画的插件,SD webui生成的单张图片不具有连续性,就无法制作动图,而动画开发是游戏开发中最耗费美术精力的地方,如果AI可以稳定生成连续的帧图片,可以想象一下会释放多大的生产力出来!

小结

目前,随着AIGC的发展,市面上还出现了一大堆套壳的AI生图的产品,大概就是搞了一套UI,然后定制了几个模型就开始收费了,感觉使用这些产品还不如直接安装SD webui呢~

关于游戏行业是否可以借助AIGC提高生产力,在翻阅资料的过程中,发现了几个垂直做游戏素材的AIGC平台,比如layer.aiscenario.com等,这些产品貌似可以使游戏从业者在游戏开发过程中生成的游戏素材保持风格一致,这个距离我设想使用AIGC制作游戏素材的想法比较相近,后面再专门研究一下 。

不过,整体来看,距离AIGC生成直接可以使用的素材,好像还有一点距离,交给时间和大佬吧。

希望早点看到人人都可以是独立开发者的时代,毕竟想象力才是游戏开发最重要的能力(之一?

你要请我喝一杯奶茶?

版权声明:自由转载-非商用-保持署名和原文链接。

本站文章均为本人原创,参考文章我都会在文中进行声明,也请您转载时附上署名。