🚀 LLM2CLIP: 大規模言語モデルによるCLIPの能力限界の拡張
このプロジェクトでは、大規模言語モデル(LLM)の力を活用してCLIPの潜在能力を引き出す新しいアプローチであるLLM2CLIPを提案しています。これにより、クロスモーダルタスクにおける性能が大幅に向上します。
🚀 クイックスタート
本論文では、LLM2CLIPという新しいアプローチを提案しています。これは、LLMの力を活用してCLIPの潜在能力を引き出すものです。対照学習を用いてキャプション空間でLLMを微調整することで、そのテキスト処理能力を出力埋め込みに取り込み、出力層のテキスト識別性を大幅に向上させます。そして、微調整されたLLMをCLIPのビジュアルエンコーダの強力な教師モデルとする効率的なトレーニングプロセスを設計します。LLMの存在により、従来のCLIPテキストエンコーダのコンテキストウィンドウや能力の制限を受けることなく、より長く複雑なキャプションを組み込むことができます。実験の結果、このアプローチがクロスモーダルタスクにおいて大幅な改善をもたらすことが示されています。
✨ 主な機能
- 対照学習を用いたLLMの微調整により、CLIPの出力層のテキスト識別性を向上させます。
- LLMを教師モデルとして使用することで、長いキャプションを扱うことができます。
- クロスモーダルタスクにおける性能を大幅に向上させます。
📦 インストール
このセクションではインストール手順が明示されていないため、省略します。
💻 使用例
基本的な使用法
Image Embeddings
from PIL import Image
from transformers import AutoModel
from transformers import CLIPImageProcessor
import torch
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
image_path = "CLIP.png"
model_name_or_path = "microsoft/LLM2CLIP-Openai-L-14-224"
processor = CLIPImageProcessor.from_pretrained("openai/clip-vit-large-patch14")
model = AutoModel.from_pretrained(
model_name_or_path,
torch_dtype=torch.bfloat16,
trust_remote_code=True).to('cuda').eval()
image = Image.open(image_path)
input_pixels = processor(images=image, return_tensors="pt").pixel_values.to('cuda')
with torch.no_grad(), torch.cuda.amp.autocast():
outputs = model.get_image_features(input_pixels)
Retrieval
from PIL import Image
from transformers import AutoModel, AutoConfig, AutoTokenizer
from transformers import CLIPImageProcessor
import torch
from llm2vec import LLM2Vec
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
processor = CLIPImageProcessor.from_pretrained("openai/clip-vit-large-patch14")
model_name_or_path = "microsoft/LLM2CLIP-Openai-L-14-224"
model = AutoModel.from_pretrained(
model_name_or_path,
torch_dtype=torch.bfloat16,
trust_remote_code=True).to('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)
captions = ["a diagram", "a dog", "a cat"]
image_path = "CLIP.png"
image = Image.open(image_path)
input_pixels = processor(images=image, return_tensors="pt").pixel_values.to('cuda')
text_features = l2v.encode(captions, convert_to_tensor=True).to('cuda')
with torch.no_grad(), torch.cuda.amp.autocast():
image_features = model.get_image_features(input_pixels)
text_features = model.get_text_features(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サブセット) |
🔧 技術詳細
このセクションでは十分な技術詳細が提供されていないため、省略します。
📄 ライセンス
このプロジェクトは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},
}