🚀 太乙-CLIP-Roberta-large-326M-中文
太乙-CLIP-Roberta-large-326M-中文是首個開源的中文CLIP模型,其文本端採用在1.23億圖文對上進行預訓練的RoBERTa-large,可用於特徵提取等多模態任務。
🚀 快速開始
項目相關鏈接
✨ 主要特性
- 首個開源中文CLIP:在Huggingface社區中率先開源,為中文多模態任務提供支持。
- 強大的預訓練:在大規模圖文數據集上進行預訓練,獲得強大的視覺 - 語言表徵。
- 靈活的下游應用:可用於零樣本圖像分類、文本到圖像檢索等任務。
📦 模型分類
需求 |
任務 |
系列 |
模型 |
參數 |
額外 |
特殊 |
多模態 |
太乙 |
CLIP (RoBERTa) |
326M |
中文 |
📚 詳細文檔
模型信息
我們遵循CLIP的實驗設置,以獲得強大的視覺 - 語言表徵。在訓練中文版的CLIP時,我們使用chinese-roberta-wwm-large作為語言的編碼器,並將CLIP中的ViT - L - 14應用於視覺的編碼器。為了快速且穩定地進行預訓練,我們凍結了視覺編碼器並且只微調語言編碼器。
此外,我們將Noah - Wukong數據集(100M)和Zero數據集(23M)用作預訓練的數據集。我們先在悟空數據集上預訓練了10輪,然後接著在悟空數據集和zero數據集上預訓練12輪, 在A100x16上訓練了7天。據我們所知,我們的Taiyi - CLIP是目前Huggingface社區中首個的開源中文CLIP。
下游效果
零樣本分類
模型 |
數據集 |
Top1 |
Top5 |
Taiyi - CLIP - Roberta - 326M - 中文 |
ImageNet1k - CN |
53.05% |
79.55% |
零樣本文本到圖像檢索
模型 |
數據集 |
Top1 |
Top5 |
Top10 |
Taiyi - CLIP - Roberta - 326M - 中文 |
Flickr30k - CNA - test |
54.36% |
80.56% |
87.90% |
Taiyi - CLIP - Roberta - 326M - 中文 |
COCO - CN - test |
51.47% |
81.00% |
90.40% |
Taiyi - CLIP - Roberta - 326M - 中文 |
wukong50k |
61.18% |
90.46% |
95.74% |
💻 使用示例
基礎用法
from PIL import Image
import requests
import clip
import torch
from transformers import BertForSequenceClassification, BertConfig, BertTokenizer
from transformers import CLIPProcessor, CLIPModel
import numpy as np
query_texts = ["一隻貓", "一隻狗",'兩隻貓', '兩隻老虎','一隻老虎'] # 這裡是輸入文本的,可以隨意替換。
# 加載Taiyi 中文 text encoder
text_tokenizer = BertTokenizer.from_pretrained("IDEA-CCNL/Taiyi-CLIP-Roberta-large-326M-Chinese")
text_encoder = BertForSequenceClassification.from_pretrained("IDEA-CCNL/Taiyi-CLIP-Roberta-large-326M-Chinese").eval()
text = text_tokenizer(query_texts, return_tensors='pt', padding=True)['input_ids']
url = "http://images.cocodataset.org/val2017/000000039769.jpg" # 這裡可以換成任意圖片的url
# 加載CLIP的image encoder
clip_model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")
image = processor(images=Image.open(requests.get(url, stream=True).raw), return_tensors="pt")
with torch.no_grad():
image_features = clip_model.get_image_features(**image)
text_features = text_encoder(text).logits
# 歸一化
image_features = image_features / image_features.norm(dim=1, keepdim=True)
text_features = text_features / text_features.norm(dim=1, keepdim=True)
# 計算餘弦相似度 logit_scale是尺度係數
logit_scale = clip_model.logit_scale.exp()
logits_per_image = logit_scale * image_features @ text_features.t()
logits_per_text = logits_per_image.t()
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print(np.around(probs, 3))
📄 引用
如果您在您的工作中使用了我們的模型,可以引用我們的論文:
@article{fengshenbang,
author = {Jiaxing Zhang and Ruyi Gan and Junjie Wang and Yuxiang Zhang and Lin Zhang and Ping Yang and Xinyu Gao and Ziwei Wu and Xiaoqun Dong and Junqing He and Jianheng Zhuo and Qi Yang and Yongfeng Huang and Xiayu Li and Yanghan Wu and Junyu Lu and Xinyu Zhu and Weifeng Chen and Ting Han and Kunhao Pan and Rui Wang and Hao Wang and Xiaojun Wu and Zhongshen Zeng and Chongpei Chen},
title = {Fengshenbang 1.0: Being the Foundation of Chinese Cognitive Intelligence},
journal = {CoRR},
volume = {abs/2209.02970},
year = {2022}
}
也可以引用我們的網站:
@misc{Fengshenbang-LM,
title={Fengshenbang-LM},
author={IDEA-CCNL},
year={2021},
howpublished={\url{https://github.com/IDEA-CCNL/Fengshenbang-LM}},
}
📄 許可證
本項目採用Apache - 2.0許可證。