ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

InternVL3-8B 视频理解入门:让模型看懂视频内容的完整教程

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 transformers4.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 Attentionimport torch from transformers import AutoModel, AutoTokenizer path OpenGVLab/InternVL3-8B model AutoModel.from_pretrained( path, torch_dtypetorch.bfloat16, low_cpu_mem_usageTrue, use_flash_attnTrue, trust_remote_codeTrue, device_mapcuda).eval() tokenizer AutoTokenizer.from_pretrained(path, trust_remote_codeTrue, use_fastFalse) 显存不够可改用load_in_8bitTrue做 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_segments8, input_size448): vr VideoReader(video_path, ctxcpu(0), num_threads1) 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_segments8) video_prefix .join([fFrame{i1}: 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_tokens1024, do_sampleTrue), num_patches_listnum_patches_list) print(response)运行后模型会结合 8 个关键帧回答小熊猫在做什么、处于什么环境实现真正的视频内容理解。第四步视频多轮对话进阶技巧看过一遍视频后你还可以追问细节让视频理解进入多轮模式。相关实现位于 modeling_internvl_chat.py 的chat方法中只要传入return_historyTrue保留历史即可question What is the red panda doing? response, history model.chat(tokenizer, pixel_values, question, generation_config, num_patches_listnum_patches_list, return_historyTrue) question Describe this video in detail. response, history model.chat(tokenizer, pixel_values, question, generation_config, num_patches_listnum_patches_list, historyhistory, return_historyTrue)第一轮让它概括动作第二轮让它描述细节模型会基于同一批帧持续深入理解。视频理解调优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辅助生成(AIGC),仅供参考
返回列表