当前位置:   article > 正文

AI 作画初体验

ai初体验

连续看了几期和菜头的公众号上关于 AI 作画的文章后,我也产生了一些兴趣。作为一名理科生,立马就行动起来,这篇文章就聊一聊我的尝试过程。

说起 AI 作画,其实已经出现好几年了。最早的新闻有:

2018年,10月25日,一幅由人工智能创作出的肖像画在纽约佳士得拍卖会上拍出43.2万美元的高价(约合人民币300万元)。

但之前的 AI 作画,都只存在于谷歌、NVidia这样的顶级实验室中,对硬件配置有着极高的要求,普通人想要尝试,并不太容易。

近一段时间,画家圈刷屏了一个 AI 工具:Disco Diffusion。这个 AI 工具已经进化到 V5.2 版本,具有两个特点:

  1. 平民化。普通的用户级显卡就可以运行,而且获得的效果不错,速度也能接受(几分钟到几个小时,取决于显卡)。

  2. 易使用。得益于 TTI(Text to Image Generator)技术的发展,人工智能开始“理解”用户输入的文本,只需要提供一些关键词,就能指挥 AI 来生成画作。

现在 AI 作画工具也是百花齐放,远不止 Disco Diffusion 这一款,不过这篇文章仅限于探讨 Disco Diffusion。

在线尝试

Disco Diffusion 是一个部署在 Colab 的开源项目,所以在线就可以作图。Disco Diffusion V 5.2 Colab 地址:

https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb

Colab 是 Google 家的用来在线编写并运行 Python 程序的 notebook,如果使用过用 Jupyter notebook,会觉得非常熟悉。

依次运行 notebook 中的代码,就可以出图。当然 Colab 每天给免费用户使用的计算资源有限制(有资料说是 2 个小时时长,显卡资源随机),经常碰到的情况就是生成到一半,服务器就断开了。下面就是我在线尝试生成的画作:

2e3d6fe64a97dbb7ee8c46b018db3428.png

这是一幅未完成的作品。如果你觉得对你非常有用,可以购买谷歌的云计算资源,完成一幅完整的作品。

不过对一名程序员来说,怎么会这么容易就为云计算买单呢?

接着尝试其它的 AI 工具:CogView。这是中国之光清华大学的项目,据团队发布的论文里称“人工评估的测试中,CogView被选为最好的概率为37.02%,远远超过其他基于GAN的模型。”

来源:CogView: Mastering Text-to-Image Generation via Transformers (https://arxiv.org/abs/2105.13290)

中国团队出品的产品,当然提示词原生支持中文,对中国用户比较友好。试用地址:

https://wudao.aminer.cn/CogView/index.html

使用提示语:“一棵湖面上的樱花树,花瓣飘在天空中,湖水倒影” 生成的结果如下:

6ed4f59aa26e1472351db2c5dd73106a.png

一次生成 8 张,速度倒是挺快,至于说质量,要看运气。运气好的话,还是能生成不错的图像的。

再次尝试一款国外出品的在线生成工具:Dalle-Mini。试用地址:

https://huggingface.co/spaces/dalle-mini/dalle-mini

使用 prompt:"A lonely glowing door in a beautiful wilderness, by Asher Brown Durand." 生成的图像如下:

b66a1645c234e6e5e3e2b779043af58f.png

这个生成的速度也很快,一次生成 9 张,但效果比起和菜头本地运行生成出来的图还是差远了。

5e82a7aec7a40b454a53f9df434856c4.png

没有办法了,还是得本地部署,虽然显卡比较渣(RTX 2080 TI),但我可以用时间换取质量。

本地部署

关于 Disco Diffusion 的本地部署,网上有许多资料,谷歌也给出了本地部署的官方文档:

https://research.google.com/colaboratory/local-runtimes.html

但作为一名程序员,我更喜欢批量化的运行,喜欢直接通过脚本搞定一切,所以我选择了通过 Docker 部署。

我的操作系统环境是 Ubuntu 20.04 LTS,NVIDIA 的驱动和 CUDA 已经安装,版本如下:

fc3e0f06eb3e2928957a00853cce3c9f.png

照着网上的资料一步步操作,你总会遇到这样或那样的问题,这并不是作者的问题,而是这个世界变化太快。本次部署我也碰到了一些问题,所以记录一下。

  1. 上 Disco Diffusion 的 Github 下载代码,其中包含 Dockerfile:

git clone https://github.com/alembics/disco-diffusion
  1. 构建 Docker 镜像。

构建 Docker 镜像需要分两步,首先是构建 Prep 镜像,然后 main 镜像,次序不能反,因为 main 镜像依赖于 Prep 镜像。

  1. cd docker/prep
  2. docker build -t disco-diffusion-prep:5.1 .
  3. cd ../main
  4. docker build -t disco-diffusion:5.1 .

在构建 Prep 镜像时可能会碰到如下错误:

  1. Step 5/16 : RUN wget --no-directories --progress=bar:force:noscroll -P /scratch/models https://v-diffusion.s3.us-west-2.amazonaws.com/512x512_diffusion_uncond_finetune_008100.pt
  2.  ---> Running in e777eaa1659f
  3. --2022-05-26 01:36:57--  https://v-diffusion.s3.us-west-2.amazonaws.com/512x512_diffusion_uncond_finetune_008100.pt
  4. Resolving v-diffusion.s3.us-west-2.amazonaws.com (v-diffusion.s3.us-west-2.amazonaws.com)... 52.92.146.186
  5. Connecting to v-diffusion.s3.us-west-2.amazonaws.com (v-diffusion.s3.us-west-2.amazonaws.com)|52.92.146.186|:443... connected.
  6. HTTP request sent, awaiting response... 404 Not Found
  7. 2022-05-26 01:36:58 ERROR 404: Not Found.

原因就在于模型文件在服务器上已经不存在,研究了一下 colab 中的代码,发现还有一套 fallback 地址(备用地址),所以将 docker/prep/Dockerfile 中的地址修改为:

https://huggingface.co/lowlevelware/512x512_diffusion_unconditional_ImageNet/resolve/main/512x512_diffusion_uncond_finetune_008100.pt

如果其它的模型还存在问题,可以依葫芦画瓢,修改为备用地址即可。

不过有一个模型死活下载不下来:

  1. --2022-05-26 04:47:12--  (try:20)  https://cloudflare-ipfs.com/ipfs/Qmd2mMnDLWePKmgfS8m6ntAg4nhV5VkUyAydYBp8cWWeB7/AdaBins_nyu.pt
  2. Connecting to cloudflare-ipfs.com (cloudflare-ipfs.com)|31.13.81.4|:443... failed: Connection timed out.
  3. Connecting to cloudflare-ipfs.com (cloudflare-ipfs.com)|2001::6ca0:a936|:443... failed: Cannot assign requested address.
  4. Giving up.

没有办法,只能上网找一个,先下载下来,地址:

https://drive.google.com/drive/folders/1nYyaQXOBjNdUJDsmJpcRpu6oE55aQoLA

然后通过 COPY 指令从 host 复制到 Docker 容器:

COPY AdaBins_nyu.pt /scratch/pretrained/
  1. 启动 Docker 容器,运行 Disco Diffusion 脚本。

事先准备好 images_out 和 init_images 两个目录, 前一个目录存放生成的图像,后一个是初始图像存放的位置。然后映射到容器,这样,在 Docker 容器中生成的图像才好被 host 主机访问到:

  1. docker run --rm -it \
  2.     -v $(echo ~)/disco-diffusion/images_out:/workspace/code/images_out \
  3.     -v $(echo ~)/disco-diffusion/init_images:/workspace/code/init_images \
  4.     --runtime=nvidia \
  5.     --name="disco-diffusion" --ipc=host \
  6.     --user $(id -u):$(id -g) \
  7. disco-diffusion:5.1 python disco-diffusion/disco.py

如果遇到权限问题:

PermissionError: [Errno 13] Permission denied: '/workspace/code/images_out/TimeToDisco'

可以修改一下 host 下文件的 owner 或者 mode:

sudo chown alex:alex ~/disco-diffusion/images_out/

然后就是漫长的等待。在没有修改任何参数的情况下,生成了 49 张图片,大小为 1280x768,大家可以欣赏一下其中的几张:

d3e252de2d3b1ba080eb913da084608c.png

bb30fbe334a07e22b94eb48109701900.png

4d7e1c9b065fd9bd281f8e25b437654e.png

值得一提的是,AI 程序对同一个输入,每次输出并不相同,这和传统的计算机程序不一样,所以要获得好的结果,需要多多尝试,挑选出最好的结果。

和菜头自从迷上了 AI 作画后,其公众号的题图都是自己生成,现在网上也有一些大神,通过 AI 画出了不少令人惊艳的作品。下面这篇文章尝试了古风插画,我非常喜欢:

AI 能理解和表达古诗意境吗?来看看西乔用人工智能辅助创作的古风插画(第一辑)

你对 AI 作画怎么看,先动手尝试一下再来说说你的看法吧!

e53af31d1d73249e0a03d138c433405e.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/873343
推荐阅读
相关标签
  

闽ICP备14008679号