微件:
- 图片源: https://huggingface.co/datasets/mishig/sample_images/resolve/main/cat-dog-music.png
候选标签: 弹吉他的猫, 弹钢琴的狗
示例标题: 吉他、猫和狗
语言: 韩语
许可证: mit
clip-vit-base-patch32-ko
基于《利用知识蒸馏实现单语句嵌入模型多语言化》训练的韩语CLIP模型
训练代码: https://github.com/Bing-su/KoCLIP_training_code
使用数据: AIHUB平台所有韩英平行语料
使用指南
方法一
import requests
import torch
from PIL import Image
from transformers import AutoModel, AutoProcessor
repo = "Bingsu/clip-vit-base-patch32-ko"
model = AutoModel.from_pretrained(repo)
processor = AutoProcessor.from_pretrained(repo)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=["两只猫", "两只狗"], images=image, return_tensors="pt", padding=True)
with torch.inference_mode():
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
>>> probs
tensor([[0.9926, 0.0074]])
方法二
from transformers import pipeline
repo = "Bingsu/clip-vit-base-patch32-ko"
pipe = pipeline("zero-shot-image-classification", model=repo)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
result = pipe(images=url, candidate_labels=["一只猫", "两只猫", "躺在粉色沙发上的猫伙伴们"], hypothesis_template="{}")
>>> result
[{'score': 0.9456236958503723, 'label': '躺在粉色沙发上的猫伙伴们'},
{'score': 0.05315302312374115, 'label': '两只猫'},
{'score': 0.0012233294546604156, 'label': '一只猫'}]
分词器说明
该分词器采用韩语与英语数据按7:3比例混合,基于原版CLIP分词器通过.train_new_from_iterator
方法训练而成。
关键实现逻辑参考:
https://github.com/huggingface/transformers/blob/bc21aaca789f1a366c05e8b5e111632944886393/src/transformers/models/clip/modeling_clip.py#L661-L666
pooled_output = last_hidden_state[
torch.arange(last_hidden_state.shape[0]), input_ids.to(torch.int).argmax(dim=-1)
]
由于CLIP模型在计算pooled_output
时使用ID值最大的token,因此eos_token必须设置为词汇表的末位token。