🚀 LLM2CLIP: 大規模言語モデルによるCLIPの能力限界の拡張
本研究では、大規模言語モデル(LLM)の力を活用してCLIPの潜在能力を引き出す新しいアプローチ、LLM2CLIPを提案します。対照学習を用いてキャプション空間でLLMを微調整することで、そのテキスト処理能力を出力埋め込みに取り込み、出力層のテキスト識別性を大幅に向上させます。そして、微調整されたLLMをCLIPの視覚エンコーダの強力な教師モデルとする効率的なトレーニングプロセスを設計します。LLMの導入により、従来のCLIPテキストエンコーダのコンテキストウィンドウや能力の制限を超えて、より長く複雑なキャプションを取り扱うことが可能になります。実験の結果、このアプローチはクロスモーダルタスクにおいて大幅な性能向上をもたらすことが示されました。この方法により、以前の最先端モデルであるEVA02モデルの性能が、長文と短文の検索タスクの両方で16.5%向上し、英語データのみで学習されたCLIPモデルが最先端のクロス言語モデルに変身しました。さらに、Llava 1.5などのモデルとのマルチモーダルトレーニングに組み込んだ場合、ほぼすべてのベンチマークでCLIPを上回り、包括的な性能向上を実証しました。
🚀 クイックスタート
本論文で提案するLLM2CLIPは、大規模言語モデルの力を借りてCLIPの能力を拡張します。以下に、その概要と使用方法を説明します。
✨ 主な機能
- 対照学習を用いたLLMの微調整により、CLIPの出力層のテキスト識別性を向上。
- 長文や複雑なキャプションを扱えるようになり、クロスモーダルタスクでの性能向上。
- 既存の最先端モデルの性能を大幅に向上させ、クロス言語モデルとしての能力を獲得。
📦 インストール
このモデルを使用するには、GitHubのリポジトリを参照してください。
GitHub
💻 使用例
基本的な使用法
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
from transformers import AutoModel, AutoConfig, AutoTokenizer
from eva_clip import create_model_and_transforms
from llm2vec import LLM2Vec
from PIL import Image
import torch
model, _, preprocess_val = create_model_and_transforms('EVA02-CLIP-L-14-336', force_custom_clip=True)
ckpt = torch.load('LLM2CLIP-EVA02-L-14-336.pt')
model.load_state_dict(ckpt)
model = model.cuda().eval()
llm_model_name = 'microsoft/LLM2CLIP-Llama-3-8B-Instruct-CC-Finetuned'
config = AutoConfig.from_pretrained(
llm_model_name, trust_remote_code=True
)
llm_model = AutoModel.from_pretrained(llm_model_name, torch_dtype=torch.bfloat16, config=config, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(llm_model_name)
llm_model.config._name_or_path = 'meta-llama/Meta-Llama-3-8B-Instruct'
l2v = LLM2Vec(llm_model, tokenizer, pooling_mode="mean", max_length=512, doc_max_length=512)
image_path = "CLIP.png"
captions = ["a diagram", "a dog", "a cat"]
image = preprocess_val(Image.open(image_path)).cuda().unsqueeze(dim=0)
text_features = l2v.encode(captions, convert_to_tensor=True).to('cuda')
with torch.no_grad(), torch.cuda.amp.autocast():
image_features = model.encode_image(image)
text_features = model.encode_text(text_features)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
print("Label probs:", text_probs)
📚 ドキュメント
LLM2CLIPの性能
> ⚠️ **重要提示**
>
> 論文に示されたすべての結果は、PyTorchの重みを使用して評価されています。Hugging Face (hf) モデルを使用する場合、性能に差異が生じる可能性があります。
モデル詳細
属性 |
详情 |
モデルタイプ |
ビジョン基礎モデル、特徴バックボーン |
事前学習データセット |
CC3M、CC12M、YFCC15M、Recap-DataComp-1B(30Mサブセット) |
🔧 技術詳細
本研究では、大規模言語モデル(LLM)の力を活用してCLIPの潜在能力を引き出す新しいアプローチ、LLM2CLIPを提案します。対照学習を用いてキャプション空間でLLMを微調整することで、そのテキスト処理能力を出力埋め込みに取り込み、出力層のテキスト識別性を大幅に向上させます。そして、微調整されたLLMをCLIPの視覚エンコーダの強力な教師モデルとする効率的なトレーニングプロセスを設計します。LLMの導入により、従来のCLIPテキストエンコーダのコンテキストウィンドウや能力の制限を超えて、より長く複雑なキャプションを取り扱うことが可能になります。
📄 ライセンス
このプロジェクトは、Apache-2.0ライセンスの下で公開されています。
BibTeX引用
@misc{huang2024llm2clippowerfullanguagemodel,
title={LLM2CLIP: Powerful Language Model Unlock Richer Visual Representation},
author={Weiquan Huang and Aoqi Wu and Yifan Yang and Xufang Luo and Yuqing Yang and Liang Hu and Qi Dai and Xiyang Dai and Dongdong Chen and Chong Luo and Lili Qiu},
year={2024},
eprint={2411.04997},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2411.04997},
}