1代的DALLE使用VQ-VAE 的改进版,2代的DALLE2 通过使用扩散模型将图片的生成提升到了一个新的高度,但是由于其计算量很大而且没有开源,我们普通用户并没有办法使用,但是Stable Diffusion 的出现改变现状,可以让我们普通用户也可以直接使用,并且以前相对于 Disco Diffusion, Stable Diffusion 生成的图片更加实用;相对于 DALLE 2,Stable Diffusion 需要占用的资源更少,这样我们也可以在自己的电脑中使用它生成高质量的图片。
在这篇文章中,将展示如何使用抱脸的扩散包通过文本生成图像,还有就一个一个不好的消息,因为这个模型的出现google的colab可能又要增加一些限制了。
从 DALLE 到Stable Diffusion
我们前面的文章也介绍过 OpenAI 的 DALLE-2 模型还有他的开源实现,它可以让我们从文本中创建高质量的图像。
但是DALLE2是收费的用户只有一些免费的额度,如果免费额度使用完毕就需要付费了,所以我决定寻找替代方案,并偶然发现了 Hugging Face 的一条新闻,他们发布了一个扩散模型的包diffusers ,可以让我们直接使用。
使用diffusers 从文本生成图像
首先,使用扩散器包从文本生成图像我们首先要有一个GPU,这里就是用google 的colab,但是可能colab以后会对这样的应用进行限制了,这个我们在最后加以说明。
有了gpu下面就是要安装包:
diffusers==0.2.4
— 这是我们主要的包transformers
— 这个是抱脸的成名的基础包scipy
— 科学计算的ftfy
— 处理一些文本编码问题ipywidgets>=7,<8
— notebook的一个小组件的基础包torch
—这个就不用说了 colab也已经安装了pillow
— 处理图片的 colab也带了
所以我们只要用下面命令安装就可以了:
!pip install diffusers==0.2.4
!pip install transformers scipy ftfy
!pip install "ipywidgets>=7,<8"
我们安装ipywidgets的目的是在 Google Colab 上启用外部的小部件
# enabling widgets (to be able to login to hugging face)
from google.colab import output
output.enable_custom_widget_manager()
然后需要用token登录Hugging Face
from huggingface_hub import notebook_login
notebook_login()
如果执行成功会出现一个小部件,在其中输入来自 Hugging Face 的token后会看到如下内容:
Login successful Your token has been saved to /root/.huggingface/token Authenticated through git-credential store but this isn't the helper defined on your machine. You might have to re-authenticate when pushing to the Hugging Face Hub. Run the following command in your terminal in case you want to set this credential helper as the default git config --global credential.helper store
这就说明我们的环境已经准备完毕了,下面开始创建我们的流程:
import torchfrom diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=True)
在这里我们使用的是 v1-4 模型,然后将其放入GPU中(还有很多其他模型,可以随意使用)
pipe = pipe.to("cuda")
使用 Pytorch 的 autocast 运行推理
from torch import autocast
prompt = "photo of a panda surfing"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]
image.save(f"panda_surfer.png")
image
结果如下:
结果非常不错。我们也可以调整一些参数,例如 guide_scale、step和设置随机种子(用于确定性输出),来控制我们的模型输出,具体的更详细的使用方式请看:
https://huggingface.co/blog/stable_diffusion
Google Colab 的 GPU 资源可能要撑不住了
最后说下我们上面提到的问题,Colab 有 Pro 和 Pro Plus 服务,如果你付费,那么获得 GPU 资源更有保障,可以使用更大的显存,占用资源时间可以更长。拿 Pro 来说,每一个月只需要缴纳10美元,你就可以随便使,保障随时都有 GPU 可以用。
但是最近,Google 修改了服务条款。即便你每月付费使用 Pro 和 Pro + 服务,却也依然要受到明确的计算资源限制了
Google Colab 从来就禁止挖矿,这个是我们早就知道的,但是Stable Diffusion的出现,可以让我们用 Google Colab 的 GPU 资源当成后台,然后提供自家的人工智能绘图服务,这个就很离谱了。虽然Google Colab 会对长期不操作的项目进行自动关闭,所以每次提供的时长不稳定。但是毕竟可以使用脚本自动重启啊。
OPEN AI的报价是大概0.15美元一张图片,而Colab只需要10美元就可以随便用,利用 Gradio 等开放框架提供 Web APP 界面进行服务,那你的成本几乎是0. 于是你可以把单次服务价格压到足够低,然后依然赚钱。所以google只能紧急修改协议,确保没有人可以用这种看似合法的手段没完没了「薅羊毛」。
并且有的用户已经收到了取消pro服务的邮件,并进行了退款。
我们先不论好与坏,但是这件事情可以说是人工智能真的抓住了实际痛点,当大家发现人工智能绘图的效果真的可以达到甚至是部分达到我们期望的时候,这样的潜在的需求就爆发出来了,因为我们的创造模型的目的是解决我们实际问题,而不是去创造了一个人工智障并且还要吹x替代人类。
在这件事上我看到了人工智能应用融入到了我们的生活。而且理由还十分的合理,Google 找不到禁止使用它的理由,只能转而采用资源配给制来缓解压力,我觉得这才是人工智能发展的最终目标。最后还是希望google能找到一个更好的解决办法,毕竟Colab真的很好用。