license: 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个数据集上取得🎉🎉🎉最先进性能,查看✨成果!
- [2023.10.14] 😱 发布更强力的LanguageBind-Video,✨成果见,模型已更新至Huggingface!
- [2023.10.10] 提供assets示例数据及紧急零样本使用指南。
- [2023.10.07] 模型权重已登陆🤗 Huggingface。
- [2023.10.04] 代码与演示发布!欢迎👀关注项目获取更新。
😮 核心亮点
💡 高性能且无需中间模态
LanguageBind采用以语言为核心的多模态预训练范式,通过语言桥接不同模态,充分利用语言模态的丰富语义。
- 首张架构图展示LanguageBind可轻松扩展至分割、检测等任务,潜力覆盖无限模态。
⚡️ 海量全对齐多模态数据集
推出VIDAL-10M数据集,包含1000万条视频(V)、红外(I)、深度(D)、**音频(A)及对应语言(L)**数据,极大拓展视觉模态边界。
- 次图展示VIDAL-10M的五模态构成:视频、红外、深度、音频与语言。
🔥 多视角强化的语言描述
通过融合元数据、空间与时间的多视角描述增强语言语义,并采用ChatGPT进一步优化,为各模态构建优质语义对齐空间。
🤗 演示体验
python gradio_app.py
🛠️ 安装要求
- 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目录提供示例数据快速体验:
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("视频 x 文本: \n",
torch.softmax(embeddings['video'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("图像 x 文本: \n",
torch.softmax(embeddings['image'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("深度 x 文本: \n",
torch.softmax(embeddings['depth'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("音频 x 文本: \n",