Project Icon

LanguageBind

通过语言绑定实现跨模态语义对齐

LanguageBind是一种基于语言的多模态预训练方法,通过语言将不同模态进行语义关联。该方法引入了VIDAL-10M数据集,包含1000万条视频、红外、深度、音频及对应语言数据。通过多视角增强的语言描述训练,LanguageBind在多个跨模态任务上实现了先进性能,无需中间模态即可完成跨模态语义对齐。

【ICLR 2024 🔥】LanguageBind:通过基于语言的语义对齐将视频-语言预训练扩展到N种模态

如果您喜欢我们的项目,请在GitHub上给我们一个星标⭐以获取最新更新。

hf_space Dataset meta arXiv wechat jiqizhixin zhihu License Data License Hits GitHub issues GitHub closed issues

PWC
PWC
PWC
PWC
PWC
PWC
PWC
PWC
PWC
PWC
PWC
PWC

💡 我还有其他可能引起您兴趣的视觉-语言项目 ✨。

> [**对齐后投影的统一视觉表示学习:Video-LLaVA**](https://arxiv.org/abs/2311.10122)
> 林斌、叶阳、朱斌、崔嘉熙、宁沐楠、金鹏、袁礼
[![github](https://img.shields.io/badge/-Github-black?logo=github)](https://github.com/PKU-YuanGroup/Video-LLaVA) [![github](https://yellow-cdn.veclightyear.com/835a84d5/cec300c0-4dc0-40bc-814b-f475ec1a07b5.svg?style=social)](https://github.com/PKU-YuanGroup/Video-LLaVA) [![arXiv](https://yellow-cdn.veclightyear.com/835a84d5/24489bac-8d7a-4440-abcf-4c9a8d946b68.svg?logo=arXiv)](https://arxiv.org/abs/2311.10122)

大型视觉语言模型的专家混合:MoE-LLaVA
林斌、唐振宇、叶阳、崔嘉熙、朱斌、金鹏、张俊武、宁沐楠、袁礼
github github arXiv

Video-Bench: 评估基于视频的大型语言模型的综合基准和工具包
宁沐楠、朱斌、谢雨佳、林斌、崔嘉熙、袁路、陈东东、袁礼
github github arXiv

📰 新闻

  • [2024.01.27] 👀👀👀 我们的 MoE-LLaVA 已发布!一个具有3B参数的稀疏模型超越了具有7B参数的密集模型。
  • [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编码器实现了🎉最先进的性能。
  • [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-10M1000万条数据包含频、外、度、频及其对应的言,极大地扩展了视觉模态之外的数据。

  • 第二张图显示了我们提出的VIDAL-10M数据集,包括五种模态:视频、红外、深度、音频和语言。

🔥 用于训练的多视角增强描述

我们对语言进行了多视角增强。我们生成了结合元数据空间时间的多视角描述,极大地增强了语言的语义信息。此外,我们进一步用ChatGPT增强语言,为每个模态对齐的语言创建了良好的语义空间。

🤗 演示

  • 本地演示。 强烈建议尝试我们的网页演示,它包含了LanguageBind目前支持的所有功能。
python gradio_app.py
  • 在线演示。 我们在Huggingface Spaces提供了在线演示。在这个演示中,你可以计算模态与语言之间的相似度,如音频到语言、视频到语言和深度到图像。

🚀 主要结果

视频-语言

LanguageBind在四个数据集上实现了最先进的(SOTA)性能,*表示完全微调的结果。

### 多模态 视频-语言、红外-语言、深度-语言和音频-语言零样本分类,*表示全量微调的结果。

我们报告了文本到音频的检索结果,*表示全量微调的结果。

紧急情况结果

🛠️ 要求和安装

  • 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-VTTDiDeMoActivityNetMSVD
LanguageBind_VideoLoRALarge8链接42.637.835.152.2
LanguageBind_Video_FT全量微调Large8链接42.738.136.953.5
LanguageBind_Video_V1.5_FT全量微调Large8链接42.839.738.454.1
LanguageBind_Video_V1.5_FT全量微调Large12即将推出
LanguageBind_Video_Huge_V1.5_FT全量微调Huge8链接44.839.941.053.7
LanguageBind_Video_Huge_V1.5_FT全量微调Huge12即将推出

🤖 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',  # 也可以是LanguageBind_Video
        'audio': 'LanguageBind_Audio_FT',  # 也可以是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 = ["训练一只鹦鹉爬梯子。", '一只狮子爬树捕猴子。']

    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",
      torch.softmax(embeddings['audio'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())
print("热成像 x 文本:\n",
      torch.softmax(embeddings['thermal'] @ embeddings['language'].T, dim=-1).detach().cpu().numpy())

然后返回以下结果。

视频 x 文本:
 [[9.9989331e-01 1.0667283e-04]
 [1.3255903e-03 9.9867439e-01]]
图像 x 文本:
 [[9.9990666e-01 9.3292067e-05]
 [4.6132666e-08 1.0000000e+00]]
深度 x 文本:
 [[0.9954276  0.00457235]
 [0.12042473 0.8795753 ]]
音频 x 文本:
 [[0.97634876 0.02365119]
 [0.02917843 0.97082156]]
热成像 x 文本:
 [[0.9482511  0.0517489 ]
 [0.48746133 0.5125386 ]]

应急零样本

由于LanguageBind将每种模态绑定在一起,我们还发现了应急零样本。使用非常简单。

print("视频 x 音频:\n", torch.softmax(embeddings['video'] @ embeddings['audio'].T, dim=-1).detach().cpu().numpy())
print("图像 x 深度:\n", torch.softmax(embeddings['image'] @ embeddings['depth'].T, dim=-1).detach().cpu().numpy())
print("图像 x 热成像:\n", torch.softmax(embeddings['image'] @ embeddings['thermal'].T, dim=-1).detach().cpu().numpy())

然后,你会得到:

视频 x 音频:
 [[1.0000000e+00 0.0000000e+00]
 [3.1150486e-32 1.0000000e+00]]
图像 x 深度:
 [[1. 0.]
 [0. 1.]]
图像 x 热成像:
 [[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"你的/热成像.jpg"], ['你的文本'], 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"你的/深度.png"], ['你的文本。'], 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'  # 也可以是 '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(["你的/视频.mp4"], ['你的文本。'], 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'  # 也可以是 '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"你的/音频.wav"], ['你的音频。'], 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"你的/图像.jpg"], ['你的文本。'], return_tensors='pt')
with torch.no_grad():
    out = model(**data)

print(out.text_embeds @ out.image_embeds.T)

💥 VIDAL-10M

数据集信息在DATASETS.md中。

🗝️ 训练 & 验证

训练和验证说明在TRAIN_AND_VALIDATE.md中。

👍 致谢

  • OpenCLIP 一个开源预训练框架。
  • CLIP4Clip 一个开源视频-文本检索框架。
  • sRGB-TIR 一个生成红外(热成像)图像的开源框架。
  • GLPN 一个生成深度图像的开源框架。

🔒 许可证

  • 本项目的大部分内容根据LICENSE文件中的MIT许可证发布。
  • 本项目的数据集根据DATASET_LICENSE文件中的CC-BY-NC 4.0许可证发布。

✏️ 引用

如果您发现我们的论文和代码对您的研究有用,请考虑给个星标 :star: 和引用 :pencil:。

@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}
}

✨ 星标历史

Star History

🤝 贡献者

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号