기계 개 
캐슬 씨 일몰 미야자키 애니메이션 
얼마나 많은 꽃이 떨어지는가 
닭고기의 절반과 반 남자, 강합니다 
닭, 당신은 너무 아름다워요 
Skypaint, Skypaint를 방문하십시오 
WeChat에서 QR 코드를 스캔하여 미니 프로그램에서 경험할 수도 있습니다. 
SKYPAINT 텍스트 생성 사진 모델은 주로 두 부분, 즉 프롬프트 단어 텍스트 인코더 모델과 확산 모델로 구성됩니다. 따라서 우리의 최적화는 또한 두 단계로 나뉩니다. 첫째, OpenAi-Clip을 기반으로 Prompt Word Text Encoder 모델은 SKYPAINT가 중국어 및 영어 인식 기능을 갖도록 최적화되어 확산 모델이 최적화되어 SKYPAINT가 고품질 사진을 제작할 수있는 현대적인 예술적 기능을 갖도록 최적화됩니다.
모델 다운로드 주소 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은 중국어 및 영어 이중 언어 클립 모델을 사용하는 효율적인 방법을 사용하여 OpenAi-Clip 모델의 효율적인 증류를 달성하기 위해서만 사용하는 클립 모델이며, 동시에 데이터 임계 값이 크게 줄어 듭니다. 이 방법은 OpenAi-Clip의 텍스트 인코더 만 변경하고 OpenAi-Clip을 사용하여 이미지 및 텍스트 검색 기능을 실현하는 데 사용할 수 있습니다.
OpenAi-Clip의 Text_encoder는 교사 모델로 사용되며 학생 모델은 교사 모델과 같은 크기의 다국어 버트 모델을 사용합니다 L1, L2, COS 거리는 학생 모델의 중국어 및 영어 hidden_state를 점차적으로 교사 모델의 hidden_state에 접근하는 데 사용됩니다. 병렬 코퍼스의 중국어와 영어에는 자연적 불평등 속성이 있기 때문에 병렬 중국어와 영어를 가능한 한 가깝게 만들기 위해 훈련 과정에서 중국어 디코더를 추가하여 중국어와 영어 hidden_state를 디코더의 hidden_state 입력으로 사용하고 번역 작업을 통해 중국어와 영어의 조정을 달성하는 데 도움을주었습니다.
현재, 우리는 주로 FlickR30K-CN에서 SkyClip의 제로 샷 성능을 평가했으며, 여러 관련 오픈 소스 모델을 비교의 공정성을 보장하기 위해 여러 모델 크기에 대한 평가 과정에 대한 OpenAI-Clip VIT-L/14 크기를 기반으로 한 모델을 선택했습니다.
Flickr30K-CN 검색 :
| 일 | 텍스트-이미지 | 이미지-텍스트 | 씨 | ||||
|---|---|---|---|---|---|---|---|
| 설정 | 제로 샷 | 제로 샷 | |||||
| 메트릭 | r@1 | r@5 | r@10 | r@1 | r@5 | r@10 | |
| 태조 326m | 53.8 | 79.9 | 86.6 | 64.0 | 90.4 | 96.1 | 78.47 |
| altclip | 50.7 | 75.4 | 83.1 | 73.4 | 92.8 | 96.9 | 78.72 |
| Wukong | 51.9 | 78.6 | 85.9 | 75 | 94.4 | 97.7 | 80.57 |
| R2D2 | 42.6 | 69.5 | 78.6 | 63.0 | 90.1 | 96.4 | 73.37 |
| CN- 클립 | 68.1 | 89.7 | 94.5 | 80.2 | 96.6 | 98.2 | 87.87 |
| 스카이 클립 | 58.8 | 82.6 | 89.6 | 78.8 | 96.1 | 98.3 | 84.04 |
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 ))당사의 데이터는 필터링 된 Laion 데이터 세트를 교육 데이터로 사용하며 텍스트는 'SAI-V1 Art'가 태그로 선행됩니다. 사전 훈련 된 모델은 미리 훈련으로 안정적인 확산 -V1-5를 사용하고 16 A100은 50 시간 동안 사용되었습니다. 현재이 모델은 여전히 지속적으로 최적화되고 있으며 향후 더 안정적인 모델 업데이트가있을 것입니다.

