开源协议: MIT
如果喜欢我们的项目,请在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.21] 💥 我们在DATASETS.md中发布了样本数据,以便有兴趣的人可以进一步修改代码在自己的数据上训练。
- [2023.11.20] 🚀🚀🚀 Video-LLaVA基于LanguageBind编码器构建了一个大型视觉语言模型,实现了🎉SOTA性能。
- [2023.10.23] 🎶 LanguageBind-Audio在5个数据集上实现了🎉🎉🎉最先进(SOTA)性能,查看我们的✨ 结果!
- [2023.10.14] 😱 发布了更强的LanguageBind-Video,查看我们的✨ 结果!视频检查点已在Huggingface模型中心更新!
- [2023.10.10] 我们提供了样本数据,可在assets中找到,并描述了紧急零样本使用。
- [2023.10.07] 检查点已在🤗 Huggingface模型上可用。
- [2023.10.04] 代码和演示现已可用!欢迎关注👀此仓库获取最新更新。
😮 亮点
💡 高性能,但无需中间模态
LanguageBind是一种以语言为中心的多模态预训练方法,将语言作为不同模态之间的纽带,因为语言模态已被充分探索且包含丰富的语义。
- 下图展示了LanguageBind的架构。LanguageBind可以轻松扩展到分割、检测任务,并可能扩展到无限模态。
⚡️ 多模态、完全对齐且庞大的数据集
我们提出了VIDAL-10M,包含1000万数据,涵盖视频(V)、红外(I)、深度(D)、音频(A)及其对应的语言(L),极大地扩展了视觉模态之外的数据。
- 第二张图展示了我们提出的VIDAL-10M数据集,包括五种模态:视频、红外、深度、音频和语言。
🔥 训练中的多视角增强描述
我们对语言进行了多视角增强。我们生成了结合元数据、空间和时间的多视角描述,极大地增强了语言的语义信息。此外,我们还使用ChatGPT进一步增强了语言,为每种模态对齐的语言创建了一个良好的语义空间。
🤗 演示
- 本地演示。 强烈推荐尝试我们的网页演示,它包含了LanguageBind当前支持的所有功能。
python gradio_app.py
- 在线演示。 我们在Huggingface Spaces提供了在线演示。在这个演示中,你可以计算模态与语言的相似度,例如音频到语言、视频到语言和深度到图像。
🛠️ 要求和安装
- Python >= 3.8
- Pytorch >= 1.13.1
- CUDA版本 >= 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使用中自由替换它们。我们推荐使用完全微调版本,因为它提供更强的性能。
版本 | 微调 | 模型大小 | 帧数 | 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',
'audio': 'LanguageBind_Audio_FT',
'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 = ["训练一只鹦鹉爬上梯子。", '一只狮子爬树抓猴子。']
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("视频