模型名称 | disco_diffusion_clip_vitb32 |
---|---|
类别 | 图像-文图生成 |
网络 | dd+clip ViTB32 |
数据集 | - |
是否支持Fine-tuning | 否 |
模型大小 | 3.1GB |
最新更新日期 | 2022-08-02 |
数据指标 | - |
-
输入文本 "A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation."
-
输出图像
- 生成过程
disco_diffusion_clip_vitb32 是一个文图生成模型,可以通过输入一段文字来生成符合该句子语义的图像。该模型由两部分组成,一部分是扩散模型,是一种生成模型,可以从噪声输入中重建出原始图像。另一部分是多模态预训练模型(CLIP), 可以将文本和图像表示在同一个特征空间,相近语义的文本和图像在该特征空间里距离会更相近。在该文图生成模型中,扩散模型负责从初始噪声或者指定初始图像中来生成目标图像,CLIP负责引导生成图像的语义和输入的文本的语义尽可能接近,随着扩散模型在CLIP的引导下不断的迭代生成新图像,最终能够生成文本所描述内容的图像。该模块中使用的CLIP模型结构为ViTB32。
更多详情请参考论文:Diffusion Models Beat GANs on Image Synthesis 以及 Learning Transferable Visual Models From Natural Language Supervision
-
-
paddlepaddle >= 2.0.0
-
paddlehub >= 2.2.0 | 如何安装PaddleHub
-
-
-
$ hub install disco_diffusion_clip_vitb32
- 如您安装时遇到问题,可参考:零基础windows安装 | 零基础Linux安装 | 零基础MacOS安装
-
-
-
$ hub run disco_diffusion_clip_vitb32 --text_prompts "A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation." --output_dir disco_diffusion_clip_vitb32_out
-
-
-
import paddlehub as hub module = hub.Module(name="disco_diffusion_clip_vitb32") text_prompts = ["A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation."] # 生成图像, 默认会在disco_diffusion_clip_vitb32_out目录保存图像 # 返回的da是一个DocumentArray对象,保存了所有的结果,包括最终结果和迭代过程的中间结果 # 可以通过操作DocumentArray对象对生成的图像做后处理,保存或者分析 da = module.generate_image(text_prompts=text_prompts, output_dir='./disco_diffusion_clip_vitb32_out/') # 手动将最终生成的图像保存到指定路径 da[0].save_uri_to_file('disco_diffusion_clip_vitb32_out-result.png') # 展示所有的中间结果 da[0].chunks.plot_image_sprites(skip_empty=True, show_index=True, keep_aspect_ratio=True) # 将整个生成过程保存为一个动态图gif da[0].chunks.save_gif('disco_diffusion_clip_vitb32_out-result.gif')
-
-
-
def generate_image( text_prompts, style: Optional[str] = None, artist: Optional[str] = None, width_height: Optional[List[int]] = [1280, 768], seed: Optional[int] = None, output_dir: Optional[str] = 'disco_diffusion_clip_vitb32_out'):
-
文图生成API,生成文本描述内容的图像。
-
参数
- text_prompts(str): 输入的语句,描述想要生成的图像的内容。通常比较有效的构造方式为 "一段描述性的文字内容" + "指定艺术家的名字",如"a beautiful painting of Chinese architecture, by krenz, sunny, super wide angle, artstation."。prompt的构造可以参考网站。
- style(Optional[str]): 指定绘画的风格,如'watercolor','Chinese painting'等。当不指定时,风格完全由您所填写的prompt决定。
- artist(Optional[str]): 指定特定的艺术家,如Greg Rutkowsk、krenz,将会生成所指定艺术家的绘画风格。当不指定时,风格完全由您所填写的prompt决定。各种艺术家的风格可以参考网站。
- width_height(Optional[List[int]]): 指定最终输出图像的宽高,宽和高都需要是64的倍数,生成的图像越大,所需要的计算时间越长。
- seed(Optional[int]): 随机种子,由于输入默认是随机高斯噪声,设置不同的随机种子会由不同的初始输入,从而最终生成不同的结果,可以设置该参数来获得不同的输出图像。
- output_dir(Optional[str]): 保存输出图像的目录,默认为"disco_diffusion_clip_vitb32_out"。
-
返回
- ra(DocumentArray): DocumentArray对象, 包含
n_batches
个Documents,其中每个Document都保存了迭代过程的所有中间结果。详细可参考DocumentArray使用文档。
- ra(DocumentArray): DocumentArray对象, 包含
-
-
-
PaddleHub Serving可以部署一个在线文图生成服务。
-
-
运行启动命令:
-
$ hub serving start -m disco_diffusion_clip_vitb32
-
这样就完成了一个文图生成的在线服务API的部署,默认端口号为8866。
-
NOTE: 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
-
-
-
配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果,返回的预测结果在反序列化后即是上述接口声明中说明的DocumentArray类型,返回后对结果的操作方式和使用generate_image接口完全相同。
-
import requests import json import cv2 import base64 from docarray import DocumentArray # 发送HTTP请求 data = {'text_prompts': 'in the morning light,Overlooking TOKYO city by greg rutkowski and thomas kinkade,Trending on artstation.'} headers = {"Content-type": "application/json"} url = "http://127.0.0.1:8866/predict/disco_diffusion_clip_vitb32" r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 获取返回结果 da = DocumentArray.from_base64(r.json()["results"]) # 手动将最终生成的图像保存到指定路径 da[0].save_uri_to_file('disco_diffusion_clip_vitb32_out-result.png') # 将生成过程保存为一个动态图gif da[0].chunks.save_gif('disco_diffusion_clip_vitb32_out-result.gif')
-
-
1.0.0
初始发布
$ hub install disco_diffusion_clip_vitb32 == 1.0.0