通过语言绑定实现跨模态语义对齐
LanguageBind是一种基于语言的多模态预训练方法,通过语言将不同模态进行语义关联。该方法引入了VIDAL-10M数据集,包含1000万条视频、红外、深度、音频及对应语言数据。通过多视角增强的语言描述训练,LanguageBind在多个跨模态任务上实现了先进性能,无需中间模态即可完成跨模态语义对齐。
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
大型视觉语言模型的专家混合:MoE-LLaVA <br> 林斌、唐振宇、叶阳、崔嘉熙、朱斌、金鹏、张俊武、宁沐楠、袁礼 <br>
![]()
![]()
<br>
</p></details>Video-Bench: 评估基于视频的大型语言模型的综合基准和工具包 <br> 宁沐楠、朱斌、谢雨佳、林斌、崔嘉熙、袁路、陈东东、袁礼 <br>
![]()
![]()
<br>
LanguageBind是一种以语言为中心的多模态预训练方法,以语言作为不同模态之间的纽带,因为语言模态已被充分探索并包含丰富的语义。
我们提出了VIDAL-10M,1000万条数据包含视频、红外、深度、音频及其对应的语言,极大地扩展了视觉模态之外的数据。
我们对语言进行 了多视角增强。我们生成了结合元数据、空间和时间的多视角描述,极大地增强了语言的语义信息。此外,我们进一步用ChatGPT增强语言,为每个模态对齐的语言创建了良好的语义空间。
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/8ddcb1e2-7f76-4f29-a1d5-616ec09d8e0d.jpg" width=100%> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/fcce7e3a-ba2b-44f8-9c6a-eb04c6b681f1.jpg" width=99%> </p>python gradio_app.py
LanguageBind在四个数据集上实现了最先进的(SOTA)性能,*表示完全微调的结果。
<p align="left"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/e024488a-8c51-4a86-9902-d2f2a90249d4.jpg" width=80%> </p> ### 多模态 视频-语言、红外-语言、深度-语言和音频-语言零样本分类,*表示全量微调的结果。 <p align="left"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/cc18020d-8c6a-443e-9360-3d43d29d06fb.jpg" width=80%> </p> 我们报告了文本到音频的检索结果,*表示全量微调的结果。 <p align="left"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/a28cbaa1-17d7-4aab-a15f-b7a43ae54f46.jpg" width=35%> </p>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使用中自由替换它们。我们建议使用全量微调版本,因为它提供更强的性能。
<div align="center"> <table border="1" width="100%"> <tr align="center"> <th>模态</th><th>LoRA微调</th><th>全量微调</th> </tr> <tr align="center"> <td>视频</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video">LanguageBind_Video</a></td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video_FT">LanguageBind_Video_FT</a></td> </tr> <tr align="center"> <td>音频</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Audio">LanguageBind_Audio</a></td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Audio_FT">LanguageBind_Audio_FT</a></td> </tr> <tr align="center"> <td>深度</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Depth">LanguageBind_Depth</a></td><td>-</td> </tr> <tr align="center"> <td>热成像</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Thermal">LanguageBind_Thermal</a></td><td>-</td> </tr> </table> </div> <div align="center"> <table border="1" width="100%"> <tr align="center"> <th>版本</th><th>微调</th><th>模型大小</th><th>帧数</th><th>HF链接</th><th>MSR-VTT</th><th>DiDeMo</th><th>ActivityNet</th><th>MSVD</th> </tr> <tr align="center"> <td>LanguageBind_Video</td><td>LoRA</td><td>Large</td><td>8</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video">链接</a></td><td>42.6</td><td>37.8</td><td>35.1</td><td>52.2</td> </tr> <tr align="center"> <td>LanguageBind_Video_FT</td><td>全量微调</td><td>Large</td><td>8</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video_FT">链接</a></td><td>42.7</td><td>38.1</td><td>36.9</td><td>53.5</td> </tr> <tr align="center"> <td>LanguageBind_Video_V1.5_FT</td><td>全量微调</td><td>Large</td><td>8</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video_V1.5_FT">链接</a></td><td>42.8</td><td>39.7</td><td>38.4</td><td>54.1</td> </tr> <tr align="center"> <td>LanguageBind_Video_V1.5_FT</td><td>全量微调</td><td>Large</td><td>12</td><td>即将推出</td> </tr> <tr align="center"> <td>LanguageBind_Video_Huge_V1.5_FT</td><td>全量微调</td><td>Huge</td><td>8</td><td><a href="https://huggingface.co/LanguageBind/LanguageBind_Video_Huge_V1.5_FT">链接</a></td><td>44.8</td><td>39.9</td><td>41.0</td><td>53.7</td> </tr> <tr align="center"> <td>LanguageBind_Video_Huge_V1.5_FT</td><td>全量微调</td><td>Huge</td><td>12</td><td>即将推出</td> </tr> </table> </div>我们开源了所有模态的预处理代码。 如果您想从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.]]
此外,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)
数据集信息在DATASETS.md中。
训练和验证说明在TRAIN_AND_VALIDATE.md中。
如果您发现我们的论文和代码对您的研究有用,请考虑给个星标 :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} }
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号