项目介绍
Chinese-CLIP-ViT-Base-Patch16是中文CLIP的基础版本,使用ViT-B/16作为图像编码器,RoBERTa-wwm-base作为文本编码器。该项目在一个规模约为两亿的中文图文对数据集上简单实现了CLIP。更多细节可以参考技术报告(https://arxiv.org/abs/2211.01335)和GitHub仓库(https://github.com/OFA-Sys/Chinese-CLIP)。
与官方API的集成使用
项目团队提供了简单的代码示例,展示如何使用Chinese-CLIP的API来计算图像和文本的嵌入及相似度。
from PIL import Image
import requests
from transformers import ChineseCLIPProcessor, ChineseCLIPModel
model = ChineseCLIPModel.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")
processor = ChineseCLIPProcessor.from_pretrained("OFA-Sys/chinese-clip-vit-base-patch16")
url = "https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
texts = ["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"]
inputs = processor(images=image, return_tensors="pt")
image_features = model.get_image_features(**inputs)
image_features = image_features / image_features.norm(p=2, dim=-1, keepdim=True)
inputs = processor(text=texts, padding=True, return_tensors="pt")
text_features = model.get_text_features(**inputs)
text_features = text_features / text_features.norm(p=2, dim=-1, keepdim=True)
inputs = processor(text=texts, images=image, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)
如果对仅使用API感到不够满足,可以前往GitHub仓库查看更多关于训练和推理的细节。
实验结果
在多项中文文本与图像检索任务中,Chinese-CLIP展现了良好的表现:
-
MUGE文本到图像检索方面,CN-CLIP在所有指标上表现优异,例如,在零样本的条件下,R@1为63.0,使用微调后提升到68.9。
-
Flickr30K-CN检索中的文本到图像和图像到文本任务中,CN-CLIP在微调条件下的R@1分别达到了83.8和95.3。
-
COCO-CN检索相似地展现出强竞争力,文本到图像和图像到文本任务在微调后的R@1分别为81.5和83.5。
-
零样本图像分类任务中,CN-CLIP在多个数据集上同样保持高水准,例如在CIFAR10数据集上R@1达到96.0。
引用
若您认为Chinese 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}
}