使用Stable-Diffusion实现AI绘画

9/1/2022 AI绘画Stable-DiffusionStreamDiffusionMidjourneyDALL-E

# 1. 基本介绍

# 1.1 AI绘画的发展史

AI绘画发展过程中比较关键的时间线

  • Disco Diffusion 是发布于Google Colab 平台的一款利用人工智能深度学习进行数字艺术创作的工具,它是基于MIT 许可协议的开源工具,可以在Google Drive 直接运行,也可以部署到本地运行。Disco Diffusion 有一个弊端,就是速度非常慢,动辄半个小时起步。
  • Midjourney是 Disco Diffusion 的原作者Somnai所加入的AI艺术项目实验室。Midjourney 对 Disco Diffusion 进行了改进,平均1分钟能出图。
  • OpenAI推出 DALL·E 2,它实现了更高分辨率和更低延迟,而且还包括了新的功能,如编辑现有图像。目前还没有 DALL·E 2 的体验资格。
  • stability.ai 推出 Stable-Diffusion并且开源了。操作简单,出图快,平均10-20秒。Stable-Diffusion 免费、生成速度又快,每一次生成的效果图就像是开盲盒一样,需要不断尝试打磨。stability.ai 是一个年轻的英国团队,他们的宗旨为 “AI by the people, for the people” ,中文翻译的大意为,人们创造AI,并且AI服务于人,除了 stable-diffusion 他们还参与了众多的 AI 项目。
stability.ai团队宗旨

# 1.2 Stable-Diffusion简介

项目描述:用一段文字描述生成一张图,使用常见的 CLIP ViT-L/14 文本编码器来依照文本调整模型。

项目地址:https://github.com/CompVis/stable-diffusion (opens new window)

效果演示:每次生成的效果随机,效果示例仅供参考。prompt:A well-preserved library among hidden ruins, matte painting

stable-diffusion算法生成绘画的效果示例

封装集成:Stable-Diffusion 一经推出后,受到了大量开发者的追捧,其中又有很多大佬制作了docker及一键脚本,可以很方便的搭建出一个Web界面去运行 stable-diffusion 算法,比如:

下面的自部署我选用的是最后一个,它是以一键脚本的形式进行部署,使用起来非常简单,所有的东西它都给你配好了,而且是独立环境,不会污染系统环境。

# 1.3 Midjourney简介

Midjourney 是一个人工智能程序,可根据文本生成图像,目前架设在 Discord 频道上。于 2022 年 7 月 12 日进入公开测试阶段,使用者可通过 Discord 的机器人指令进行操作,可以创作出很多的图像作品。

官网地址:https://www.midjourney.com/app/ (opens new window)

Midjourney

# 1.4 DALL-E简介

DALL-E是一个由OpenAI开发的神经网络,它能够将自然语言描述生成为相应的图像。它是基于变分自编码器(VAE)和Transformer架构的生成模型。它首先使用一个VAE将图像编码为离散的潜在表示,然后使用一个大型Transformer模型学习从自然语言描述到这些离散潜在表示的映射。训练完成后,DALL-E可以根据输入的文本描述生成一组与描述相符的图像。

DALL-E原理

# 2. Stable-Diffusion实现AI绘画

# 2.1 官方提供的在线服务

打开 https://beta.dreamstudio.ai/ (opens new window) 进行注册。

注册好后,就可以进入到这个界面。可以直接在下方输入名词,也可以在打开右侧的设置按钮,里面会更详细的配置。输入好关键词后,直接点 Dream 按钮,等待10秒左右就可以生成图片。

stable-diffusion在线服务生成效果

这样的生成方式非常的方便,但是是有次数限制的,超出则需要付费使用。而且使用这种方式,你生成图片的版权为CC0 1.0,你可以商用或者非商用你生成的图片,但是也会默认成为公共领域的资源。

另注:上面的官方界面是2022.9的,现在有了很大变化,下面是2023.10的官方界面。

新版stable-diffusion在线服务生成效果

# 2.2 部署 Stable-Diffusion

更建议使用Google Colab进行部署,这种方式可以几乎无限地使用 Stable Diffusion,并且由于这种方式是你自己跑模型的方式生成的图片,版权归属于你自己。

下面我们将使用 Hugging face 开源的 colab 示例,将其保存到自己的Google Drive里。

ipynb地址:https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/stable_diffusion.ipynb (opens new window)

# 2.2.1 连接服务器并安装依赖

首先我们先点击右上角连接服务器,连接成功后执行 nvidia-smi 代码块,查看一下所申请到的 GPU 配置。

GPU配置查询

安装 Stable-Diffusion 所需的项目依赖

stable-diffusion安装依赖

# 2.2.2 申请并填写Token

先打开 https://huggingface.co/settings/tokens (opens new window) 页面进行注册,登录进去后创建一个Token,然后执行如下两个代码块,其中第2个会让你填写Token。

stable-diffusion填写Token

下载预训练模型

打开 https://huggingface.co/CompVis/stable-diffusion-v1-4 (opens new window),勾选 I have read the License and agree with its terms,点击 Access repository,再执行下载预训练模型的按钮(如果未进行这一步,直接下载会提示403报错)

stable-diffusion下载预训练模型

# 2.2.3 编写Prompt生成图片

修改 prompt 里的文字,点击执行,等待一会儿算法便会生成图片。该 colab 下面还有很多高级使用示例,我就不一一演示了,根据提示进行操作即可。

stable-diffusion生成图片

# 2.3 部署 Stable-Diffusion-XL

# 2.3.1 项目介绍

Stable Diffusion XL是Stable Diffusion的优化版本,由Stability AI在2023.7发布。比起Stable Diffusion,Stable Diffusion XL做了全方位的优化。

# 2.3.2 运行示例

这里还是使用Google Colab进行部署,打开ipynb,安装依赖并下载模型,运行起来之后会给出公网访问地址。

Stable_Diffusion_XL_Demo

在界面里输入 prompt 即可生成图像。

Stable-Diffusion-XL效果

# 3. 在服务器上进行自部署

我这里将使用 https://github.com/cmdr2/stable-diffusion-ui (opens new window) 的一键脚本方案进行部署,在服务器上进行自部署建议有GPU环境(当然CPU环境也能跑,就是慢),内存和存储空间占用都比较大,配置不高的话就不用试了。下面是该项目介绍里写的系统要求:

  • 1)Windows 10/11 或 Linux,对 Mac 的实验性支持即将推出。

  • 2)NVIDIA 显卡,最好具有 6GB 或更多的 VRAM。但如果您没有兼容的显卡,您仍然可以通过“使用 CPU”设置来使用它。它会很慢,但它应该仍然有效。

# 3.1 服务器实验环境

系统环境及配置:系统版本是Ubuntu 20.04.4 LTS,128G内存,128TB存储。

$ cat /etc/issue             // 适用于ubuntu、debian等系统
$ cat /etc/redhat-release    // 适用于redhat、centos等系统
$ df -hl                     // 查看磁盘剩余空间
$ free -m                    // 查看剩余内存
1
2
3
4

GPU及CUDA环境:2张3090显卡,CUDA版本是11.6

$ nvidia-smi -q      // 查询GPU型号
$ nvidia-smi         // 查询GPU运行状态
$ nvcc --version     // 查看CUDA版本(安装PyTorch之类的深度学习库需要与CUDA驱动版本对应,不然连不上GPU)
1
2
3
3090显卡配置

注:上图中显示的20576MiB是指每张显卡有24GB显存,不是指内存就这些。

# 3.2 部署 Stable-Diffusion-UI

使用 Stable-Diffusion-UI 官方提供的一键脚本进行部署,如果是国内服务器建议先设置一下代理。

$ export https_proxy=http://xxx.xxx.xxx.xxx:xxx   // 如果是国内服务器建议设置一下代理,不然脚本执行中可能会下载失败
$ cd /root/algorithm/stable-diffusion-ui
$ wget https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.05/stable-diffusion-ui-linux.tar.xz
$ tar Jxvf stable-diffusion-ui-linux.tar.xz -C /root/algorithm && rm -f stable-diffusion-ui-linux.tar.xz
$ ./start.sh
1
2
3
4
5

Stable-Diffusion-UI部署过程

部署过程会比较慢,耐心等待,部署成功后用Chrome打开 http://ip:9000地址进行访问。

Stable-Diffusion-UI界面

注:打开页面之后实际进行操作时还要再等一会儿才能使用,因为算法还需要下载模型、加载模型和启动。因此启动后先随便输入个内容和选张图,点击Make Image,让后台服务先把该下载的模型弄好。

# 3.3 使用 Stable-Diffusion-UI

Stable-Diffusion-UI 的使用说明如下:

1)使用文字说明去生成

  • 输入文本提示,如a photograph of an astronaut riding a horse在文本框中。
  • Make Image。这将需要一些时间,具体取决于系统的处理能力。查看使用提示生成的图像。

prompt:a girl with lavender hair and black skirt, fairy tale style background, a beautiful half body illustration, top lighting, perfect shadow, soft painting, reduce saturation, leaning towards watercolor, art by hidari and krenz cushart and wenjun lin and akihiko yoshida

自部署Stable-Diffusion-UI的文字描述生成

2)使用图片去生成

  • 单击Browse..旁边的Initial Image。选择您想要的图像。
  • 可选的文本提示可以帮助您进一步描述您想要生成的图像类型。
  • Make Image。这将需要一些时间,具体取决于系统的处理能力。查看使用提示生成的图像。

提示:还可以单击Use as Input生成的图像,将其用作下一代的输入图像,这对于通过单击按顺序细化生成的图像很有用。

自部署Stable-Diffusion-UI的图像生成

# 3.4 实际系统资源占用及性能

实际系统资源占用及性能:占用了约16GB存储空间、6GB显存,出图速度大约为10s。

Stable-Diffusion-UI执行时的GPU占用情况

# 4. 在ARM芯片的Macbook Pro上运行

Stable-Diffusion 官方仓库的 apple-silicon-mps-support (opens new window) 分支支持了在ARM芯片的Macbook Pro上运行。

# 4.1 使用 DiffusionBee 生成

DiffusionBee (opens new window) 项目使用这个分支制作了傻瓜式GUI工具,算法模型也会自动下载,不需要任何技术背景就可以使用。

系统环境要求如下:

  • Mac with Intel or M1/M2 CPU
  • For Intel : MacOS 12.3.1 or later
  • For M1/M2 : MacOS 11.0.0 or later

跟普通应用程序一样傻瓜式安装即可。

  • Step1:在 Github 的 Releases处 下载 DiffusionBee 的安装程序。

  • Step2:下载完安装程序之后,打开 DiffusionBee 还有算法模型会自动下载,模型会下载至/Users/xxx/.diffusionbee/downloads目录下

使用DiffusionBee生成图像

输入描述文字,Advanced options有少量参数设置可改可不改,点击 Generate 即可。

我的 M1 pro芯片 Macbook pro 出图时间为 44s。芯片越强出图速度越快,反之越慢,大约耗时多少取决于你的芯片配置。

# 4.2 使用 MochiDiffusion 生成

MochiDiffusion (opens new window) 项目支持在 Mac 上原生运行 Stable Diffusion。

系统环境要求如下:

  • Apple Silicon(M1 及更高版本)
  • macOS Ventura 13.1 及更高版本
  • Xcode 14.2(构建)

需要转换或下载 Core ML 模型才能使用 Mochi Diffusion。这个我懒得实践了,这里放一张官方的截图。

MochiDiffusion

# 5. 使用StreamDiffusion加速生成

# 5.1 StreamDiffusion 简介

StreamDiffusion能以惊人的速度生成 AIGC 图像,单张 RTX4090 显卡可达 100 张/秒。它通过流批处理简化数据处理,采用残差无分类器(RCFG)减少计算冗余,随机相似性过滤器提高 GPU 利用率,并通过优化 IO 队列实现并行处理。同时,利用多种模型加速工具,实现爆炸式地提升 AIGC 图像速度。

# 5.2 部署 StreamDiffusion 服务

# 5.2.1 租用GPU服务器

实验环境:租用的AutoDL的GPU服务器,NVIDIA RTX 4090 / 24GB,Ubuntu20.04,Python 3.10, CUDA 11.8

由于这家的服务器都是境内的,拉取Github代码和HuggingFace模型都会受到墙的干扰,建议配置一下代理。

$ source /etc/network_turbo
1

另外,该服务器上的服务不可被外界直接调用,如有需要,可使用自定义服务。

  • 打开自定义服务,在本地终端输入上述命令(6006换成服务器实际部署服务的端口),之后就可以在本地通过127.0.0.1:6006去访问服务器部署的服务了。

本地访问AutoDL部署的服务

注:现在这个“自定义服务”需要实名认证,6006端口只是个示例,可以换成任意端口,也可以开多个。

# 5.2.2 安装基础环境

安装conda环境

$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh   // 从官网下载安装脚本
$ bash Anaconda3-2019.03-Linux-x86_64.sh           // 阅读协议确认安装,安装完成后再输入yes以便不需要手动将Anaconda添加到PATH
$ conda create -n streamdiffusion python=3.10      // 安装虚拟环境,streamdiffusion是给虚拟环境起的别名(任意即可)
$ source /root/miniconda3/etc/profile.d/conda.sh   // conda初始化
$ conda activate streamdiffusion                   // 激活虚拟环境
1
2
3
4
5

安装其他版本的CUDA/cuDNN

$ conda search cudatoolkit
$ conda install cudatoolkit==11.8.0
$ conda list cudatoolkit
$ conda search cudnn --channel nvidia
$ conda install cudnn=8.9.2.26
$ conda list cudnn
1
2
3
4
5
6

注:默认镜像都内置了最原生的CUDA和cuDNN,如果您自己安装了cudatoolkits等,那么一般会默认优先使用conda中安装的cudatoolkits。

安装node.js和npm环境

$ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo bash -
$ apt update
$ apt-get install aptitude -y
$ aptitude install nodejs
$ node -v
$ npm -v
1
2
3
4
5
6

注:直接使用 apt install nodejs 命令安装的node.js环境版本太低,后面使用时会出依赖问题,因此采用了这种方式。

# 5.2.3 拉取代码并安装依赖

拉取代码并安装依赖。

$ git clone https://github.com/cumulo-autumn/StreamDiffusion.git
$ conda activate streamdiffusion   
$ pip3 install torch==2.1.0 torchvision==0.16.0 xformers --index-url https://download.pytorch.org/whl/cu118
$ pip3 install streamdiffusion[tensorrt]
1
2
3
4

构建realtime-txt2img的前端。

$ cd /root/StreamDiffusion/demo/realtime-txt2img/frontend
$ npm install
$ npm run build
1
2
3

将config.py的端口改成6006,启动realtime-txt2img服务,然后配置一下自定义服务,在本地进行访问。

$ cd /root/StreamDiffusion/demo/realtime-txt2img
$ pip3 install -r requirements.txt
$ python3 main.py
1
2
3

# 5.3 使用 StreamDiffusion 服务

Prompt:one girl, cat ears, ukiyoe, Mt.F

使用StreamDiffusion服务

使用体验:生成速度的确非常快,但它生成的图里有很多跟 Prompt 描述不相关的,上图是挑了个效果好的。

# 6. 参考资料

[1] Comparing Adobe Firefly, Dalle-2, OpenJourney, Stable Diffusion, and Midjourney from Muhammad Usman (opens new window)

[2] AI数字绘画 stable-diffusion 保姆级教程 from 秋风的笔记 (opens new window)

[3] 一系列很棒的工具、想法、提示工程工具、colabs、模型和助手,供提示设计师使用 aiArt 和图像合成 from Github (opens new window)

[4] Disco Diffusion 非原创聚合型速查手册 from Notion (opens new window)

[5] 秋风的笔记-数字绘画 from Notion (opens new window)

[6] 在 Docker 容器中运行官方稳定版本的 Stable Diffusion from Github (opens new window)

[7] 人人都能用的「AI 作画」如何把 Stable Diffusion 装进电脑?from 少数派 (opens new window)

[8] 在您自己的计算机上和安装使用 Stable Diffusion 的简单一键式方式。from Github (opens new window)

[9] 如何在你的 M1/M2 Mac 本地运行 Stable Diffusion form 玉树芝兰 (opens new window)

[10] Diffusion Bee 是在 M1 Mac 上本地运行 Stable Diffusion 的最简单方法 from Github (opens new window)

[11] 文生图模型之Stable Diffusion from 知乎 (opens new window)

[12] 两万字干货!可能是全网最详细的Midjourney基础教程 from 优设 (opens new window)

[13] 怎样系统的学习 AI 绘画?from 知乎 (opens new window)

[14] 实时图像生成StreamDiffusion from Github (opens new window)

[15] Stable Diffusion 3深夜横空出世!模型与Sora同架构,也能「理解」物理世界 from 微信公众号 (opens new window)

[16] OOTDiffusion简介 from 映技派 (opens new window)

Last Updated: 4/14/2024, 1:36:38 PM