🚀 太乙CLIP-RoBERTa-326M-ViT-H-中文
太乙CLIP-RoBERTa-326M-ViT-H-中文是首個開源的中文CLIP模型,它在1.23億圖文對上進行預訓練,文本端採用RoBERTa-large,能夠獲得強大的視覺 - 語言表徵。
🚀 快速開始
模型信息
屬性 |
詳情 |
模型類型 |
特殊需求下的多模態模型,屬於太乙系列的CLIP (RoBERTa),參數為326M,使用了ViT-H作為視覺提取器 - 中文 |
訓練數據 |
使用Noah-Wukong數據集(100M)和Zero數據集(23M)作為預訓練數據集,在悟空數據集和zero數據集上預訓練24輪,在A100x32上訓練了8天 |
下游效果
零樣本分類
模型 |
數據集 |
Top1 |
Top5 |
Taiyi-CLIP-RoBERTa-326M-ViT-H-Chinese |
ImageNet1k-CN |
54.35% |
80.64% |
零樣本文本到圖像檢索
模型 |
數據集 |
Top1 |
Top5 |
Top10 |
Taiyi-CLIP-RoBERTa-326M-ViT-H-Chinese |
Flickr30k-CNA-test |
60.82% |
85.00% |
91.04% |
Taiyi-CLIP-RoBERTa-326M-ViT-H-Chinese |
COCO-CN-test |
60.02% |
83.95% |
93.26% |
Taiyi-CLIP-RoBERTa-326M-ViT-H-Chinese |
wukong50k |
66.85% |
92.81% |
96.69% |
✨ 主要特性
- 首個開源的中文CLIP模型,在多模態任務上表現出色。
- 採用強大的視覺 - 語言表徵學習方法,遵循CLIP的實驗設置。
- 使用特定的語言編碼器和視覺編碼器,在訓練時凍結視覺編碼器並微調語言編碼器,實現快速穩定的預訓練。
💻 使用示例
基礎用法
from PIL import Image
import requests
import open_clip
import torch
from transformers import BertModel, 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-326M-ViT-H-Chinese")
text_encoder = BertModel.from_pretrained("IDEA-CCNL/Taiyi-CLIP-RoBERTa-326M-ViT-H-Chinese").eval()
url = "http://images.cocodataset.org/val2017/000000039769.jpg" # 這裡可以換成任意圖片的url
# 加載openclip的image encoder
clip_model, _, processor = open_clip.create_model_and_transforms('ViT-H-14', pretrained='laion2b_s32b_b79k')
clip_model = clip_model.eval()
text = text_tokenizer(query_texts, return_tensors='pt', padding=True)['input_ids']
image = processor(Image.open(requests.get(url, stream=True).raw)).unsqueeze(0)
with torch.no_grad():
image_features = clip_model.encode_image(image)
text_features = text_encoder(text)[1]
# 歸一化
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))
📚 詳細文檔
我們遵循CLIP的實驗設置,以獲得強大的視覺 - 語言表徵。在訓練中文版的CLIP時,我們使用chinese-roberta-wwm-large作為語言的編碼器,並將open_clip中的ViT-H-14應用於視覺的編碼器。為了快速且穩定地進行預訓練,我們凍結了視覺編碼器並且只微調語言編碼器。
📄 許可證
本項目採用Apache-2.0許可證。
📖 引用
如果您在您的工作中使用了我們的模型,可以引用我們的論文:
@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}},
}