中文CLIP
本项目为CLIP模型的中文版本(Large模型,如需使用中文CLIP的Base模型请点击链接),使用大规模中文数据进行训练(~2亿图文对),可用于图文检索和图像、文本的表征提取,应用于搜索、推荐等应用场景。来自OpenAI的经典CLIP模型已无需过多介绍,本项目为CLIP模型的中文复现,未来将在此持续更新。
note: 正式版本待modelscope发布,当前为未发布测试版
快速用起来
提取特征不过区区数行代码,就可以通过我们的服务得到图像或文本的特征。如果你觉得还不够方便,请点击右上角Notebook按钮,我们为你提供了配备了GPU的环境,你只需要在notebook里输入提供的代码,就可以把中文CLIP玩起来了!
import torch
from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
from modelscope.preprocessors.image import load_image
pipeline = pipeline(task=Tasks.multi_modal_embedding,
model='damo/multi-modal_clip-vit-large-patch14_zh', model_revision="dev")
input_img = load_image('https://yangan2.oss-cn-beijing.aliyuncs.com/pokemon.jpeg') # 皮卡丘示例图片路径
input_texts = ["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"]
# 支持一张图片(Image)或多张图片(List[Image])输入,输出归一化特征向量
img_embedding = pipeline.forward({'img': input_img})['img_embedding'] # 2D Tensor, [图片数, 特征维度]
# 支持一条文本(str)或多条文本(List[str])输入,输出归一化特征向量
text_embedding = pipeline.forward({'text': input_texts})['text_embedding'] # 2D Tensor, [文本数, 特征维度]
# 计算图文相似度
with torch.no_grad():
# 计算内积得到logit,考虑模型temperature
logits_per_image = (img_embedding / pipeline.model.temperature) @ text_embedding.t()
# 根据logit计算概率分布
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs)
为什么中文CLIP是你的最佳选择?
我们实现的中文版本CLIP在多个公开数据集上取得杰出的效果,基本超出市面同类型baseline模型。具体评测数据集包括MUGE(欢迎访问官网),Flickr30K-CN和COCO-CN, 结果如下所示:
MUGE Text-to-Image Retrieval
| Setup | Zero-shot | Finetune | ||||||
|---|---|---|---|---|---|---|---|---|
| Metric | R@1 | R@5 | R@10 | MR | R@1 | R@5 | R@10 | MR |
| WukongViT-L | 42.7 | 69.0 | 78.0 | 63.2 | 52.7 | 77.9 | 85.6 | 72.1 |
| R2D2ViT-L | 49.5 | 75.7 | 83.2 | 69.5 | 60.1 | 82.9 | 89.4 | 77.5 |
| CN-CLIPViT-L | 56.3 | 79.8 | 86.2 | 74.1 | 63.3 | 85.6 | 91.3 | 80.1 |
Flickr30K-CN Retrieval
| Task | Text-to-Image | Image-to-Text | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Setup | Zero-shot | Finetune | Zero-shot | Finetune | ||||||||
| Metric | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 |
| WukongViT-L | 51.7 | 78.9 | 86.3 | 77.4 | 94.5 | 97.0 | 76.1 | 94.8 | 97.5 | 92.7 | 99.1 | 99.6 |
| R2D2ViT-L | 60.9 | 86.8 | 92.7 | 84.4 | 96.7 | 98.4 | 77.6 | 96.7 | 98.9 | 95.6 | 99.8 | 100.0 |
| CN-CLIPViT-L | 68.0 | 89.7 | 94.4 | 82.7 | 96.7 | 98.6 | 80.2 | 96.6 | 98.2 | 96.1 | 99.5 | 99.9 |
COCO-CN Retrieval
| Task | Text-to-Image | Image-to-Text | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Setup | Zero-shot | Finetune | Zero-shot | Finetune | ||||||||
| Metric | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 |
| WukongViT-L | 53.4 | 80.2 | 90.1 | 74.0 | 94.4 | 98.1 | 55.2 | 81.0 | 90.6 | 73.3 | 94.0 | 98.0 |
| R2D2ViT-L | 56.4 | 85.0 | 93.1 | 79.1 | 96.5 | 98.9 | 63.3 | 89.3 | 95.7 | 79.3 | 97.1 | 98.7 |
| CN-CLIPViT-L | 64.0 | 89.2 | 94.4 | 78.9 | 96.3 | 99.0 | 60.4 | 84.2 | 92.9 | 80.2 | 96.7 | 99.2 |
使用方式和范围
使用方式:
- 对输入的图像、文本数据进行特征提取
使用场景:
- 通用的图文跨模态检索任务
- 通用图文特征提取器
相关引用
我们将尽快推出本项目的技术报告,敬请期待!