モデル概要
モデル特徴
モデル能力
使用事例
🚀 【ICLR 2024 🔥】LanguageBind: Extending Video-Language Pretraining to N-modality by Language-based Semantic Alignment
LanguageBindは、言語ベースの意味的アラインメントによってビデオと言語の事前学習をNモダリティに拡張する多モーダル事前学習アプローチです。このアプローチは、言語を異なるモダリティ間の結びつきとして利用し、高性能な多モーダル処理を実現します。
【ICLR 2024 🔥】LanguageBind: Extending Video-Language Pretraining to N-modality by Language-based Semantic Alignment
もし私たちのプロジェクトが気に入ったら、最新のアップデートを受け取るためにGitHubでスターをつけてください⭐。
📰 ニュース
- [2024.01.27] 👀👀👀 私たちのMoE-LLaVAがリリースされました!30億パラメータのスパースモデルが70億パラメータの密モデルを上回りました。
- [2024.01.16] 🔥🔥🔥 私たちのLanguageBindがICLR 2024で受理されました!こちらで6(3)8(6)6(6)6(6)のスコアを獲得しました。
- [2023.12.15] 💪💪💪 私たちは💥💥💥 VIDALデータセットを拡張し、現在は1000万件のビデオとテキストのデータを持っています。LanguageBind_Video 1.5を立ち上げました。モデルズーを確認してください。
- [2023.12.10] 私たちは💥💥💥 VIDALデータセットを拡張し、現在は1000万件の深度データと1000万件の熱画像データを持っています。Hugging Faceに熱画像と深度データをアップロード中で、全体のプロセスは1〜2ヶ月かかる予定です。
- [2023.11.27] 🔥🔥🔥 私たちは論文を緊急ゼロショットの結果で更新しました。✨ 結果を確認してください。
- [2023.11.26] 💥💥💥 私たちはすべてのテキストソースと対応するYouTube IDをこちらでオープンソース化しました。
- [2023.11.26] 📣📣📣 私たちは完全にファインチューニングされたビデオとオーディオをオープンソース化し、再び性能を向上させました。モデルズーを確認してください。
- [2023.11.22] 私たちは完全にファインチューニングされたバージョンをリリースする予定で、巨大なバージョンは現在トレーニング中です。
- [2023.11.20] 🚀🚀🚀 Video-LLaVAは、LanguageBindエンコーダに基づいて大規模な視覚言語モデルを構築し、🎉SOTAの性能を達成しました。
- [2023.10.23] 🎶 LanguageBind-Audioは、5つのデータセットで🎉🎉🎉最先端(SOTA)の性能を達成しました。✨ 結果を確認してください。
- [2023.10.14] 😱 より強力なLanguageBind-Videoをリリースしました。✨ 結果を確認してください!ビデオのチェックポイントはHuggingface Model Hubで更新されました!
- [2023.10.10] 私たちはサンプルデータを提供しています。assetsにあり、緊急ゼロショットの使い方が説明されています。
- [2023.10.07] チェックポイントは🤗 Huggingface Modelで利用可能です。
- [2023.10.04] コードとデモが利用可能になりました!最新のアップデートを受け取るために、このリポジトリをウォッチ👀してください。
😮 ハイライト
💡 高性能で、中間モダリティを必要としない
LanguageBindは言語中心の多モーダル事前学習アプローチで、言語を異なるモダリティ間の結びつきとして利用します。言語モダリティは十分に研究されており、豊富な意味情報を含んでいるためです。
- 最初の図は、LanguageBindのアーキテクチャを示しています。LanguageBindは、セグメンテーション、検出タスクに簡単に拡張でき、潜在的に無制限のモダリティに拡張できます。
⚡️ 多モーダル、完全にアラインメントされた大容量のデータセット
私たちはVIDAL-10Mを提案します。これは、ビデオ、赤外線、深度、オーディオとそれに対応する言語を含む1000万件のデータで、視覚モダリティを超えたデータを大幅に拡張します。
- 2番目の図は、私たちが提案するVIDAL-10Mデータセットを示しています。これには、ビデオ、赤外線、深度、オーディオ、言語の5つのモダリティが含まれています。
🔥 トレーニングのための多視点強化記述
私たちは言語に多視点強化を施します。メタデータ、空間、時間を組み合わせた多視点記述を生成し、言語の意味情報を大幅に強化します。さらに、ChatGPTで言語を強化し、各モダリティの言語に適した意味空間を作成します。
🤗 デモ
- ローカルデモ。LanguageBindが現在サポートしているすべての機能を組み込んだウェブデモを試すことを強くおすすめします。
python gradio_app.py
- オンラインデモ。私たちはオンラインデモをHuggingface Spacesで提供しています。このデモでは、オーディオと言語、ビデオと言語、深度と画像など、モダリティと言語の類似度を計算できます。
🛠️ 必要条件とインストール
- Python >= 3.8
- Pytorch >= 1.13.1
- CUDA Version >= 11.6
- 必要なパッケージをインストールします。
git clone https://github.com/PKU-YuanGroup/LanguageBind
cd LanguageBind
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt
🐳 モデルズー
表の名前は、異なるエンコーダモデルを表しています。たとえば、LanguageBind/LanguageBind_Video_FT
は完全にファインチューニングされたバージョンを表し、LanguageBind/LanguageBind_Video
はLoRAチューニングされたバージョンを表します。
あなたは、推奨されるAPIの使い方で自由にこれらを置き換えることができます。私たちは、より強力な性能を提供する完全にファインチューニングされたバージョンの使用をおすすめします。
モダリティ | LoRAチューニング | ファインチューニング |
---|---|---|
ビデオ | LanguageBind_Video | LanguageBind_Video_FT |
オーディオ | LanguageBind_Audio | LanguageBind_Audio_FT |
深度 | LanguageBind_Depth | - |
熱画像 | LanguageBind_Thermal | - |
バージョン | チューニング | モデルサイズ | フレーム数 | HFリンク | MSR-VTT | DiDeMo | ActivityNet | MSVD |
---|---|---|---|---|---|---|---|---|
LanguageBind_Video | LoRA | 大規模 | 8 | リンク | 42.6 | 37.8 | 35.1 | 52.2 |
LanguageBind_Video_FT | 完全チューニング | 大規模 | 8 | リンク | 42.7 | 38.1 | 36.9 | 53.5 |
LanguageBind_Video_V1.5_FT | 完全チューニング | 大規模 | 8 | リンク | 42.8 | 39.7 | 38.4 | 54.1 |
LanguageBind_Video_V1.5_FT | 完全チューニング | 大規模 | 12 | 近日公開 | ||||
LanguageBind_Video_Huge_V1.5_FT | 完全チューニング | 巨大 | 8 | リンク | 44.8 | 39.9 | 41.0 | 53.7 |
LanguageBind_Video_Huge_V1.5_FT | 完全チューニング | 巨大 | 12 | 近日公開 |
🤖 API
私たちはすべてのモダリティの前処理コードをオープンソース化しています。 Huggingfaceのモデルハブまたはローカルからモデル(例:LanguageBind/LanguageBind_Thermal
)をロードする場合は、以下のコードスニペットを使用できます!
多モーダル結合の推論
私たちは、assetsにいくつかのサンプルデータセットを用意しており、LanguageBindの動作をすぐに確認できます。
import torch
from languagebind import LanguageBind, to_device, transform_dict, LanguageBindImageTokenizer
if __name__ == '__main__':
device = 'cuda:0'
device = torch.device(device)
clip_type = {
'video': 'LanguageBind_Video_FT', # also LanguageBind_Video
'audio': 'LanguageBind_Audio_FT', # also LanguageBind_Audio
'thermal': 'LanguageBind_Thermal',
'image': 'LanguageBind_Image',
'depth': 'LanguageBind_Depth',
}
model = LanguageBind(clip_type=clip_type, cache_dir='./cache_dir')
model = model.to(device)
model.eval()
pretrained_ckpt = f'lb203/LanguageBind_Image'
tokenizer = LanguageBindImageTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir/tokenizer_cache_dir')
modality_transform = {c: transform_dict[c](model.modality_config[c]) for c in clip_type.keys()}
image = ['assets/image/0.jpg', 'assets/image/1.jpg']
audio = ['assets/audio/0.wav', 'assets/audio/1.wav']
video = ['assets/video/0.mp4', 'assets/video/1.mp4']
depth = ['assets/depth/0.png', 'assets/depth/1.png']
thermal = ['assets/thermal/0.jpg', 'assets/thermal/1.jpg']
language = ["Training a parakeet to climb up a ladder.", 'A lion climbing a tree to catch a monkey.']
inputs = {
'image': to_device(modality_transform['image'](image), device),
'video': to_device(modality_transform['video'](video), device),
'audio': to_device(modality_transform['audio'](audio), device),
'depth': to_device(modality_transform['depth'](depth), device),
'thermal': to_device(modality_transform['thermal'](thermal), device),
}
inputs['language'] = to_device(tokenizer(language, max_length=77, padding='max_length',
truncation=True, return_tensors='pt'), device)
with torch.no_grad():
embeddings = model(inputs)
print("Video x Text: \n",
torch.softmax(embeddings['video'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("Image x Text: \n",
torch.softmax(embeddings['image'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("Depth x Text: \n",
torch.softmax(embeddings['depth'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("Audio x Text: \n",
torch.softmax(embeddings['audio'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("Thermal x Text: \n",
torch.softmax(embeddings['thermal'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
次に、以下の結果が返されます。
Video x Text:
[[9.9989331e-01 1.0667283e-04]
[1.3255903e-03 9.9867439e-01]]
Image x Text:
[[9.9990666e-01 9.3292067e-05]
[4.6132666e-08 1.0000000e+00]]
Depth x Text:
[[0.9954276 0.00457235]
[0.12042473 0.8795753 ]]
Audio x Text:
[[0.97634876 0.02365119]
[0.02917843 0.97082156]]
Thermal x Text:
[[0.9482511 0.0517489 ]
[0.48746133 0.5125386 ]]
緊急ゼロショット
LanguageBindは各モダリティを結びつけるため、緊急ゼロショットも見つけました。使い方は非常に簡単です。
print("Video x Audio: \n", torch.softmax(embeddings['video'] @ embeddings['audio'].T, dim=-1).detach().cpu().numpy())
print("Image x Depth: \n", torch.softmax(embeddings['image'] @ embeddings['depth'].T, dim=-1).detach().cpu().numpy())
print("Image x Thermal: \n", torch.softmax(embeddings['image'] @ embeddings['thermal'].T, dim=-1).detach().cpu().numpy())
すると、以下の結果が得られます。
Video x Audio:
[[1.0000000e+00 0.0000000e+00]
[3.1150486e-32 1.0000000e+00]]
Image x Depth:
[[1. 0.]
[0. 1.]]
Image x Thermal:
[[1. 0.]
[0. 1.]]
X言語タスクのための異なるブランチ
さらに、LanguageBindは異なるブランチに分解して異なるタスクを処理することができます。ただし、画像はOpenCLIPから初期化されるだけで、ファインチューニングは行っていません。
熱画像
import torch
from languagebind import LanguageBindThermal, LanguageBindThermalTokenizer, LanguageBindThermalProcessor
pretrained_ckpt = 'LanguageBind/LanguageBind_Thermal'
model = LanguageBindThermal.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
tokenizer = LanguageBindThermalTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
thermal_process = LanguageBindThermalProcessor(model.config, tokenizer)
model.eval()
data = thermal_process([r"your/thermal.jpg"], ['your text'], return_tensors='pt')
with torch.no_grad():
out = model(**data)
print(out.text_embeds @ out.image_embeds.T)
深度
import torch
from languagebind import LanguageBindDepth, LanguageBindDepthTokenizer, LanguageBindDepthProcessor
pretrained_ckpt = 'LanguageBind/LanguageBind_Depth'
model = LanguageBindDepth.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
tokenizer = LanguageBindDepthTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
depth_process = LanguageBindDepthProcessor(model.config, tokenizer)
model.eval()
data = depth_process([r"your/depth.png"], ['your text.'], return_tensors='pt')
with torch.no_grad():
out = model(**data)
print(out.text_embeds @ out.image_embeds.T)
ビデオ
import torch
from languagebind import LanguageBindVideo, LanguageBindVideoTokenizer, LanguageBindVideoProcessor
pretrained_ckpt = 'LanguageBind/LanguageBind_Video_FT' # also 'LanguageBind/LanguageBind_Video'
model = LanguageBindVideo.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
tokenizer = LanguageBindVideoTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
video_process = LanguageBindVideoProcessor(model.config, tokenizer)
model.eval()
data = video_process(["your/video.mp4"], ['your text.'], return_tensors='pt')
with torch.no_grad():
out = model(**data)
print(out.text_embeds @ out.image_embeds.T)
オーディオ
import torch
from languagebind import LanguageBindAudio, LanguageBindAudioTokenizer, LanguageBindAudioProcessor
pretrained_ckpt = 'LanguageBind/LanguageBind_Audio_FT' # also 'LanguageBind/LanguageBind_Audio'
model = LanguageBindAudio.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
tokenizer = LanguageBindAudioTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
audio_process = LanguageBindAudioProcessor(model.config, tokenizer)
model.eval()
data = audio_process([r"your/audio.wav"], ['your audio.'], return_tensors='pt')
with torch.no_grad():
out = model(**data)
print(out.text_embeds @ out.image_embeds.T)
画像
私たちの画像エンコーダはOpenCLIPと同じです。ファインチューニングは行っていません。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。










