采用慢-快架构的视频多模态大语言模型,平衡时间分辨率和空间细节,支持64帧视频理解
下载量 184
发布时间 : 3/19/2025
模型介绍
内容详情
替代品
模型简介
该模型创新性地采用慢-快双token策略处理视频输入,结合Qwen2-7B语言模型和ConvNeXt-576视觉编码器,在有限计算预算下实现高效的视频理解
模型特点
慢-快双token策略
通过快token快速浏览视频内容,慢token精细提取视觉细节,实现高效视频理解
高帧率处理
支持64帧视频输入,时间分辨率显著优于传统方法
线性复杂度交叉注意力
特制混合解码层实现文本对原始视频特征的线性复杂度交叉注意力
模型能力
视频内容理解
视频内容描述生成
多模态推理
长视频处理
使用案例
视频内容分析
视频内容描述
对输入视频生成详细的内容描述
在视频理解基准测试中优于纯自注意力基线
智能监控
监控视频分析
分析监控视频中的关键事件
# 视频多模态大语言模型的慢-快架构(Qwen2-7B,64帧)
本仓库包含论文《视频多模态大语言模型的慢-快架构》中提出的**慢-快视频MLLM模型(Qwen2-7B, ConvNeXt-576, 64帧, 步长1/4)**。
[代码仓库](https://github.com/SHI-Labs/Slow-Fast-Video-Multimodal-LLM) | [HuggingFace合集](https://huggingface.co/collections/shi-labs/slow-fast-video-mllm-67ef347a28772734c15a78b5)
## 模型描述
该模型创新性地采用慢-快架构,解决了有限计算预算下视频多模态大语言模型(MLLMs)在时间分辨率和空间细节之间的平衡难题。现有方法常通过不可逆压缩丢失视频细节。
受人类先快速浏览视频再聚焦关键片段的行为启发,慢-快设计采用双token策略:
1. **"快"视觉token**:压缩后的紧凑视频特征集合,与文本嵌入共同输入LLM(Qwen2-7B-Instruct)实现快速概览
2. **"慢"视觉token**:通过特制混合解码层实现文本嵌入对原始视频特征的交叉注意力,以线性复杂度完成指令感知的视觉细节提取
该架构支持处理更多输入帧(如本检查点的64帧)同时保留空间细节,在视频理解基准测试中显著优于纯自注意力基线。本检查点采用Qwen2-7B-Instruct基座LLM和ConvNeXt-576视觉塔。
<div align="center">
<img src="https://huggingface.co/shi-labs/slowfast-video-mllm-qwen2-7b-convnext-576-frame64-s1t4/resolve/main/assets/images/fig-teaser.png" width="45%">
</div>
## 使用说明
**注意**:本模型依赖集成在`transformers`库中的自定义代码(`LlavaQwenSlowFastForCausalLM`)。请确保从[官方仓库](https://github.com/SHI-Labs/Slow-Fast-Video-Multimodal-LLM)安装必要依赖,或加载模型时设置`trust_remote_code=True`。
本地运行时请先克隆仓库并安装依赖:
```bash
git clone https://github.com/SHI-Labs/Slow-Fast-Video-Multimodal-LLM.git
cd Slow-Fast-Video-Multimodal-LLM
pip install --upgrade pip
pip install -r requirements.txt
# 将仓库路径添加至PYTHONPATH或直接安装
随后使用以下Python脚本:
import torch
import os
import numpy as np
from decord import VideoReader, cpu
import requests # 用于下载视频
# 确保可导入llava模块
# 若未从仓库安装,trust_remote_code=True会自动处理
from llava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN
from llava.conversation import conv_templates
from llava.model.builder import load_pretrained_model
from llava.mm_utils import tokenizer_image_token, get_model_name_from_path
from llava.utils import disable_torch_init
def load_video(video_path, max_frames_num):
"""视频帧加载辅助函数"""
vr = VideoReader(video_path, num_threads=4)
total_frames = len(vr)
# 确保稀疏采样不会导致帧数不足
if total_frames >= max_frames_num:
# 均匀采样视频帧
uniform_sampled_frames = np.linspace(0, total_frames - 1, max_frames_num, dtype=int)
frame_idx = uniform_sampled_frames.tolist()
else:
# 视频较短时采样所有帧并重复最后一帧
frame_idx = list(range(total_frames))
frame_idx.extend([total_frames - 1] * (max_frames_num - total_frames))
try:
spare_frames = vr.get_batch(frame_idx).asnumpy()
except Exception as e:
print(f"加载视频帧错误: {e}")
# 错误处理:返回None或抛出异常
raise e
return spare_frames
# 模型配置
model_path = "shi-labs/slowfast-video-mllm-qwen2-7b-convnext-576-frame64-s1t4"
video_url = "https://huggingface.co/shi-labs/slowfast-video-mllm-qwen2-7b-convnext-576-frame64-s1t4/resolve/main/assets/catinterrupt.mp4"
video_local_path = "catinterrupt.mp4"
question = "请详细描述这个视频内容。"
max_frames = 64 # 本检查点训练使用64帧
# 下载示例视频
if not os.path.exists(video_local_path):
print(f"从{video_url}下载视频...")
response = requests.get(video_url, stream=True)
response.raise_for_status()
with open(video_local_path, "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print("下载完成")
# 加载模型和处理器
disable_torch_init()
model_name = get_model_name_from_path(model_path)
# 使用trust_remote_code加载自定义架构
tokenizer, model, image_processor, context_len = load_pretrained_model(
model_path,
None,
model_name,
use_flash_attn=True, # 启用Flash Attention
device_map="auto", # 自动分配GPU/CPU
torch_dtype=torch.bfloat16, # 使用bfloat16提升效率
trust_remote_code=True
)
# 构建提示词
if model.config.mm_use_im_start_end:
prompt = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + "\n" + question
else:
prompt = DEFAULT_IMAGE_TOKEN + "\n" + question
conv = conv_templates["qwen_1_5"].copy() # 使用适配的对话模板
conv.append_message(conv.roles[0], prompt)
conv.append_message(conv.roles[1], None)
prompt_final = conv.get_prompt()
# 加载处理视频帧
print("加载视频中...")
video_frames = load_video(video_local_path, max_frames_num=max_frames)
print(f"视频加载完成,形状: {video_frames.shape}")
# 预处理视频帧
print("视频预处理中...")
video_tensor = image_processor.preprocess(video_frames, return_tensors="pt")["pixel_values"]
video_tensor = video_tensor.to(model.device, dtype=torch.bfloat16)
videos = [video_tensor] # 模型需要视频张量列表
print(f"视频张量处理完成,形状: {videos[0].shape}")
# 分词处理提示词
input_ids = tokenizer_image_token(prompt_final, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt')
input_ids = input_ids.to(device=model.device, non_blocking=True)
if input_ids.ndim == 1:
input_ids = input_ids.unsqueeze(0)
print(f"输入ID处理完成,形状: {input_ids.shape}")
# 生成响应
print("生成响应中...")
with torch.inference_mode():
output_ids = model.generate(
input_ids,
images=videos, # 传入处理后的视频张量列表
do_sample=True,
temperature=0.2,
top_p=1.0,
num_beams=1,
max_new_tokens=1024,
use_cache=True
)
# 解码输出
outputs = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(f"\n用户输入: {question}\n")
print(f"模型输出:\n{outputs}")
许可协议
模型权重遵循CC-BY-NC-4.0许可。 代码部分采用Apache 2.0许可。 使用者须遵守包括基座语言模型(Qwen2许可)在内的所有原始许可条款。
引用
若使用本工作,请引用论文:
@misc{zhou2025slowfast,
title={Slow-Fast Architecture for Video Multi-Modal Large Language Models},
author={Yifei Zhou and Jiaming Zuo and Chen Change Loy and Chongyang Zhong and Xin Wang and Qi Wu and Weidong Cai and Xiaodong He and Qingzhong Wang and Lei Zhang and Marcelo H. Ang Jr and Boyang Li and Yanfeng Wang and Qinghai He and Fengbei Liu and Liangchen Luo and Jingdong Wang and Conghui He and Wenhai Wang},
year={2025},
eprint={2504.01328},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
(注:作者列表基于arXiv论文可能更新版本,请以最终发表版本为准)
Llava Video 7B Qwen2
Apache-2.0
LLaVA-视频模型是基于Qwen2语言模型的7B参数多模态模型,专注于视频理解任务,支持64帧视频输入。
视频生成文本
Transformers

英语
L
lmms-lab
34.28k
91
Llava NeXT Video 7B DPO Hf
LLaVA-NeXT-Video是一个开源多模态聊天机器人,通过视频和图像数据混合训练优化,具备优秀的视频理解能力。
视频生成文本
Transformers

英语
L
llava-hf
12.61k
9
Internvideo2 5 Chat 8B
Apache-2.0
InternVideo2.5是一款基于长且丰富上下文(LRC)建模增强的视频多模态大语言模型,构建于InternVL2.5之上,通过提升感知细粒度细节和捕捉长时序结构的能力,显著改进了现有MLLM模型。
视频生成文本
Transformers

英语
I
OpenGVLab
8,265
60
Cogvlm2 Llama3 Caption
其他
CogVLM2-Caption是一个视频描述生成模型,用于为CogVideoX模型生成训练数据。
视频生成文本
Transformers

英语
C
THUDM
7,493
95
Spacetimegpt
时空GPT是一个能够进行空间和时间推理的视频描述生成模型,能够分析视频帧并生成描述视频事件的句子。
视频生成文本
Transformers

英语
S
Neleac
2,877
33
Video R1 7B
Apache-2.0
Video-R1-7B是基于Qwen2.5-VL-7B-Instruct优化的多模态大语言模型,专注于视频推理任务,能够理解视频内容并回答相关问题。
视频生成文本
Transformers

英语
V
Video-R1
2,129
9
Internvl 2 5 HiCo R16
Apache-2.0
InternVideo2.5 是一个基于 InternVL2.5 构建的视频多模态大语言模型(MLLM),通过长且丰富的上下文(LRC)建模进行了增强,能够感知细粒度细节并捕捉长时态结构。
视频生成文本
Transformers

英语
I
OpenGVLab
1,914
3
Videollm Online 8b V1plus
MIT
VideoLLM-online是一个基于Llama-3-8B-Instruct的多模态大语言模型,专注于在线视频理解和视频-文本生成任务。
视频生成文本
Safetensors
英语
V
chenjoya
1,688
23
Videochat R1 7B
Apache-2.0
VideoChat-R1_7B 是一个基于 Qwen2.5-VL-7B-Instruct 的多模态视频理解模型,能够处理视频和文本输入,生成文本输出。
视频生成文本
Transformers

英语
V
OpenGVLab
1,686
7
Qwen2.5 Vl 7b Cam Motion Preview
其他
基于Qwen2.5-VL-7B-Instruct微调的摄像机运动分析模型,专注于视频中的摄像机运动分类和视频-文本检索任务
视频生成文本
Transformers

Q
chancharikm
1,456
10
精选推荐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应用开发。
简体中文