使用Qwen3-VL模型批量标注视频内容(视频理解)

Qwen3-VL:视觉理解模型

本文记录如何利用Qwen3-VL对视频内容进行批量标注,即对文件夹中的视频进行打标。

目录

一、权重下载

二、模型加载

三、从文件夹路径或者从写入txt的路径中读取视频的绝对地址

四、批量推理并写入txt

五、完整代码


一、权重下载

下载地址:https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Instruct

该权重为30B的模型,推理需要单张A100(80G)或者两张A100(如果输出长文本);将权重下载保存到本地,加载模型时直接从本地路径加载;

二、模型加载

python 复制代码
from transformers import AutoModelForImageTextToText, AutoProcessor
import torch

def load_models():
    model = AutoModelForImageTextToText.from_pretrained(
        "your_local_model_pth/Qwen3-VL-30B-A3B-Instruct", dtype=torch.bfloat16, attn_implementation="flash_attention_2", device_map="auto"
    )
    processor = AutoProcessor.from_pretrained("your_local_model_pth/Qwen3-VL-30B-A3B-Instruct")
    
    return model, processor

三、从文件夹路径或者从写入txt的路径中读取视频的绝对地址

python 复制代码
def get_inference_videos(txt_path=None, video_dir=None, input_type="txt"):
    if txt_path is not None and input_type == "txt":
        with open(txt_path, "r") as f:
            datas = f.readlines()
            videos = [data.strip("\n") for data in datas] # absolute pth of video
    
    if video_dir is not None and input_type == "dir":
        video_names = os.listdir(video_dir)
        videos = [os.path.join(video_dir, video) for video in video_names]
        videos.sort()
    
    return videos

四、批量推理并写入txt

python 复制代码
    for video in tqdm(videos):
        messages = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "video",
                        "video": video,
                    },
                    {"type": "text", "text": "Describe the video and tell me what happened in the video?"},
                ],
            }
        ]

        try:
            inputs = processor.apply_chat_template(
                messages,
                tokenize=True,
                add_generation_prompt=True,
                return_dict=True,
                return_tensors="pt"
            )
            inputs = inputs.to(model.device)
            
            with torch.inference_mode():
                generated_ids = model.generate(**inputs, max_new_tokens=128)
                generated_ids_trimmed = [
                    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
                ]
                output_text = processor.batch_decode(
                    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
                )
            output_text = output_text[0].replace("\n", "")

            output_dir = "select_save_dir"
            os.makedirs(output_dir, exist_ok=True)
            with open(f"{output_dir}/dataset_captions.txt", "a") as f:
                f.writelines(f"{video}#####{output_text}\n")
        except:
            print(f"Error video: {video}")

可替换提问:Describe the video and tell me what happened in the video?

五、完整代码

python 复制代码
import os
import torch
from tqdm import tqdm

from transformers import AutoModelForImageTextToText, AutoProcessor

def load_models():
    model = AutoModelForImageTextToText.from_pretrained(
        "your_local_model_pth/Qwen3-VL-30B-A3B-Instruct", dtype=torch.bfloat16, attn_implementation="flash_attention_2", device_map="auto"
    )
    processor = AutoProcessor.from_pretrained("your_local_model_pth/Qwen3-VL-30B-A3B-Instruct")

    return model, processor

def get_inference_videos(txt_path=None, video_dir=None, input_type="txt"):
    if txt_path is not None and input_type == "txt":
        with open(txt_path, "r") as f:
            datas = f.readlines()
            videos = [data.strip("\n") for data in datas] # absolute pth of video
    
    if video_dir is not None and input_type == "dir":
        video_names = os.listdir(video_dir)
        videos = [os.path.join(video_dir, video) for video in video_names]
        videos.sort()
    
    return videos

if __name__=="__main__":
    model, processor = load_models()
    model.eval()
    
    video_dir = "your_local_video_saved_pth/video"
    videos = get_inference_videos(video_dir=video_dir, input_type="dir")

    for video in tqdm(videos):
        messages = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "video",
                        "video": video,
                    },
                    {"type": "text", "text": "Describe the video and tell me what happened in the video?"},
                ],
            }
        ]

        try:
            inputs = processor.apply_chat_template(
                messages,
                tokenize=True,
                add_generation_prompt=True,
                return_dict=True,
                return_tensors="pt"
            )
            inputs = inputs.to(model.device)
            
            with torch.inference_mode():
                generated_ids = model.generate(**inputs, max_new_tokens=128)
                generated_ids_trimmed = [
                    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
                ]
                output_text = processor.batch_decode(
                    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
                )
            output_text = output_text[0].replace("\n", "")

            output_dir = "select_save_dir"
            os.makedirs(output_dir, exist_ok=True)
            with open(f"{output_dir}/dataset_captions.txt", "a") as f:
                f.writelines(f"{video}#####{output_text}\n")
        except:
            print(f"Error video: {video}")
相关推荐
一点一木16 小时前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
淡海水17 小时前
【AI模型】常见问题与解决方案
人工智能·深度学习·机器学习
HIT_Weston17 小时前
65、【Agent】【OpenCode】用户对话提示词(费米估算)
人工智能·agent·opencode
njsgcs17 小时前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I18 小时前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
#卢松松#18 小时前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy101118 小时前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构
数字供应链安全产品选型18 小时前
关键领域清单+SBOM:834号令下软件供应链的“精准治理“逻辑与技术落地路径
人工智能·安全
Flying pigs~~18 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
zuozewei18 小时前
从线下到等保二级生产平台:一次公有云新型电力系统 AI 部署复盘
人工智能