VideoLLM-online:用于流媒体视频的在线视频大语言模型
简介
首个流媒体视频大语言模型,可在长视频(10分钟)上实现高速处理(NVIDIA 3090 GPU上510 FPS,A100 GPU上1015 FPS),在线/离线设置下性能最佳。
介绍
这是VideoLLM-online:用于流媒体视频的在线视频大语言模型(CVPR 2024)的官方实现。与流行的图像/视频/多模态模型相比,我们的论文引入了几个有趣的特点:
-
在线视频流处理:与之前仅支持离线模式(查询/响应完整视频)的模型不同,我们的模型支持视频流内的在线交互。它可以在流媒体过程中主动更新响应,例如实时记录活动变化或帮助下一步操作。即使是音频驱动的GPT-4o,也需要用户与视觉场景进行语音交互,而非真正的视频流处理。
-
廉价且可扩展的流媒体数据合成:当前用于训练多模态大语言模型的视频数据集大多是离线的,不适合训练在线视频语言模型。我们的方法通过提示开源大语言模型,将任何离线标注转换为流媒体对话数据。该模型完全基于Llama合成数据进行训练。
-
并行实时推理:我们的推理方法并行化视频编码、视频帧的大语言模型前向传播和大语言模型响应生成,并以异步方式安排它们。这显著提高了实时性能,在A100 GPU上达到10-15 FPS。
快速开始
- (推荐)本地启动gradio演示:
python -m demo.app --resume_from_checkpoint chenjoya/videollm-online-8b-v1plus
如果flash-attn出现问题,请尝试:
python -m demo.app --resume_from_checkpoint chenjoya/videollm-online-8b-v1plus --attn_implementation sdpa
- (推荐)本地启动CLI:
python -m demo.cli --resume_from_checkpoint chenjoya/videollm-online-8b-v1plus
通过传递 --resume_from_checkpoint chenjoya/videollm-online-8b-v1plus
,PEFT检查点将自动下载并应用于 meta-llama/Meta-Llama-3-8B-Instruct
。
安装
确保已安装Miniconda和Python版本 >= 3.10,然后运行:
conda install -y pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install transformers accelerate deepspeed peft editdistance Levenshtein tensorboard gradio moviepy submitit
pip install flash-attn --no-build-isolation
PyTorch源会安装ffmpeg,但那是一个旧版本,通常会导致预处理质量很低。请按以下步骤安装最新的ffmpeg:
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xvf ffmpeg-release-amd64-static.tar.xz
rm ffmpeg-release-amd64-static.tar.xz
mv ffmpeg-7.0.1-amd64-static ffmpeg
如果你想在实时流媒体中尝试我们的模型并使用音频,请也克隆ChatTTS。
pip install omegaconf vocos vector_quantize_pytorch cython
git clone git+https://github.com/2noise/ChatTTS
mv ChatTTS demo/rendering/
训练和评估
-
分布式预处理视频帧:2 FPS和384分辨率,然后使用
google/siglip-large-patch16-384
提取CLS并与平均池化的3x3空间标记结合。请参考 data/preprocess/ 下的说明。 -
参考 scripts/ 下的示例
-
如果你对我们的流媒体对话数据生成感兴趣,请查看 data/livechat/
模型库
VideoLLM-online-8B-v1+
- 大语言模型:meta-llama/Meta-Llama-3-8B-Instruct
- 视觉策略:
- 帧编码器:google/siglip-large-patch16-384
- 帧标记:CLS标记 + 3x3平均池化空间标记
- 帧率:训练时2 FPS,推理时2~10 FPS
- 帧分辨率:最大分辨率384,保持纵横比的零填充
- 视频长度:10分钟
- 训练数据:Ego4D 叙述流 113K + Ego4D 目标步骤流 21K
VideoLLM-online-8B-v1
- 大语言模型:meta-llama/Meta-Llama-3-8B-Instruct
- 视觉策略:
- 帧编码器:google/siglip-large-patch16-384
- 帧标记:CLS标记
- 帧率:训练时2 FPS,推理时2~10 FPS
- 帧分辨率:最大分辨率384,保持纵横比的零填充
- 视频长度:60分钟
- 训练数据:Ego4D 叙述流 113K + Ego4D 目标步骤流 21K
超越Llama的VideoLLM-online
本代码库实现简单清晰。你只需将继承类从Llama更改为Mistral,即可实现Mistral版本的VideoLLM-online。请参考 models/live_llama 中的示例。
引用
@inproceedings{videollm-online,
author = {Joya Chen and Zhaoyang Lv and Shiwei Wu and Kevin Qinghong Lin and Chenan Song and Difei Gao and Jia-Wei Liu and Ziteng Gao and Dongxing Mao and Mike Zheng Shou},
title = {VideoLLM-online: Online Video Large Language Model for Streaming Video},
booktitle = {CVPR},
year = {2024},
}