文字描述生成绘画及旧照片着色算法

  1. 1. 基本介绍
    1. 1.1 Google Colab简介
    2. 1.2 AI绘画的发展史
    3. 1.3 Stable-Diffusion简介
    4. 1.4 DeOldify简介
  2. 2. Stable-Diffusion根据文字描述生成绘画
    1. 2.1 官方提供的在线服务
    2. 2.2 使用Google Colab进行部署
      1. 2.2.1 连接提供的服务器
      2. 2.2.2 安装项目依赖
      3. 2.2.3 申请并填写Token
      4. 2.2.4 执行算法生成图片
    3. 2.3 在服务器上进行自部署
      1. 2.3.1 服务器实验环境
      2. 2.3.2 部署 Stable-Diffusion-UI
      3. 2.3.3 使用 Stable-Diffusion-UI
      4. 2.3.4 实际系统资源占用及性能
    4. 2.4 在ARM芯片的Macbook Pro上运行
      1. 2.4.1 安装 DiffusionBee
      2. 2.4.2 使用 DiffusionBee
  3. 3. DeOldify旧图片旧视频进行着色
    1. 3.1 官方提供的在线服务及API
    2. 3.2 DeOldify的预训练模型
    3. 3.3 使用Google Colab进行部署
  4. 4. 参考资料

1. 基本介绍

1.1 Google Colab简介

Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果。它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。

Colaboratory 笔记本存储在 Google 云端硬盘中,并且可以共享,就如同您使用 Google 文档或表格一样,Colaboratory 可免费使用。

利用Colaboratory ,可以方便的使用Keras,TensorFlow,PyTorch,OpenCV等框架进行深度学习应用的开发。

与其它云服务相比,最重要的特点是Colab提供GPU并完全免费,详细介绍及使用方法见 faq page

Google-Colab简介

1.2 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.3 Stable-Diffusion简介

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

项目地址:https://github.com/CompVis/stable-diffusion

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

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

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

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

1.4 DeOldify简介

DeOldify 是由 Jason Antic 开发和更新的。这是目前最先进的黑白图像、视频的着色方法,所有的东西都是开源的。

基本原理:它使用了一种名为NoGAN的新型GAN训练方法,该方法是作者自己开发的,用来解决在使用由一个鉴别器和一个生成器组成的正常对抗性网络架构进行训练时出现的主要问题。典型地,GAN训练同时训练鉴别器和生成器,生成器一开始是完全随机的,随着时间的推移,它会欺骗鉴别器,鉴别器试图辨别出图像是生成的还是真实的。

项目地址:https://github.com/jantic/DeOldify

效果演示:

DeOldify旧照片着色

2. Stable-Diffusion根据文字描述生成绘画

2.1 官方提供的在线服务

打开 https://beta.dreamstudio.ai/ 进行注册。

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

stable-diffusion在线服务生成效果

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

2.2 使用Google Colab进行部署

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

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

地址:https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/stable_diffusion.ipynb

2.2.1 连接提供的服务器

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

GPU配置查询

2.2.2 安装项目依赖

安装项目依赖

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

stable-diffusion安装依赖

2.2.3 申请并填写Token

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

stable-diffusion填写Token

Step4:下载预训练模型

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

stable-diffusion下载预训练模型

2.2.4 执行算法生成图片

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

stable-diffusion生成图片

2.3 在服务器上进行自部署

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

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

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

2.3.1 服务器实验环境

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

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

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

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

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

2.3.2 部署 Stable-Diffusion-UI

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

1
2
3
4
5
$ 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

Stable-Diffusion-UI部署过程

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

Stable-Diffusion-UI界面

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

2.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的图像生成

2.3.4 实际系统资源占用及性能

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

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

2.4 在ARM芯片的Macbook Pro上运行

Stable-Diffusion 官方仓库的 apple-silicon-mps-support 分支支持了在ARM芯片的Macbook Pro上运行,DiffusionBee 项目使用这个分支制作了傻瓜式GUI工具,不需要任何技术背景就可以使用。系统环境要求如下:

  • M1 / M2 Mac
  • 16 GB RAM preferred. It will run a bit slow with 8GB ram.
  • MacOS 12.5.1 or later

2.4.1 安装 DiffusionBee

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

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

  • Step2:下载完安装程序之后,打开 DiffusionBee 还有算法模型会自动下载。

    DiffusionBee自动下载模型

2.4.2 使用 DiffusionBee

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

DiffusionBee文本生成图像

Logs处可以查看执行日志,我的 M1 pro芯片 Macbook pro 出图时间为 81.71s。芯片越强出图速度越快,反之越慢,大约耗时多少取决于你的芯片配置。

DiffusionBee执行效率

3. DeOldify旧图片旧视频进行着色

3.1 官方提供的在线服务及API

如果不想折腾的话,可以使用官方提供的 DeOldify Image Colorization on DeepAI,可以直接在这里上传图片对旧照片进行着色,同时该网站还提供了API,供程序中调用,下文可以不用看了。

3.2 DeOldify的预训练模型

预训练模型:DeOldify 是基于深度学习开发的,需要用到预训练权重,这里项目开发者已经把训练好的权重上传了,我们可以直接拿来使用,不需要我们再训练。

  • Artistic 权重,会使图片上色效果更大胆 一些,下载地址:

    1
    https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth
  • Stable 权重,相对于 Artistic 上色效果更保守一些,下载地址:

    1
    https://www.dropbox.com/s/usf7uifrctqw9rl/ColorizeStable_gen.pth
  • Video 权重,此权重文件用来给视频上色,下载地址:

    1
    https://data.deepai.org/deoldify/ColorizeVideo_gen.pth

权重文件下载完毕后,在项目根目录下创建一个 models 文件夹,把下载好的权重文件放入 models 文件夹内即可。

3.3 使用Google Colab进行部署

由于运行深度学习的项目对机器性能要求较高,因此下文使用了官方提供的预训练模型,并白嫖 Google Colab 进行部署。DeOldify对旧照片、旧视频的着色的使用流程基本一致,只不过用到的预训练模型不同而已,以旧照片着色为例。

官方也提供了Google Colab,不过那个是英文版的,我没有尝试了,下面我用的是网上找的一份中文版的,将其保存到自己的Google Drive里,地址:https://drive.google.com/drive/folders/1G6nTfabx10P3nSzL5lN-SEnoM2Y0jeRh?usp=sharing

注:使用Google Colab需要翻墙,这个要保存到自己的云端硬盘里,我的你们是无法执行的。

DeOldify的Google-Colab

打开之后先去执行该代码块(悬浮即可显示执行按钮)

1
2
3
4
5
6
7
8
9
10
11
#点击左侧按钮一键配置环境
!git clone https://github.com/jantic/DeOldify.git DeOldify
%cd /content/DeOldify
!pip install -r /content/DeOldify/requirements.txt
import fastai
from deoldify.visualize import *

torch.backends.cudnn.benchmark = True
!mkdir 'models'
!wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O ./models/ColorizeArtistic_gen.pth
colorizer = get_image_colorizer(artistic=True)

说明:预训练模型的地址如果失效了就自己找个吧,替换掉即可。如果要使用 Stable 权重,需要把下面改成False

1
2
Artistic 权重  -- colorizer = get_image_colorizer(artistic=True)
Stable 权重 -- colorizer = get_image_colorizer(artistic=False)

踩过的坑:第一次执行的时候可能会出现依赖安装失败的问题,不要慌。点击 RESTART RUNTIME 按钮,等一会儿再重新执行代码块,第二次应该就可以安装成功了,成功的话左侧有个绿色箭头。

DeOldify

安装成功环境以后,再在下面的 source_url 里填入旧照片链接(本地图片的话可以先上传到图床),然后点击左侧的执行按钮,等待一会儿即可生成着色后的照片。

DeOldify旧照片着色实践

注:如果你的旧照片里本身就有颜色的话,生成效果可能会不太好。因为它会先把原有颜色替换成黑白的,再根据算法生成新的颜色,会导致与原图的颜色不一致。如果你想要保持一致的话,就需要借助PS的蒙版进行二次处理了。

4. 参考资料

[1] Colaboratory常见问题解答 from Google官方文档

[2] DeOldify黑白旧照片着色神器:基于NoGAN的深度学习来实现旧照着色还原 from 佰阅部落

[3] 人工智能DeOldify修复黑白图片和视频 from Bilibili

[4] 黑白老照片上色,手把手教你用Python怎么玩儿!from 简书

[5] Google Colab免费GPU使用教程 from Rogn

[6] 一个基于深度学习的项目,用于着色和恢复旧图像和视频 from Github

[7] AI数字绘画 stable-diffusion 保姆级教程 from 秋风的笔记

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

[9] Disco Diffusion 非原创聚合型速查手册 from Notion

[10] 秋风的笔记-数字绘画 from Notion

[11] 在 Docker 容器中运行官方稳定版本的 Stable Diffusion from Github

[12] 人人都能用的「AI 作画」如何把 Stable Diffusion 装进电脑?from 少数派

[13] 在您自己的计算机上和安装使用 Stable Diffusion 的简单一键式方式。from Github

[14] 如何在你的 M1/M2 Mac 本地运行 Stable Diffusion form 玉树芝兰

[15] Diffusion Bee 是在 M1 Mac 上本地运行 Stable Diffusion 的最简单方法 from Github