สุนัขกลไก 
อนิเมชั่น Sea Castle Sea Sunset Miyazaki 
มีกี่ดอกไม้ที่ตกลงมา 
ไก่ครึ่งหนึ่งและผู้ชายครึ่งหนึ่งแข็งแรง 
ไก่คุณสวยมาก 
กรุณาเยี่ยมชม Skypaint, Skypaint 
นอกจากนี้คุณยังสามารถสแกนรหัส QR บน WeChat และสัมผัสได้ในโปรแกรม MINI: 
รูปแบบรูปภาพการสร้างข้อความ Skypaint ส่วนใหญ่ประกอบด้วยสองส่วนคือโมเดลตัวเข้ารหัสข้อความที่พร้อมใช้งานและโมเดลการแพร่กระจาย ดังนั้นการเพิ่มประสิทธิภาพของเราจึงแบ่งออกเป็นสองขั้นตอน: ก่อนอื่นจาก OpenAI-CLIP โมเดลตัวเข้ารหัสข้อความ Word Prompt ได้รับการปรับให้เหมาะสมเพื่อให้ 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
text_encoder ของ Openai-clip ถูกใช้เป็นรุ่นครูและพารามิเตอร์ถูกแช่แข็ง , L2, ระยะทาง COS ถูกใช้เพื่อค่อยๆทำให้จีนและภาษาอังกฤษ Hidden_state ของแบบจำลองนักเรียนค่อยๆเข้าใกล้ Hidden_state ของรุ่นครู เนื่องจากภาษาจีนและภาษาอังกฤษของคลังข้อมูลคู่ขนานมีคุณสมบัติไม่เท่าเทียมกันตามธรรมชาติเพื่อที่จะทำให้จีนและภาษาอังกฤษใกล้เคียงกันมากที่สุดเท่าที่จะเป็นไปได้เราจึงเพิ่มตัวถอดรหัสจีนในระหว่างกระบวนการฝึกอบรมโดยใช้แบบจำลองของนักเรียนจีนและภาษาอังกฤษ
ในปัจจุบันเราได้ประเมินประสิทธิภาพการยิงแบบไม่เป็นศูนย์ของ SkycLip ใน Flickr30K-CN และส่วนใหญ่เปรียบเทียบกับรุ่นโอเพนซอร์สที่เกี่ยวข้องกับความสามารถของจีน
Flickr30K-CN Retrieval :
| งาน | ข้อความเป็นภาพ | ภาพถึงข้อความ | นาย | ||||
|---|---|---|---|---|---|---|---|
| การตั้งค่า | เป็นศูนย์ | เป็นศูนย์ | |||||
| ตัวชี้วัด | r@1 | r@5 | r@10 | r@1 | r@5 | r@10 | |
| Taiyi-326m | 53.8 | 79.9 | 86.6 | 64.0 | 90.4 | 96.1 | 78.47 |
| อัลดิสคลิป | 50.7 | 75.4 | 83.1 | 73.4 | 92.8 | 96.9 | 78.72 |
| คนโง่ | 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 |
| Skyclip | 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 A100s ถูกใช้เป็นเวลา 50 ชั่วโมง ในปัจจุบันโมเดลยังคงได้รับการปรับให้เหมาะสมอย่างต่อเนื่องและจะมีการอัปเดตโมเดลที่มีเสถียรภาพมากขึ้นในอนาคต

