找不到合适的配图,一直以来是我对写作心存畏惧的原因之一。正所谓「一图胜千言」,很多时候写好了的文字,总差一张恰到好处的配图画龙点睛。

另一方面,中文环境下比文字版权状况更糟糕的,可能就是图片版权了。不少新媒体 / 自媒体不能恰当地引用图片并标注来源,其实累积了不小的法律风险1

所幸少数派的大部分作者专注于软硬件分享,可以或截图、或自拍、或借用官方商业图片(毕竟通常是正面宣传,没有太大的风险),从而规避了上述问题2

所以今天分享的内容,可能只适用于少数派了吧 : )

什么是 DALL · E?

2021年1月,致力于「用通用人工智能造福全人类」的 OpenAI 公司基于其 GPT-3 模型发布了划时代的 DALL·E,实现了从文本生成图像。

来自 DALL·E 论文的 Figure 3,第一行图片是正对照,第二行图片是由 DALL·E 基于每列标题自动生成的图片,剩余三行奇奇怪怪的图片由其他对比算法生成。

DALL·E 的弱鸡版(mini)去年 4 月公开,完全版(mega)一直拖到今年 5 月,DALL·E 2 都正式发布了3,才趁大家都在排队时偷偷放出。

所以我们在指南中建议如下策略,并在后文提供每个策略的具体步骤:

  1. 只是想测试看看效果,可以直接使用 Hugging Face 上的 dalle-mini;
  2. 需要程序化频繁调用,可以考虑在 Google Colab 部署一份私有的 mini;
  3. 追求更好的生成效果,有条件的同学可以尝试一下 mega。

直接使用 mini 版

  1. 访问 dalle-mini 模型在 Hugging Face 上的页面
  2. 在文本输入框填入语句,点击 Run 运行;
  3. 等待 20-60s 就能看到结果了,就这么简单!
为了方便对比效果,我们统一使用官方案例「an armchair in the shape of an avocado(牛油果形状的扶手椅)」作为输入

你可能会问为什么图片只有 256 x 256 这么大,抱歉忘记在上一节中说了,DALL · E 的能力就是如此设计的,二代在这方面有明显改善。如果想基于一代生成更高清的图片,可以尝试专门用于图片高清放大的 AI 模型,这里就不展开啦~

云上部署 mini 版

  1. 在 Google Colab 打开 DALL · E 的代码
  2. 按顺序运行各代码块(如果有任何提示记得点击 run anyway):
安装依赖
选择 mini 模型(付费大佬可以选择 mega 或 mega_full)
运行后端服务并等待
等到提示服务运行在 8000 端口,拷贝上面红框处的地址
访问 https://saharmor.github.io/dalle-playground/,填入刚才的地址,在文本输入框填入描述后回车运行即可。相比 Hugging Face 上的 mini 版本,感觉 Google Colab 是「多核版」的。

本地部署 mega 版

有勇气在本地(或服务器上)自己运行 mega 版的话,应该不太需要我描述具体步骤,一句话带过:从 代码仓库 clone 下来后,用 docker compose 方式运行起 backend 和 interface 即可。

说实话没感觉与 mini 有太大的区别,考虑心理作用的话,勉强可以说画质有那么一丢丢的提高。值得注意的是,左下图是以上 27 张图中最接近官方宣传效果的(见下图)
官方在介绍 DALL · E 的博客文章中给出的样例输出 https://openai.com/blog/dall-e/

我在本地跑 mega_full 时(对的,其实还有 mega_full,如果 GPU 显存够 12G 就可一试),遇到了一些问题,在此列出以便大家避坑:

  1. 本地 build dalle-backend image 时,特别容易因为网络问题失败,在 Dockerfile 中利用 ENV 语句加上 proxy 会好很多;
  2. 类似的,build dalle-interface image 时,可以在 RUN npm install 后面补上一个 --registry=https://registry.npmmirror.com
  3. 跑 interface 的时候可能会报 eslint 的 warning,修改一下 package.json 跳过:
  4. 初次启动 backend 时会从 wandb 下载模型参数,按道理应该会有一个进度条,但在我的环境中经常不予显示,这个时候可以通过检查 ~/.cache/wandb 下面的文件大小的变化来确认进程没有挂……

最后的 FAQs

DALL · E 是不是有点过时了?

从算法模型上来说是的,但它仍然是普通用户能够直接、免费体验的最先进的文本到图像生成器了。

能否再给一些生成案例?

「logo of pi」

为什么 Hugging Face 的版本有点奇怪?

本文初版发布后,我突然从社交平台上得知了一个令人震惊的事实:原来 Hugging Face 上的 DALL · E Mini(见前文「直接使用 Mini 版」一节)是一个叫 craiyon.com 的团队盗版的。

在 OpenAI 的要求下,模型已改名为 craiyon 但 Hugging Face 页面上没有修改标题,只是加了一行小字

craiyon 用了一个更简单的模型(BART)搭配更少的训练数据,在 Hugging Face 上构建了一个易于体验的文本-图片生成器。从前面的案例图其实也能够看出来,craiyon 生成的牛油果椅的外形其实比较类似,远不如正版 DALL · E 那么千奇百怪。而且在一些 edge case 中,比如上面案例中的「people mountain people sea」,craiyon 的生成结果明显不如 DALL · E。

据 Hugging Face 的 CEO 说,craiyon 刚上线的第一个晚上他们的工程师一夜未睡。现在这个模型每天被大家调用数万次以上,已成为互联网上最受欢迎的 meme 生成器4。数万次调用看上去不多,但直接导致现在想直接体验 craiyon 平均需要等待 60 秒以上,而我刚开始写这篇文章时只需要 20 秒。

突然感觉本文更有价值了 : )