モデル概要
モデル特徴
モデル能力
使用事例
🚀 【ICLR 2024 🔥】LanguageBind: Extending Video-Language Pretraining to N-modality by Language-based Semantic Alignment
LanguageBindは、言語ベースの意味的アラインメントにより、ビデオと言語の事前学習をNモダリティに拡張する手法です。このアプローチにより、様々なモダリティ間の結合が可能になります。
🚀 クイックスタート
このプロジェクトを始めるには、以下の手順に従ってください。まずは必要なパッケージをインストールし、モデルをロードして推論を行います。
✨ 主な機能
💡 高い性能を発揮し、中間モダリティを必要としない
LanguageBindは、言語を中心としたマルチモーダル事前学習アプローチです。言語モダリティは十分に研究され、豊富な意味情報を持っているため、異なるモダリティ間の結合として利用されます。以下の最初の図は、LanguageBindのアーキテクチャを示しています。LanguageBindは、セグメンテーションや検出タスクに簡単に拡張でき、潜在的に無制限のモダリティに対応できます。
⚡️ マルチモーダルで完全にアラインされた大容量のデータセット
私たちは、VIDAL - 10Mを提案しています。これは、ビデオ、赤外線、深度、音声とそれに対応する言語を含む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
💻 使用例
基本的な使用法
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())
高度な使用法
緊急ゼロショット
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())
異なるブランチでのX - 言語タスク
Thermal
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)
Depth
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)
Video
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)
Audio
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)
📚 ドキュメント
📰 ニュース
- [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.21] 💥 私たちはDATASETS.mdにサンプルデータを公開しています。興味のある方は、コードを修正して独自のデータでトレーニングすることができます。
- [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が現在サポートしているすべての機能を組み込んだウェブデモを試すことを強くおすすめします。
python gradio_app.py
オンラインデモ
私たちは、Huggingface Spacesでオンラインデモを提供しています。このデモでは、音声と言語、ビデオと言語、深度と画像など、モダリティと言語の類似度を計算することができます。
🐳 モデルズー
表の名前は、異なるエンコーダモデルを表しています。たとえば、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 | Large | 8 | Link | 42.6 | 37.8 | 35.1 | 52.2 |
LanguageBind_Video_FT | 完全チューニング | Large | 8 | Link | 42.7 | 38.1 | 36.9 | 53.5 |
LanguageBind_Video_V1.5_FT | 完全チューニング | Large | 8 | Link | 42.8 | 39.7 | 38.4 | 54.1 |
LanguageBind_Video_V1.5_FT | 完全チューニング | Large | 12 | 近日公開 | - | - | - | - |
LanguageBind_Video_Huge_V1.5_FT | 完全チューニング | Huge | 8 | Link | 44.8 | 39.9 | 41.0 | 53.7 |
LanguageBind_Video_Huge_V1.5_FT | 完全チューニング | Huge | 12 | 近日公開 | - | - | - | - |
📄 ライセンス
このプロジェクトは、MITライセンスの下で公開されています。










