Video-LLaVA是一个通过投影前对齐学习统一视觉表征的多模态模型,能够同时处理图像和视频的视觉推理任务。
下载量 2,066
发布时间 : 11/17/2023
模型介绍
内容详情
替代品
模型简介
Video-LLaVA通过将统一视觉表征绑定至语言特征空间,使大语言模型能同时处理图像与视频的视觉推理任务,展现出卓越的跨模态交互能力。
模型特点
投影前对齐
通过将统一视觉表征绑定至语言特征空间,实现图像和视频的统一处理
跨模态交互
尽管数据集中不含图像-视频对,仍展现出卓越的跨模态交互能力
模态互补性
视频与图像的互补学习,相比单一模态专用模型具有显著优势
模型能力
图像理解与分析
视频理解与分析
多模态推理
视觉问答
使用案例
内容理解
视频内容分析
分析视频内容并回答相关问题
能够理解视频中的动作、场景和事件
图像内容理解
理解图像内容并进行描述
能够识别图像中的对象、场景和关系
教育
多媒体教学辅助
帮助理解教学视频和图像内容
提供对教学材料的深入理解
license: apache-2.0
Video-LLaVA:通过投影前对齐学习统一视觉表征
若喜欢本项目,请点击GitHub星标⭐获取最新动态。
📰 动态
- [2024.01.27] 👀👀👀 我们的MoE-LLaVA已发布!3B参数的稀疏模型性能超越7B参数的稠密模型。
- [2024.01.17] 🔥🔥🔥 我们的LanguageBind被ICLR 2024接收!
- [2024.01.16] 🔥🔥🔥 代码重构并支持LoRA微调,参见finetune_lora.sh。
- [2023.11.30] 🤝 感谢社区贡献,OpenXLab在线演示已开放。
- [2023.11.23] 正在训练更强大的新模型。
- [2023.11.21] 🤝 查看由@nateraw创建的replicate演示,感谢其对研究的支持!
- [2023.11.20] 🤗 Hugging Face演示及全部代码与数据集已开放!欢迎watch👀本仓库获取更新。
😮 亮点
尽管数据集中不含图像-视频对,Video-LLaVA仍展现出卓越的跨模态交互能力。
💡 简洁基线:通过投影前对齐学习统一视觉表征
- 将统一视觉表征绑定至语言特征空间,使大语言模型能同时处理图像与视频的视觉推理任务。
🔥 高性能:视频与图像的互补学习
- 大量实验证明模态互补性,相比单一模态专用模型具有显著优势。
🤗 演示
Gradio网页界面
强烈建议运行以下命令体验完整功能,我们也提供了Hugging Face在线演示。
python -m videollava.serve.gradio_web_server
命令行推理
python -m videollava.serve.cli --model-path "LanguageBind/Video-LLaVA-7B" --file "视频路径.mp4" --load-4bit
python -m videollava.serve.cli --model-path "LanguageBind/Video-LLaVA-7B" --file "图像路径.jpg" --load-4bit
🛠️ 安装要求
- Python ≥ 3.10
- Pytorch == 2.0.1
- CUDA ≥ 11.7
- 安装依赖:
git clone https://github.com/PKU-YuanGroup/Video-LLaVA
cd Video-LLaVA
conda create -n videollava python=3.10 -y
conda activate videollava
pip install --upgrade pip # 启用PEP 660支持
pip install -e .
pip install -e ".[train]"
pip install flash-attn --no-build-isolation
pip install decord opencv-python git+https://github.com/facebookresearch/pytorchvideo.git@28fe037d212663c6a24f373b94cc5d478c8c1a1d
🤖 API接口
我们开源全部代码。若需本地加载模型(如LanguageBind/Video-LLaVA-7B
),可参考以下代码片段。
图像推理
import torch
from videollava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN
from videollava.conversation import conv_templates, SeparatorStyle
from videollava.model.builder import load_pretrained_model
from videollava.utils import disable_torch_init
from videollava.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria
def main():
disable_torch_init()
image = 'videollava/serve/examples/extreme_ironing.jpg'
inp = '这张图片有何特别之处?'
model_path = 'LanguageBind/Video-LLaVA-7B'
cache_dir = 'cache_dir'
device = 'cuda'
load_4bit, load_8bit = True, False
model_name = get_model_name_from_path(model_path)
tokenizer, model, processor, _ = load_pretrained_model(model_path, None, model_name, load_8bit, load_4bit, device=device, cache_dir=cache_dir)
image_processor = processor['image']
conv_mode = "llava_v1"
conv = conv_templates[conv_mode].copy()
roles = conv.roles
image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values']
if type(image_tensor) is list:
tensor = [image.to(model.device, dtype=torch.float16) for image in image_tensor]
else:
tensor = image_tensor.to(model.device, dtype=torch.float16)
print(f"{roles[1]}: {inp}")
inp = DEFAULT_IMAGE_TOKEN + '\n' + inp
conv.append_message(conv.roles[0], inp)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
input_ids,
images=tensor,
do_sample=True,
temperature=0.2,
max_new_tokens=1024,
use_cache=True,
stopping_criteria=[stopping_criteria])
outputs = tokenizer.decode(output_ids[0, input_ids.shape[1]:]).strip()
print(outputs)
if __name__ == '__main__':
main()
视频推理
import torch
from videollava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN
from videollava.conversation import conv_templates, SeparatorStyle
from videollava.model.builder import load_pretrained_model
from videollava.utils import disable_torch_init
from videollava.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria
def main():
disable_torch_init()
video = 'videollava/serve/examples/sample_demo_1.mp4'
inp = '这个视频为何有趣?'
model_path = 'LanguageBind/Video-LLaVA-7B'
cache_dir = 'cache_dir'
device = 'cuda'
load_4bit, load_8bit = True, False
model_name = get_model_name_from_path(model_path)
tokenizer, model, processor, _ = load_pretrained_model(model_path, None, model_name, load_8bit, load_4bit, device=device, cache_dir=cache_dir)
video_processor = processor['video']
conv_mode = "llava_v1"
conv = conv_templates[conv_mode].copy()
roles = conv.roles
video_tensor = video_processor(video, return_tensors='pt')['pixel_values']
if type(video_tensor) is list:
tensor = [video.to(model.device, dtype=torch.float16) for video in video_tensor]
else:
tensor = video_tensor.to(model.device, dtype=torch.float16)
print(f"{roles[1]}: {inp}")
inp = ' '.join([DEFAULT_IMAGE_TOKEN] * model.get_video_tower().config.num_frames) + '\n' + inp
conv.append_message(conv.roles[0], inp)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
with torch.inference_mode():
output_ids = model.generate(
input_ids,
images=tensor,
do_sample=True,
temperature=0.1,
max_new_tokens=1024,
use_cache=True,
stopping_criteria=[stopping_criteria])
outputs = tokenizer.decode(output_ids[0, input_ids.shape[1]:]).strip()
print(outputs)
if __name__ == '__main__':
main()
🗝️ 训练与验证
👍 致谢
- LLaVA 本项目基础代码库,高效的大语言与视觉助手。
- Video-ChatGPT 贡献了评估代码与数据集。
🙌 相关项目
- LanguageBind 开源的五模态语言检索框架。
- Chat-UniVi 高效利用有限视觉token的框架。
🔒 许可协议
- 主体代码基于Apache 2.0许可。
- 服务仅供研究预览,非商业用途,需遵守LLaMA的模型许可、OpenAI数据使用条款及ShareGPT隐私政策。发现侵权请联系我们。
✏️ 引用
若论文或代码对您的研究有帮助,请引用并点亮星标:star:。
@article{lin2023video,
title={Video-LLaVA: Learning United Visual Representation by Alignment Before Projection},
author={Lin, Bin and Zhu, Bin and Ye, Yang and Ning, Munan and Jin, Peng and Yuan, Li},
journal={arXiv preprint arXiv:2311.10122},
year={2023}
}
@article{zhu2023languagebind,
title={LanguageBind: Extending Video-Language Pretraining to N-modality by Language-based Semantic Alignment},
author={Zhu, Bin and Lin, Bin and Ning, Munan and Yan, Yang and Cui, Jiaxi and Wang, HongFa and Pang, Yatian and Jiang, Wenhao and Zhang, Junwu and Li, Zongwei and others},
journal={arXiv preprint arXiv:2310.01852},
year={2023}
}
✨ 星标历史
🤝 贡献者
Xclip Base Patch32
MIT
X-CLIP是CLIP的扩展版本,用于通用视频语言理解,通过对比学习在(视频,文本)对上训练,适用于视频分类和视频-文本检索等任务。
文本生成视频
Transformers

英语
X
microsoft
309.80k
84
LTX Video
其他
首个基于DiT的视频生成模型,能够实时生成高质量视频,支持文本转视频和图像+文本转视频两种场景。
文本生成视频
英语
L
Lightricks
165.42k
1,174
Animatediff Lightning
Openrail
极速文本生成视频模型,生成速度比原版AnimateDiff快十倍以上
文本生成视频
A
ByteDance
144.00k
925
V Express
V-Express是一个基于音频和面部关键点条件生成的视频生成模型,能够将音频输入转换为动态视频输出。
文本生成视频
英语
V
tk93
118.36k
85
Cogvideox 5b
其他
CogVideoX是源自清影的视频生成模型的开源版本,提供高质量的视频生成能力。
文本生成视频
英语
C
THUDM
92.32k
611
Llava NeXT Video 7B Hf
LLaVA-NeXT-Video是一个开源多模态聊天机器人,通过视频和图像数据混合训练获得优秀的视频理解能力,在VideoMME基准上达到开源模型SOTA水平。
文本生成视频
Transformers

英语
L
llava-hf
65.95k
88
Wan2.1 T2V 14B Diffusers
Apache-2.0
万2.1是一套全面开放的视频基础模型,旨在突破视频生成的边界,支持中英文文本生成视频、图像生成视频等多种任务。
文本生成视频
支持多种语言
W
Wan-AI
48.65k
24
Wan2.1 T2V 1.3B Diffusers
Apache-2.0
万2.1是一套全面开放的视频基础模型,具备顶尖性能、支持消费级GPU、多任务支持、视觉文本生成和高效视频VAE等特点。
文本生成视频
支持多种语言
W
Wan-AI
45.29k
38
Wan2.1 T2V 14B
Apache-2.0
万2.1是一套综合性开源视频基础模型,具备文本生成视频、图像生成视频、视频编辑、文本生成图像及视频生成音频等多任务能力,支持中英双语文本生成。
文本生成视频
支持多种语言
W
Wan-AI
44.88k
1,238
Wan2.1 T2V 14B Gguf
Apache-2.0
基于GGUF格式转换的文本生成视频模型,支持通过ComfyUI-GGUF自定义节点使用
文本生成视频
W
city96
42.38k
130
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文