Chinese-CLIP 项目介绍
Chinese-CLIP 项目是 CLIP 模型的中文版本,利用了大规模的中文图文数据(大约2亿对)进行训练。此项目旨在帮助用户快速实现中文领域内的图文特征与相似度计算、跨模态检索以及零样本图片分类等任务。项目基于 open_clip 项目构建,并进行了适应中文数据的优化升级。以下内容将详细介绍项目的各项功能和使用方法。
新闻更新
- 模型转换(2023.11.30):新增转换 Pytorch 模型为 CoreML 格式的脚本,便于模型的部署。
- 知识蒸馏微调(2023.9.8):支持 ModelScope 知识蒸馏微调功能。
- Pytorch 2.0 适配(2023.5.9):项目现已适配最新的 Pytorch 2.0。
- 梯度累积支持(2023.3.20):支持新增加的梯度累积功能,提升了大规模 batch 训练的效果。
- FlashAttention 加速(2023.2.16):添加了 FlashAttention 支持,以提高训练速度、降低显存占用。
- 部署支持(2023.1.15):新增对 ONNX 和 TensorRT 模型的支持,提供预训练的 TensorRT 模型,提高特征推理速度。
- FLIP 训练策略(2022.12.12):实现 FLIP 训练策略,可通过 finetune 时使用。
- 数据集公开(2022.12.3):发布 ELEVATER 图像分类数据集的中文版本。
- Huggingface 集成(2022.12.1):模型代码和特征提取 API 同步合入 Huggingface transformers 代码库。
- 零样本图像分类(2022.11.22):新增零样本图像分类代码。
- 新模型发布(2022.11.3):新增 RN50 和 ViT-H-14 模型。
- 模型更新(2022.9.22):新增 ViT-L-14 和 ViT-L-14-336 模型。
- 快速API(2022.7.13):提供图文特征提取快速 API,只需几行代码即可调用模型。
- 项目开源(2022.7.8):Chinese-CLIP 项目正式开源,开源图文检索代码。
模型及实验
模型规模与下载
Chinese-CLIP 项目目前开源了五个不同规模的模型,供用户根据不同需求选择。以下是各个模型的基本信息:
模型名称 | 下载链接 | 参数量 | 视觉骨架 | 视觉参数量 | 文本骨架 | 文本参数量 | 分辨率 |
---|---|---|---|---|---|---|---|
CN-CLIPRN50 | 下载 | 77M | ResNet50 | 38M | RBT3 | 39M | 224 |
CN-CLIPViT-B/16 | 下载 | 188M | ViT-B/16 | 86M | RoBERTa-wwm-Base | 102M | 224 |
CN-CLIPViT-L/14 | 下载 | 406M | ViT-L/14 | 304M | RoBERTa-wwm-Base | 102M | 224 |
CN-CLIPViT-L/14@336px | 下载 | 407M | ViT-L/14 | 304M | RoBERTa-wwm-Base | 102M | 336 |
CN-CLIPViT-H/14 | 下载 | 958M | ViT-H/14 | 632M | RoBERTa-wwm-Large | 326M | 224 |
实验结果
Chinese-CLIP 在多种数据集上进行了全面的测试和验证,展示了其在图文检索以及零样本图像分类任务中的优异性能。在 MUGE Retrieval、Flickr30K-CN 和 COCO-CN 等基准测试中,Chinese-CLIP 在 zero-shot 和 finetune 设置下都展示了超越许多知名模型的性能。
如何开始
安装要求
要运行 Chinese-CLIP 项目,用户需确保满足以下软件版本要求:
- Python 版本 ≥ 3.6.4
- Pytorch 版本 ≥ 1.8.0(配套 torchvision 版本 ≥ 0.9.0)
- CUDA 版本 ≥ 10.2
用户可以使用以下命令安装项目所需的第三方库:
pip install -r requirements.txt
API 快速上手
项目提供了便捷的 API,用户可以通过简单的代码快速调用模型。下方示例显示了如何利用 API 提取图片和文本的特征,进而计算相似度。
首先安装 cn_clip:
# 通过pip安装
pip install cn_clip
# 或从源代码安装
cd Chinese-CLIP
pip install -e .
成功安装后,即可使用以下代码提取特征并计算相似度:
import torch
from PIL import Image
import cn_clip.clip as clip
from cn_clip.clip import load_from_name, available_models
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = load_from_name("ViT-B-16", device=device, download_root='./')
model.eval()
image = preprocess(Image.open("examples/pokemon.jpeg")).unsqueeze(0).to(device)
text = clip.tokenize(["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"]).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
logits_per_image, logits_per_text = model.get_similarity(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs) # [[1.268734e-03 5.436878e-02 6.795761e-04 9.436829e-01]]
更多 API 和部署方式,详见项目文档。
教程
项目包含跨模态检索和零样本图像分类的详细教程,提供了从数据准备到模型 finetune 和评估的完整流程。用户可以通过教学示例快速掌握这两个重要任务的实现步骤。
跨模态检索
为实现跨模态检索,项目提供了详细的代码组织结构及准备工作的指南,包括数据预处理、预训练模型 checkpoint 的下载等。通过提供的训练脚本,用户可以在自己的数据集上 finetune 模型,并进行图文特征的提取与评估。
零样本图像分类
项目也为零样本图像分类任务提供了完整的指导过程,用户在理解实现背后的技术原理后,可以结合自身的数据需求,灵活应用模型。
通过 Chinese-CLIP 项目,用户可以充分发挥 CLIP 模型在中文领域中的潜力,深入探索多模态任务的跨越式创新。