2022年11月:
2022年09月: 现在已经上线Large336分辨率模型,我们训练时image侧分辨率为336*336像素,效果更好,欢迎试用。
本项目为CLIP模型的中文版本,使用大规模中文数据进行训练(~2亿图文对),可用于图文检索和图像、文本的表征提取,应用于搜索、推荐等应用场景。
更多技术细节可以参考我们的技术报告和Github开源代码。
CLIP模型是来自OpenAI的经典图文表征模型,其采用双塔模型结构(如下图),利用大规模图文对平行语料进行对比学习,从而能够实现图片和文本的跨模态语义特征抽取。
原始的CLIP模型基于英文图文语料,不能用于中文的图文表征提取场景。本项目以英文CLIP视觉侧参数和中文Roberta参数,作为模型初始化值。
基于大规模原生中文图文数据,通过如下图所示的二阶段预训练策略(一阶段仅训练文本侧,二阶段同时训练),实现了CLIP模型的中文化版本,未来将在此持续更新。
本系列还有如下模型,欢迎试用:
提取特征不过区区数行代码,就可以通过我们的服务得到图像或文本的特征。如果你觉得还不够方便,请点击右上角Notebook
按钮,我们为你提供了配备了GPU的环境,你只需要在notebook里输入提供的代码,就可以把中文CLIP玩起来了!
注:使用Notebook
要验证下当前modelscope的版本号,如果版本低于0.3.7,可以点击更新镜像并启动,如下图所示:
让我们开始代码实例
# require modelscope>=0.3.7,目前默认大于0.3.7,您检查确认一下即可
# 按照更新镜像的方法处理或者下面的方法
# pip install --upgrade modelscope -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
# 需要单独安装`decord`,安装方法:pip install `decord
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-base-patch16_zh', model_revision='v1.0.1')
input_img = load_image('https://yangan2.oss-cn-beijing.aliyuncs.com/pokemon.jpeg') # 支持皮卡丘示例图片路径/本地图片 返回PIL.Image
input_texts = ["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"]
# 支持一张图片(PIL.Image)或多张图片(List[PIL.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("图文匹配概率:", probs)
我们实现的中文版本CLIP在多个公开数据集上取得杰出的效果,基本超出市面同类型baseline模型。具体评测数据集包括MUGE(欢迎访问官网),Flickr30K-CN和COCO-CN, 结果如下所示:
Setup | Zero-shot | Finetune | ||||||
---|---|---|---|---|---|---|---|---|
Metric | R@1 | R@5 | R@10 | MR | R@1 | R@5 | R@10 | MR |
WukongViT-B | 33.4 | 59.3 | 69.7 | 54.1 | 39.2 | 66.9 | 77.4 | 61.2 |
R2D2ViT-B | - | - | - | - | 47.4 | 75.1 | 83.5 | 68.7 |
CN-CLIPViT-B | 52.1 | 76.7 | 84.4 | 71.1 | 58.4 | 83.6 | 90.0 | 77.4 |
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-B | 45.7 | 73.8 | 82.2 | 67.6 | 89.6 | 94.2 | 66.2 | 88.7 | 94.3 | 83.9 | 97.6 | 99.0 |
R2D2ViT-B | - | - | - | 78.3 | 94.6 | 97.0 | - | - | - | 92.6 | 99.1 | 99.8 |
CN-CLIPViT-B | 62.7 | 86.9 | 92.8 | 79.1 | 94.8 | 97.4 | 74.6 | 93.5 | 97.1 | 93.5 | 99.0 | 99.5 |
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-B | 49.2 | 79.4 | 87.9 | 67.0 | 91.4 | 96.7 | 48.3 | 77.8 | 88.8 | 65.8 | 90.3 | 96.6 |
R2D2ViT-B | - | - | - | 75.1 | 94.2 | 98.1 | - | - | - | 76.1 | 95.3 | 98.5 |
CN-CLIPViT-B | 62.2 | 86.6 | 94.9 | 77.0 | 97.1 | 99.0 | 57.0 | 84.1 | 93.6 | 77.4 | 96.2 | 98.9 |
本模型训练数据集是预训练数据集。
finetune具体方法请您查阅中文CLIP Tutorial 3.3节。
使用方式:
使用场景:
训练数据集自身有局限,有可能产生一些偏差,请用户自行评测后决定如何使用。
关于中文clip,我们已经推出了相关论文,有更多细节可以查阅,如对您的工作有帮助,欢迎引用。
@article{chinese-clip,
title={Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese},
author={Yang, An and Pan, Junshu and Lin, Junyang and Men, Rui and Zhang, Yichang and Zhou, Jingren and Zhou, Chang},
journal={arXiv preprint arXiv:2211.01335},
year={2022}
}