Skip to content

Latest commit

 

History

History

disco_diffusion_clip_vitb32

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

disco_diffusion_clip_vitb32

模型名称 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

二、安装

三、模型API预测

  • 1、命令行预测

    • $ 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
  • 2、预测代码示例

    • 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')
  • 3、API

    • 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使用文档

四、服务部署

  • PaddleHub Serving可以部署一个在线文图生成服务。

  • 第一步:启动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