InternVL3-8B 视频理解入门:让模型看懂视频内容的完整教程
InternVL3-8B 视频理解入门:让模型看懂视频内容的完整教程
【免费下载链接】InternVL3-8B 项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternVL3-8B
想让 AI 真正"看懂"一段视频,而不只是静态图片?这篇 InternVL3-8B 视频理解入门教程,将带你从零开始,用 OpenGVLab 开源的 InternVL3-8B 多模态大模型完成视频内容理解。InternVL3-8B 是一款先进的多模态大语言模型(MLLM),不仅能识别图片、回答图文问题,还支持视频多轮对话——它会自动抽取视频关键帧,理解动作、场景与语义,然后用自然语言回答你的提问。本文用最少的代码、最快的路径,帮你快速上手视频理解。
InternVL3-8B 是什么:能看懂视频的多模态大模型
InternVL3-8B 是 OpenGVLab 推出的 InternVL3 系列中的 8B 参数版本,采用经典的 "ViT-MLP-LLM" 架构:
- 视觉部分:InternViT-300M-448px-V2_5 视觉编码器,负责提取图像/视频帧特征
- 语言部分:Qwen2.5-7B 语言模型,负责组织回答
- 关键能力:支持单图、多图、视频输入,还引入了可变视觉位置编码(V2PE),长视频理解能力更强
相比只看单张图片,视频理解对模型的要求高得多:画面在动、动作在变、情节在推进。InternVL3-8B 的做法很聪明——它按时间均匀抽帧,把视频拆成一张张"关键帧"当作多图序列处理,从而让模型"看"懂完整视频内容。
视频理解的原理:如何把视频喂给模型
InternVL3-8B 的视频理解流程分三步:
- 抽帧:使用 decord 视频库读取视频,按时间轴均匀抽取 N 帧(官方示例默认 8 帧,最多可到 32 帧)
- 分块:对每一帧做动态分辨率切块(448×448 的 tile),并记录每帧对应的 patch 数量
- 拼接提问:把每帧以
Frame1: <image>\nFrame2: <image>...的形式拼进提示词,模型逐帧理解后生成回答
这一步的核心代码在项目根目录的 README.md 中,视频加载逻辑(load_video 与 get_index 函数)可直接复用。
第一步:准备环境和模型
快速安装依赖
只需要 transformers、torch、decord、Pillow、torchvision 这几个库:
pip install transformers>=4.37.2 torch decord Pillow torchvision
获取模型权重
模型权重已按 4 个分片存放在仓库中(model-00001-of-00004.safetensors 到 model-00004-of-00004.safetensors,共约 15.9GB),模型索引见 model.safetensors.index.json。如果你需要 clone 仓库,地址为 https://gitcode.com/hf_mirrors/OpenGVLab/InternVL3-8B。
第二步:加载 InternVL3-8B 模型
用 transformers 的 AutoModel 即可完成加载,官方推荐使用 bfloat16 精度并开启 Flash Attention:
import torch
from transformers import AutoModel, AutoTokenizer
path = "OpenGVLab/InternVL3-8B"
model = AutoModel.from_pretrained(
path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_flash_attn=True,
trust_remote_code=True,
device_map='cuda').eval()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)
💡 显存不够?可改用
load_in_8bit=True做 8bit 量化加载,能将显存需求降低一大截。
第三步:视频推理完整代码
仓库自带了示例视频 examples/red-panda.mp4,下面用最精简的代码让模型看懂这段小熊猫视频:
import numpy as np
import torch
from decord import VideoReader, cpu
from PIL import Image
def load_video(video_path, num_segments=8, input_size=448):
vr = VideoReader(video_path, ctx=cpu(0), num_threads=1)
max_frame, fps = len(vr) - 1, float(vr.get_avg_fps())
seg_size = max_frame / num_segments
frame_indices = np.array([int(seg_size * i + seg_size / 2) for i in range(num_segments)])
frames = [Image.fromarray(vr[i].asnumpy()).convert('RGB') for i in frame_indices]
# 缩放到模型输入尺寸
transform = T.Compose([T.Resize((input_size, input_size)), T.ToTensor()])
pixel_values = torch.stack([transform(f) for f in frames]).to(torch.bfloat16).cuda()
return pixel_values, [1] * num_segments
video_path = './examples/red-panda.mp4'
pixel_values, num_patches_list = load_video(video_path, num_segments=8)
video_prefix = ''.join([f'Frame{i+1}: <image>\n' for i in range(8)])
question = video_prefix + 'What is the red panda doing?'
response = model.chat(tokenizer, pixel_values, question,
dict(max_new_tokens=1024, do_sample=True),
num_patches_list=num_patches_list)
print(response)
运行后,模型会结合 8 个关键帧,回答小熊猫在做什么、处于什么环境,实现真正的视频内容理解。
第四步:视频多轮对话进阶技巧
看过一遍视频后,你还可以追问细节,让视频理解进入多轮模式。相关实现位于 modeling_internvl_chat.py 的 chat 方法中,只要传入 return_history=True 保留历史即可:
question = 'What is the red panda doing?'
response, history = model.chat(tokenizer, pixel_values, question, generation_config,
num_patches_list=num_patches_list, return_history=True)
question = 'Describe this video in detail.'
response, history = model.chat(tokenizer, pixel_values, question, generation_config,
num_patches_list=num_patches_list, history=history,
return_history=True)
第一轮让它概括动作,第二轮让它描述细节,模型会基于同一批帧持续深入理解。
视频理解调优:3 个实用技巧
- 抽帧数量
num_segments:默认 8 帧速度最快;视频更长、动作更复杂时建议提到 16~32 帧,理解更准但更耗显存 max_num控制分辨率:视频场景通常设 1,避免单帧切块过多导致显存爆掉- 长视频支持:得益于 V2PE 可变视觉位置编码,InternVL3 的长上下文理解能力比前代更强,适合处理较长的视频片段
常见问题速查
| 问题 | 解决方案 |
|---|---|
| 显存不足(OOM) | 改用 8bit 量化加载,或减少 num_segments |
| 加载报错 | 确保 transformers 版本 ≥ 4.37.2 |
| 视频打不开 | 安装 decord,并确认视频编码格式兼容 |
| 回答不准确 | 增加抽帧数、把问题写得更具体 |
总结
InternVL3-8B 让视频理解不再遥不可及——抽帧、拼接、问答,三步即可让模型看懂视频内容。从本文的示例出发,你可以继续尝试视频内容摘要、行为分析、视频问答等更多玩法,官方完整示例代码见仓库根目录的 README.md,动手试一试吧!🚀
【免费下载链接】InternVL3-8B 项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternVL3-8B
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐

所有评论(0)