VideoChat-Flash:上海AI Lab开源高效处理超长视频的多模态大模型

240 阅读3分钟

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 高效处理长视频:通过分层压缩技术(HiCo),显著减少计算量,支持长达数小时的视频输入。
  2. 多阶段学习方案:从短视频到长视频的多阶段学习,提升模型对长上下文的理解能力。
  3. 强大性能表现:在多个长视频和短视频基准测试中表现优异,推理速度比前代模型快5-10倍。

正文(附运行示例)

VideoChat-Flash 是什么

VideoChat-Flash

VideoChat-Flash 是由上海人工智能实验室和南京大学等机构联合开发的多模态大语言模型(MLLM),专注于长视频建模。该模型通过分层压缩技术(HiCo)高效处理长视频,显著减少计算量,同时保留关键信息。

VideoChat-Flash 采用多阶段从短到长的学习方案,结合真实世界长视频数据集 LongVid,进一步提升对长视频的理解能力。该模型在多个长视频和短视频基准测试中均表现出色,超越了其他开源 MLLM 模型。

VideoChat-Flash 的主要功能

  • 长视频理解能力:通过分层压缩技术(HiCo)有效处理长视频,能处理长达数小时的视频内容。
  • 高效模型架构:每个视频帧编码为仅 16 个 token,推理速度比前代模型快 5-10 倍。
  • 多跳上下文理解:支持多跳 NIAH 任务,能追踪长视频中的多个关联图像序列,提升复杂上下文的理解能力。

VideoChat-Flash 的技术原理

  • 分层压缩技术(HiCo):高效处理长视频中的冗余视觉信息,分为片段级压缩和视频级压缩。
  • 多阶段学习方案:从短视频到长视频的多阶段学习,逐步提升模型对长上下文的理解能力。
  • 真实世界长视频数据集 LongVid:包含 30 万小时的真实世界长视频和 2 亿字的注释,为模型提供丰富的训练素材。

如何运行 VideoChat-Flash

1. 安装依赖

首先,确保已安装 Python 3.8 及以上版本,并安装必要的依赖库:

pip install transformers==4.40.1
pip install timm
pip install av
pip install imageio
pip install decord
pip install opencv-python
pip install flash-attn --no-build-isolation
2. 加载和运行模型

使用 HuggingFace 加载 VideoChat-Flash 模型并运行推理任务:

from transformers import AutoModel, AutoTokenizer

# 模型设置
model_path = 'OpenGVLab/VideoChat-Flash-Qwen2_5-2B_res448'

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
image_processor = model.get_vision_tower().image_processor

# 是否使用全局压缩
mm_llm_compress = False
if mm_llm_compress:
    model.config.mm_llm_compress = True
    model.config.llm_compress_type = "uniform0_attention"
    model.config.llm_compress_layer_list = [4, 18]
    model.config.llm_image_token_ratio_list = [1, 0.75, 0.25]

# 推理设置
max_num_frames = 512
generation_config = dict(
    do_sample=False,
    temperature=0.0,
    max_new_tokens=1024,
    top_p=0.1,
    num_beams=1
)

# 视频路径
video_path = "your_video.mp4"

# 单轮对话
question1 = "Describe this video in detail."
output1, chat_history = model.chat(video_path=video_path, tokenizer=tokenizer, user_prompt=question1, return_history=True, max_num_frames=max_num_frames, generation_config=generation_config)

print(output1)

# 多轮对话
question2 = "How many people appear in the video?"
output2, chat_history = model.chat(video_path=video_path, tokenizer=tokenizer, user_prompt=question2, chat_history=chat_history, return_history=True, max_num_frames=max_num_frames, generation_config=generation_config)

print(output2)

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦