CLIP模型-中文-通用领域-large-336分辨率
本项目为CLIP模型的中文版本,使用大规模中文数据进行训练(~2亿图文对),旨在帮助用户实现中文领域的跨模态检索、图像表示等。视觉encoder采用vit结构,文本encoder采用roberta结构。 模型在多个中文图文检索数据集上进行了效果测试。
  • 模型资讯
  • 模型资料




中文CLIP

News

  • 2022年11月:
    • 发布ModelScope 1.0版本,以下能力请使用1.0.2及以上版本。
    • 上线Huge模型(224分辨率)
    • 上线创空间,更强大的demo展示:中文图文检索应用
    • 支持finetune能力,具体参考中文CLIP Tutorial 3.3节。
    • 推出中文CLIP论文,欢迎查阅更多细节。
    • 推出去除optimizer相关参数的ckpt,文件更小,大家可以使用v1.0.1的ckpt,具体方法示例代码已经更新。

模型与项目介绍

本项目为CLIP模型的中文版本,使用大规模中文数据进行训练(~2亿图文对),可用于图文检索和图像、文本的表征提取,应用于搜索、推荐等应用场景。
更多技术细节可以参考我们的技术报告Github开源代码

CLIP模型是来自OpenAI的经典图文表征模型,其采用双塔模型结构(如下图),利用大规模图文对平行语料进行对比学习,从而能够实现图片和文本的跨模态语义特征抽取。

CLIP模型结构

原始的CLIP模型基于英文图文语料,不能用于中文的图文表征提取场景。本项目以英文CLIP视觉侧参数和中文Roberta参数,作为模型初始化值。
基于大规模原生中文图文数据,通过如下图所示的二阶段预训练策略(一阶段仅训练文本侧,二阶段同时训练),实现了CLIP模型的中文化版本,未来将在此持续更新。

中文CLIP预训练机制

本系列还有如下模型,欢迎试用:

快速用起来

提取特征不过区区数行代码,就可以通过我们的服务得到图像或文本的特征。如果你觉得还不够方便,请点击右上角Notebook按钮,我们为你提供了配备了GPU的环境,你只需要在notebook里输入提供的代码,就可以把中文CLIP玩起来了!

注:使用Notebook要验证下当前modelscope的版本号,如果版本低于0.3.7,可以点击更新镜像并启动,如下图所示:

如何更新镜像

让我们开始代码实例

皮卡丘

# require modelscope>=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-large-patch14_336_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是你的最佳选择?

我们实现的中文版本CLIP在多个公开数据集上取得杰出的效果,基本超出市面同类型baseline模型。具体评测数据集包括MUGE(欢迎访问官网),Flickr30K-CN和COCO-CN, 结果如下所示:

MUGE Text-to-Image Retrieval

SetupZero-shotFinetune
MetricR@1R@5R@10MRR@1R@5R@10MR
WukongViT-L42.769.078.063.252.777.985.672.1
R2D2ViT-L49.575.783.269.560.182.989.477.5
CN-CLIPViT-L56.379.886.274.163.385.691.380.1
CN-CLIPViT-L-33659.081.487.876.165.386.792.181.3

Flickr30K-CN Retrieval

TaskText-to-ImageImage-to-Text
SetupZero-shotFinetuneZero-shotFinetune
MetricR@1R@5R@10R@1R@5R@10R@1R@5R@10R@1R@5R@10
WukongViT-L51.778.986.377.494.597.076.194.897.592.799.199.6
R2D2ViT-L60.986.892.784.496.798.477.696.798.995.699.8100.0
CN-CLIPViT-L68.089.794.482.796.798.680.296.698.296.199.599.9
CN-CLIPViT-L-33669.090.795.484.497.198.783.397.298.596.699.8100.0

COCO-CN Retrieval

TaskText-to-ImageImage-to-Text
SetupZero-shotFinetuneZero-shotFinetune
MetricR@1R@5R@10R@1R@5R@10R@1R@5R@10R@1R@5R@10
WukongViT-L53.480.290.174.094.498.155.281.090.673.394.098.0
R2D2ViT-L56.485.093.179.196.598.963.389.395.779.397.198.7
CN-CLIPViT-L64.089.294.478.996.399.060.484.292.980.296.799.2
CN-CLIPViT-L-33664.789.694.680.196.799.263.487.294.481.297.299.1


模型训练流程

训练数据介绍

本模型训练数据集是预训练数据集。

训练流程

已经支持,具体请您查阅中文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}
}