Home
Softono
SkyPaint-AI-Diffusion

SkyPaint-AI-Diffusion

Open source MIT
646
Stars
37
Forks
4
Issues
9
Watchers
3 years
Last Commit

About SkyPaint-AI-Diffusion

SkyPaint AI Diffusion is an optimized text-to-image model based on Stable Diffusion, developed by Singularity AI to generate high-quality modern art style images from Chinese, English, or mixed-language prompts. The model leverages SkyCLIP, an efficient bilingual text encoder trained via knowledge distillation from OpenAI CLIP, which significantly reduces computational requirements while maintaining strong cross-lingual understanding capabilities. Key features include native support for Chinese and English inputs, compatibility with Stable Diffusion 1.x official models and their fine-tuned versions, and the ability to preserve standard prompt engineering methods. The system comprises two main components: the optimized bilingual text encoder and the diffusion model fine-tuned for modern artistic styles. SkyPaint enables users to create diverse visual content ranging from mechanical subjects to traditional Chinese poetry imagery and fantasy scenes. The model has been evaluated on the Flickr30K-CN dataset showin

Platforms

Web Self-hosted

SkyPaint-Chinese-EN-v-1.0

English Document

Hugging Face 模型主页:链接

SkyPaint是由奇点智源开发的中英双语文本生成图像的项目,目前还在持续更新优化中。

使用我们的模型,输入若干中文或英文的文本,便可让机器像人类画家一样,画出富有现代艺术风格的作品。下面是一些示例:

效果展示

中文

机械狗

城堡 大海 夕阳 宫崎骏动画

花落知多少

半鸡半人,强壮

鸡你太美

体验试用

请访问天工巧绘SkyPaint image

你也可以微信扫描二维码,在小程序上体验: gh_0e89c7c92d3f_430

模型优势

SkyPaint文本生成图片模型主要由两大部分组成,即提示词文本编码器模型和扩散模型两大部分。因此我们的优化也分为两步: 首先,基于OpenAI-CLIP优化了提示词文本编码器模型使得SkyPaint具有中英文识别能力, 然后,优化了扩散模型,使得SkyPaint具有现代艺术能力可以产生高质量图片。

模型功能

  • 支持汉语和英文以及中英文混合提示词输入
  • 支持生成现代艺术风格的高质量图片
  • 支持stable_diffusion_1.x官方模型及相关微调模型的英文提示词
  • 保留stable_diffusion提示词的使用习惯和方法

测试用例

模型下载地址 SkyPaint-v1.0

from diffusers import StableDiffusionPipeline

device = 'cuda'
pipe = StableDiffusionPipeline.from_pretrained("path_to_our_model").to(device)

prompts = [
    '机械狗',
    '城堡 大海 夕阳 宫崎骏动画',
    '花落知多少',
    '鸡你太美',
]

for prompt in prompts:
    prompt = 'sai-v1 art, ' + prompt
    image = pipe(prompt).images[0]  
    image.save("%s.jpg" % prompt)

————————————————————————————————————————————————

SkyCLIP模型简介

SkyCLIP是我们采用一种高效的训练中英双语CLIP模型的方法得到的CLIP模型,该方法仅需要使用文本数据即可实现对OpenAI-CLIP模型的高效蒸馏,大幅降低了数据门槛,同时训练所需算力要求相较于原始CLIP模型减少90%以上,方便开源社区可以进行复现/微调。该方法仅改变了OpenAI-CLIP的文本编码器,可搭配使用OpenAI-CLIP的图像编码器实现图文检索功能。

SkyCLIP训练数据来源

  • 中英文机器翻译任务平行语料
  • 联合国中英文平行语料
  • LAION中英文语料(部分)
  • Wukong中文语料(部分)
  • AI-Challenger翻译任务中英文语料
  • 古诗词中英文语料
  • 提示词手册/魔法书中常见词组合而成的中英文语料

SkyCLIP训练方法

将OpenAI-CLIP的text_encoder作为教师模型并且冻结参数,学生模型采用和教师模型同样大小的多语言BERT模型,训练时英文输入通过教师模型获取相应的t_en_hiddent_state,英文和中文分别通过学生模型获取相应s_en_hiddent_state,s_zh_hidden_state,采用l1、l2、cos距离等构造损失函数使得学生模型的中英文hiddent_state逐渐靠近教师模型的hiddent_state。由于平行语料的中文和英文存在天然的不等长性质,为了使得平行的中文和英文尽量接近,训练过程中我们还添加了中文解码器,使用学生模型的中英文hiddent_state作为解码器的hidden_state输入,通过翻译任务来辅助实现中文和英文的对齐目的。

SkyCLIP模型评估

目前我们主要评估了SkyCLIP在Flickr30K-CN的zero-shot表现,主要对比了若干具备中文能力的相关开源模型,为确保对比的公平性,具有多个模型尺寸的我们均选取基于OpenAI-CLIP ViT-L/14尺寸的模型,我们评估的流程参考了Chinese-CLIP所提供的评估脚本。

Flickr30K-CN Retrieval:

TaskText-to-ImageImage-to-Text MR
SetupZero-shotZero-shot
MetricR@1R@5R@10R@1R@5R@10
Taiyi-326M53.879.986.664.090.496.178.47
AltCLIP50.775.483.173.492.896.978.72
Wukong51.978.685.97594.497.780.57
R2D242.669.578.663.090.196.473.37
CN-CLIP68.189.794.580.296.698.287.87
SkyCLIP58.882.689.678.896.198.384.04

SkyCLIP计算图文相似度

from PIL import Image
import requests
import clip
import torch
from transformers import BertTokenizer
from transformers import CLIPProcessor, CLIPModel, CLIPTextModel
import numpy as np

query_texts = ['一个人', '一辆汽车', '两个男人', '两个女人']  # 这里是输入提示词,可以随意替换。
# 加载SkyCLIP 中英文双语 text_encoder
text_tokenizer = BertTokenizer.from_pretrained("./tokenizer")
text_encoder = CLIPTextModel.from_pretrained("./text_encoder").eval()
text = text_tokenizer(query_texts, return_tensors='pt', padding=True)['input_ids']

url = "http://images.cocodataset.org/val2017/000000040083.jpg"  #这里可以换成任意图片的url
# 加载CLIP的image encoder
clip_model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
clip_text_proj = clip_model.text_projection
processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")
image = processor(images=Image.open(requests.get(url, stream=True).raw), return_tensors="pt")

with torch.no_grad():
    image_features = clip_model.get_image_features(**image)
    text_features = text_encoder(text)[0]
    # sep_token对应于openai-clip的eot_token
    sep_index = torch.nonzero(text == student_tokenizer.sep_token_id)
    text_features = text_features[torch.arange(text.shape[0]), sep_index[:, 1]]
    # 乘text投影矩阵
    text_features = clip_text_proj(text_features)
    image_features = image_features / image_features.norm(dim=1, keepdim=True)
    text_features = text_features / text_features.norm(dim=1, keepdim=True)
    # 计算余弦相似度 logit_scale是尺度系数
    logit_scale = clip_model.logit_scale.exp()
    logits_per_image = logit_scale * image_features @ text_features.t()
    logits_per_text = logits_per_image.t()
    probs = logits_per_image.softmax(dim=-1).cpu().numpy()
    print(np.around(probs, 3))

扩散模型 Diffusion Model

我们的数据采用了筛选过的Laion数据集作为训练数据,同时在文本前面加上了 'sai-v1 art' 作为tag使模型能够更快速的学习到我们想要的风格及质量。 预训练模型采用了stable-diffusion-v1-5 作为预训练,使用了16块A100训练了50个小时。 目前模型还在持续优化中,后续会有更稳定的模型更新。

License

加入开发者群

微信扫码,加入开发者群——

paint

感兴趣别忘了star一下~

image