モデル概要
モデル特徴
モデル能力
使用事例
🚀 【ICLR 2024 🔥】LanguageBind: 言語ベースのセマンティックアライメントによるビデオ - 言語の事前学習の N モーダリティへの拡張
LanguageBind は、言語を中心とした多モーダル事前学習手法です。言語を異なるモーダリティ間の架け橋として利用し、セグメンテーションや検出タスク、さらには潜在的に無限のモーダリティに簡単に拡張できます。また、1000 万件のデータを含む VIDAL - 10M データセットを提案し、視覚モーダリティ以外のデータを大幅に拡充しています。
🚀 クイックスタート
ローカルデモ
私たちの Web デモを試すことを強くおすすめします。このデモには、LanguageBind が現在サポートしているすべての機能が統合されています。
python gradio_app.py
オンラインデモ
私たちは Huggingface Spaces 上でオンラインデモを提供しています。このデモでは、モーダリティと言語の間の類似度、例えばオーディオと言語、ビデオと言語、深度画像と画像の間の類似度を計算できます。
✨ 主な機能
💡 高性能、中間モーダリティ不要
LanguageBind は言語を中心とした多モーダル事前学習手法で、言語を異なるモーダリティ間の架け橋として利用します。言語モーダリティは十分に研究されており、豊富なセマンティック情報を含んでいます。
- 下の図は LanguageBind のアーキテクチャを示しています。LanguageBind は、セグメンテーションや検出タスク、さらには潜在的に無限のモーダリティに簡単に拡張できます。
⚡️ 多モーダル、完全にアライメントされた大容量データセット
私たちは VIDAL - 10M を提案しました。これは、ビデオ(Video)、赤外線(Infrared)、深度(Depth)、オーディオ(Audio) および対応する 言語(Language) を含む 1000 万件のデータ のデータセットで、視覚モーダリティ以外のデータを大幅に拡充しています。
- 2 枚目の図は、私たちが提案した VIDAL - 10M データセットを示しており、ビデオ、赤外線、深度、オーディオ、言語の 5 つのモーダリティを含んでいます。
🔥 学習用の多視点強化記述
私たちは言語に対して多視点強化を行いました。メタデータ、空間、時間 を組み合わせた多視点記述を生成し、言語のセマンティック情報を大幅に強化しました。さらに、ChatGPT を使用して言語を強化し、各モーダリティにアライメントされた言語に良好なセマンティック空間を作成しました。
📦 インストール
環境要件
- 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
💻 使用例
基本的な使用法
私たちは 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.]]
異なるブランチでのクロス言語タスク処理
さらに、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 と同じです。他のモーダリティのような微調整は行っていません。
import torch
from languagebind import LanguageBindImage, LanguageBindImageTokenizer, LanguageBindImageProcessor
pretrained_ckpt = 'LanguageBind/LanguageBind_Image'
model = LanguageBindImage.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
tokenizer = LanguageBindImageTokenizer.from_pretrained(pretrained_ckpt, cache_dir='./cache_dir')
image_process = LanguageBindImageProcessor(model.config, tokenizer)
model.eval()
data = image_process([r"your/image.jpg"], ['your text.'], return_tensors='pt')
with torch.no_grad():
out = model(**data)
print(out.text_embeds @ out.image_embeds.T)
📚 ドキュメント
モデルライブラリ
表の名前は異なるエンコーダモデルを表しています。例えば、LanguageBind/LanguageBind_Video_FT
は完全に微調整されたバージョンを、LanguageBind/LanguageBind_Video
は LoRA 微調整バージョンを表しています。
推奨の API 使用方法 で自由に置き換えることができます。より強力な性能を提供するため、完全に微調整されたバージョンの使用をおすすめします。
モーダリティ | LoRA 微調整 | 完全微調整 |
---|---|---|
ビデオ | LanguageBind_Video | LanguageBind_Video_FT |
オーディオ | LanguageBind_Audio | LanguageBind_Audio_FT |
深度 | LanguageBind_Depth | - |
熱画像 | LanguageBind_Thermal | - |
バージョン | 微調整方法 | モデルサイズ | フレーム数 | Hugging Face リンク | 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 | 近日公開 | - | - | - | - |
データセット
データセットに関する詳細情報は DATASETS.md を参照してください。
学習と検証
学習と検証の説明は TRAIN_AND_VALIDATE.md を参照してください。
謝辞
- OpenCLIP:オープンソースの事前学習フレームワーク。
- CLIP4Clip:オープンソースのビデオ - テキスト検索フレームワーク。
- sRGB - TIR:赤外線(熱画像)を生成するためのオープンソースフレームワーク。
- GLPN:深度画像を生成するためのオープンソースフレームワーク。
🔧 技術詳細
LanguageBind は言語を中心として、言語の豊富なセマンティクスを利用して異なるモーダリティのデータを結びつけます。VIDAL - 10M データセットを提案することで、ビデオ、赤外線、深度、オーディオ、言語の 5 つのモーダリティを含む多モーダル事前学習に豊富なデータ基盤を提供します。学習過程では、多視点強化記述の手法を採用し、メタデータ、空間、時間の情報を組み合わせて言語のセマンティック表現をさらに強化します。同時に、モデルは複数のモーダリティの推論と緊急ゼロショット推論をサポートし、多モーダルタスクに強力なサポートを提供します。
📄 ライセンス
- 本プロジェクトの大部分は MIT ライセンスに従います。詳細は LICENSE ファイルを参照してください。
- 本プロジェクトのデータセットは CC - BY - NC 4.0 ライセンスに従います。詳細は DATASET_LICENSE ファイルを参照してください。
✏️ 引用
もし私たちの論文とコードがあなたの研究に役立った場合、Star ⭐ を付けていただき、論文を引用していただけると幸いです。
@misc{zhu2023languagebind,
title={LanguageBind: Extending Video-Language Pretraining to N-modality by Language-based Semantic Alignment},
author={Bin Zhu and Bin Lin and Munan Ning and Yang Yan and Jiaxi Cui and Wang HongFa and Yatian Pang and Wenhao Jiang and Junwu Zhang and Zongwei Li and Cai Wan Zhang and Zhifeng Li and Wei Liu and Li Yuan},
year={2023},
eprint={2310.01852},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
📰 最新情報
- [2024.01.27] 👀👀👀 私たちの MoE - LLaVA がリリースされました!30 億パラメータのスパースモデルが 70 億パラメータの密集モデルを上回る性能を発揮します。
- [2024.01.16] 🔥🔥🔥 私たちの LanguageBind が ICLR 2024 に採択されました!こちら here で 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 をオープンソース化しました。詳細は DATASETS.md を参照してください。
- [2023.11.26] 📣📣📣 私たちは完全に微調整された ビデオとオーディオ モデルをオープンソース化し、性能がさらに向上しました。モデルライブラリ をご覧ください。
- [2023.11.22] 完全に微調整されたバージョンを近日リリース予定です。巨大バージョン は学習中です。
- [2023.11.20] 🚀🚀🚀 Video - LLaVA が LanguageBind エンコーダをベースに大型の視覚 - 言語モデルを構築し、🎉 最先端の性能を達成しました。
- [2023.10.23] 🎶 LanguageBind - Audio が 5 つのデータセットで 🎉🎉🎉 最先端の性能 を達成しました。✨ 結果 をご覧ください!
- [2023.10.14] 😱 より強力な LanguageBind - Video をリリースしました。✨ 結果 をご覧ください!ビデオチェックポイントは Huggingface モデルセンターで更新されています!
- [2023.10.10] サンプルデータを提供しており、assets で見つけることができます。また、緊急ゼロショットの使用方法 を説明しています。
- [2023.10.07] チェックポイントは 🤗 Huggingface モデル で取得できます。
- [2023.10.04] コードと デモ が利用可能になりました!最新の更新情報を得るために、このリポジトリをフォローしてください。
✨ Star 履歴
🤝 貢献者










