Video LLaVA 7B
Video-LLaVA是一个通过投影前对齐学习统一视觉表征的多模态模型,能够同时处理图像和视频的视觉推理任务。
下载量 2,066
发布时间 : 11/17/2023
模型介绍
内容详情
替代品
模型简介
Video-LLaVA通过将统一视觉表征绑定至语言特征空间,使大语言模型能同时处理图像与视频的视觉推理任务,展现出卓越的跨模态交互能力。
模型特点
投影前对齐
通过将统一视觉表征绑定至语言特征空间,实现图像和视频的统一处理
跨模态交互
尽管数据集中不含图像-视频对,仍展现出卓越的跨模态交互能力
模态互补性
视频与图像的互补学习,相比单一模态专用模型具有显著优势
模型能力
图像理解与分析
视频理解与分析
多模态推理
视觉问答
使用案例
内容理解
视频内容分析
分析视频内容并回答相关问题
能够理解视频中的动作、场景和事件
图像内容理解
理解图像内容并进行描述
能够识别图像中的对象、场景和关系
教育
多媒体教学辅助
帮助理解教学视频和图像内容
提供对教学材料的深入理解
🚀 Video-LLaVA:通过投影前对齐学习统一视觉表示
Video-LLaVA是一个在图像和视频交互方面表现卓越的项目。它通过将统一视觉表示绑定到语言特征空间,让大语言模型能同时对图像和视频进行视觉推理。并且在多模态互补学习上性能出色,优于专门针对图像或视频的模型。
🚀 快速开始
试用演示
- Gradio Web UI:强烈推荐通过以下命令试用我们的Web演示,它集成了Video-LLaVA目前支持的所有功能。我们也在Huggingface Spaces上提供了在线演示。
python -m videollava.serve.gradio_web_server
- CLI推理:
python -m videollava.serve.cli --model-path "LanguageBind/Video-LLaVA-7B" --file "path/to/your/video.mp4" --load-4bit
python -m videollava.serve.cli --model-path "LanguageBind/Video-LLaVA-7B" --file "path/to/your/image.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
💻 使用示例
基础用法
以下是图像推理的基础代码示例:
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 = 'What is unusual about this image?'
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 = 'Why is this video funny?'
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()
📚 详细文档
训练与验证
训练和验证说明请参考 TRAIN_AND_VALIDATE.md。
🔧 技术细节
模型亮点
Video-LLaVA在数据集没有图像 - 视频对的情况下,展现出了图像和视频之间卓越的交互能力。通过将统一视觉表示绑定到语言特征空间,使大语言模型能够同时对图像和视频执行视觉推理能力。大量实验证明了模态的互补性,与专门为图像或视频设计的模型相比,具有显著优势。
📄 许可证
- 本项目的大部分内容遵循Apache 2.0许可证,详情见 LICENSE 文件。
- 该服务仅供研究预览,仅用于非商业用途,需遵守LLaMA的模型许可证、OpenAI生成数据的使用条款以及ShareGPT的隐私政策。如果您发现任何潜在的违规行为,请联系我们。
📰 最新消息
- [2024.01.27] 👀👀👀 我们的 MoE-LLaVA 发布了!一个30亿参数的稀疏模型性能超过了70亿参数的密集模型。
- [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演示 和 所有代码及数据集 现已可用!欢迎 关注 👀 此仓库以获取最新更新。
👍 致谢
- LLaVA 我们基于此代码库进行开发,它是一个高效的大语言和视觉助手。
- Video-ChatGPT 为评估代码和数据集做出了重要贡献。
🙌 相关项目
- LanguageBind 一个开源的五模态基于语言的检索框架。
- Chat-UniVi 该框架使模型能够有效利用有限数量的视觉标记。
✏️ 引用
如果您在研究中发现我们的论文和代码有用,请考虑给我们点个星 :star: 并引用 :pencil:。
@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}
}
✨ 星标历史
🤝 贡献者
Wan2.1 T2V 14B LightX2V StepCfgDistill VACE GGUF
Apache-2.0
万2.1文本到视频模型的GGUF格式转换版本,支持文本到视频、图像到视频和视频到视频的转换,经过量化处理以提高运行效率。
文本生成视频 英语
W
QuantStack
3,634
10
Wan2.1 T2V 14B LightX2V StepCfgDistill VACE GGUF
Apache-2.0
基于特定模型的转换项目,将模型转换为GGUF格式,支持文本到视频、图像到视频、视频到视频等多种功能
文本生成视频 英语
W
lym00
117
1
Wan2.1 T2V 14B FusionX VACE GGUF
Apache-2.0
这是一个文本到视频量化模型,基于特定基础模型进行量化转换,支持多种视频生成任务。
文本生成视频 英语
W
QuantStack
461
3
Wan2.1 T2V 14B FusionX GGUF
Apache-2.0
这是一个文本到视频的量化模型,将基础模型转换为GGUF格式,可在ComfyUI中使用,为文本到视频生成提供更多选择。
文本生成视频 英语
W
QuantStack
563
2
Wan2.1 14B T2V FusionX GGUF
Apache-2.0
这是一个文本转视频的量化模型,支持将文本描述转换为视频内容,并经过GGUF量化处理以提升推理效率。
文本生成视频 英语
W
QuantStack
133
1
Wan2.1 14B T2V FusionX FP8 GGUF
Apache-2.0
这是一个基于vrgamedevgirl84/Wan14BT2VFusionX模型的GGUF转换版本,主要用于文本到视频生成任务。
文本生成视频
W
lym00
490
4
Wan2.1 T2V 14B FusionX FP8 GGUF DEPRECATED
Apache-2.0
这是一个文本到视频生成模型的GGUF格式转换版本,旨在提供更高效的模型使用体验。
文本生成视频
W
lym00
653
5
Wan14bt2vfusionx Fp8 GGUF
Apache-2.0
这是一个文本到视频生成模型,经过GGUF转换后可与ComfyUI-GGUF兼容使用。
文本生成视频
W
lym00
490
2
Phantom Wan 1.3B GGUF
Apache-2.0
这是一个将 bytedance-research/Phantom 直接转换为 GGUF 格式的项目,用于图像到视频的转换任务。
文本生成视频 英语
P
QuantStack
315
3
Phantom Wan 1.3B GGUF
Apache-2.0
这是bytedance-research/Phantom模型的GGUF直接转换版本,可在ComfyUI中结合ComfyUI-GGUF自定义节点使用。
文本生成视频 英语
P
QuantStack
174
0
精选推荐AI模型
Qwen2.5 VL 7B Abliterated Caption It I1 GGUF
Apache-2.0
Qwen2.5-VL-7B-Abliterated-Caption-it的量化版本,支持多语言图像描述任务。
图像生成文本
Transformers 支持多种语言

Q
mradermacher
167
1
Nunchaku Flux.1 Dev Colossus
其他
Colossus Project Flux 的 Nunchaku 量化版本,旨在根据文本提示生成高质量图像。该模型在优化推理效率的同时,将性能损失降至最低。
图像生成 英语
N
nunchaku-tech
235
3
Qwen2.5 VL 7B Abliterated Caption It GGUF
Apache-2.0
这是一个基于Qwen2.5-VL-7B模型的静态量化版本,专注于图像描述生成任务,支持多种语言。
图像生成文本
Transformers 支持多种语言

Q
mradermacher
133
1
Olmocr 7B 0725 FP8
Apache-2.0
olmOCR-7B-0725-FP8是基于Qwen2.5-VL-7B-Instruct模型,使用olmOCR-mix-0225数据集微调后量化为FP8版本的文档OCR模型。
图像生成文本
Transformers 英语

O
allenai
881
3
Lucy 128k GGUF
Apache-2.0
Lucy-128k是基于Qwen3-1.7B开发的专注于代理式网络搜索和轻量级浏览的模型,在移动设备上也能高效运行。
大型语言模型
Transformers 英语

L
Mungert
263
2