新智元报道
编辑:Aeneas 好困
最近,Stable Diffusion正在网上大火,谁用谁是艺术家。
作为一种从文本到图像的AI工具,它之所以能掀起这么大的波澜,是因为它能够从简单的文本提示生成著名人物的逼真图像。
与传统的竞争对手Dall-E2相比,Stable Diffusion把生成图像的速度提高了足足三倍。
论文地址:https://arxiv.org/abs/2112.10752
哈利·波特变权游
让我们看一看,用Stable Diffusion把《哈利·波特》中的角色变成《权力的游戏》中的角色,是什么效果吧。
艾玛·沃特森(赫敏·格兰杰)
Prompt: !dream “emma watson as hermione granger in game of thrones “ -n 4 -i -S 3220803958
赫敏格兰杰进入权游的世界后,挺像丹妮莉丝·坦格利安的。
评论:可塑性很强的演员,非常适合《权力的游戏》系列。
丹尼尔·雷德克里夫(哈利·波特)
Prompt: !dream “Daniel Radcliffe as Harry Potter in game of thrones “ -n 5 -i -S 1325472740
他看起来像琼恩·雪诺吗?好像并不太像😂。
非要说的话,可能更像山姆威尔·塔利一些。
鲁珀特·格林特(罗恩·韦斯莱)
Prompt: !dream “rupert grint as ron weasley in game of thrones “ -n 5 -i -S 2721137669
不知道为什么,罗恩在照片中会这么显小。
乍一看,他看起来像拉姆齐·博尔顿(剥皮警告)。但他的形象一点都不像一个能在权力的游戏中呼风唤雨、指挥部下的人。
拉尔夫·费恩(伏地魔)
Prompt: !dream “lord voldemort in game of thrones “ -n 5 -i -S 2427598534
伏地魔变身维斯特洛武士后,还挺像模像样的。奇妙的是,他与Night King也很适配。
迈克尔·刚本(阿不思·邓布利多)
Prompt: !dream “ian mckellen as gandalf in game of thrones “ -n 5 -i -S 2948575077
谁会想到,霍格沃茨的校长进入权游后,简直就像是从这里土生土长的角色。他看起来像是洋葱骑士(Davos Seaworth)和沃尔德·弗雷(Walder Frey)的结合。
那么, 这个神奇的模型,究竟是怎么做到的呢?
10步带你理解Stable Diffusion
顾名思义,Stable Diffusion基于的是扩散模型(Diffusion Model)。
其中,扩散是将小的、随机的噪声重复地添加到图像中的过程(从左到右)。而扩散模型是将这一过程逆转,将噪声逐位变成图像(从右到左)。
那么,扩散模型是如何将噪音变成图像的呢?很简单,训练一个神经网络即可。
现在有噪声图像的序列=x_1, x_2, ... x_T。神经网络通过学习一个函数f(x,t),对x进行「一点点」去噪,并产生x在时间步骤t-1时的样子。
要想把纯噪音变成高清图像,只需多次应用f即可!
所以说,扩散模型的输出实际上只是:f(f(f(....f(N, T), T-1), T-2) ..., 2, 1)。
其中,N是纯噪音,T是扩散步骤的数量,神经网络f则通常被实现为一个UNet。
实践上,在大型512 x 512图像上训练和计算扩散模型是非常缓慢和昂贵的。
所以,Stable Diffusion是在图像的_embedding_上进行计算的,而不是直接在图像本身上。
因此,Stable Diffusion的工作分为两步。
第一步:使用编码器将图像「x」压缩成一个较低维度的潜空表征「z(x)」;
第二步:在z(x)上运行扩散和去噪,而不是x。
潜在空间表示z(x)的维度比图像x小得多。这使得_latent_扩散模型比普通扩散模型更快、更有表现力。
文字提示在哪里呢?
其实,Stable Diffusion并没有像最开始所说的那样学习一个函数f(x,t)来对x进行「一点点」的去噪。而是学习了一个函数f(x,t,y),其中y是指导x去噪的context(上下文)。
比如,在下面这张图中,y就是图像的标签「北极狐」。
当使用Stable Diffusion生成图像时,输入的文本提示就是y。
那么,模型又是如何处理上下文y的呢?
y和时间步长t一起,可以通过以下两种方式注入潜在空间表示z(x)中:
1)简单串联
2)交叉注意
而Stable Diffusion则同时使用这两种方法。
当然,上下文机制实际是非常灵活的。
比如让y=一个图像掩码,或者y=一个场景分割,而不只是让y=一个图像标签。
经过在不同的数据上训练的Stable Diffusion,就可以做图像修复和语义图像合成了 。
(示意图)
在Stable Diffusion论文中,通过改变「上下文」的表征方法,作者展示了图像修复和图像合成的情况。
看到这里,是不是感觉手痒了?
模型完全公开了!
你说巧不巧,8月22日团队发文表示,1.4版本的Stable Diffusion模型正式向大众开放。
团队表示,v1.4的推荐权重是470k,比提供给研究人员的v1.3的440k,多了几个训练步骤。
目前,模型仅支持英伟达显卡,最终占用的显存为6.9Gb。
在接下来的时间里,团队还将持续发布模型的优化版本,以及更多性能和质量得到改善的变体和架构。
之后,Stable Diffusion模型也将能够在AMD、苹果M1/M2和其他芯片组上运行。
不想自己去调教的话,也可以尝试HuggingFace的demo。
地址:https://huggingface.co/spaces/stabilityai/stable-diffusion
参考资料:
https://medium.com/mlearning-ai/ai-transforms-five-harry-potter-cast-into-game-of-thrones-characters-39e4af6b426e
https://stability.ai/blog/stable-diffusion-public-release