开源视频分析大模型与Qwen3-VL
·
1. 前言
随着多模态大模型的快速发展,视频分析能力成为各大模型的重要竞争力。以下对当前主流的开源视频分析大模型进行简要梳理。
1.1 主流开源视频分析模型概述
| 模型名称 | 开发机构 | 参数规模 | 视频理解 | 开源协议 | 主要特点 |
|---|---|---|---|---|---|
| Qwen3-VL | 阿里云通义千问 | 2B/4B/8B/30B-A3B/32B/235B-A22B | ✅ | Apache 2.0 | 工业级最强多模态模型,支持256K上下文,视频理解能力突出 |
| GLM-4V-9B | 智谱AI | 9B | ✅ | GPL-3.0 | 清华系GLM系列的视觉版本,GUI Agent能力突出 |
| CogVLM/CogAgent | 清华THUDM | 17B/18B | ✅ (v2支持) | Apache 2.0 | 视觉专家模型,GUI Agent能力领先,支持1120×1120高分辨率 |
| LLaVA | LLaVA团队 | 7B/13B/34B/72B | ✅ (NeXT/Video) | Apache 2.0 | 最流行的开源VLM系列,社区生态丰富 |
| InternVL2 | 上海AI实验室 | 2B/8B/26B/40B/76B | ✅ | Apache 2.0 | 性价比高的多模态模型,76B版本性能接近GPT-4V |
| Yi-Video | 零一万物 | 34B | ✅ | 定制开源协议 | 专注视频理解,时序建模能力强 |
1.2 关键能力对比
| 能力维度 | Qwen3-VL | GLM-4V | CogVLM | LLaVA |
|---|---|---|---|---|
| 图像分辨率 | 自适应(最高无限分辨率) | 自适应 | 最高1120×1120 | 最高224×224 |
| 视频理解 | ✅ 长视频+秒级索引 | ✅ | ✅ (v2) | ✅ |
| OCR多语言 | 32种语言 | 中文为主 | 多语言 | 英语为主 |
| 空间理解 | ✅ 2D/3D定位 | ✅ | ✅ | ❌ |
| Agent能力 | ✅ GUI/手机控制 | ✅ GUI Agent | ✅ GUI Agent | ❌ |
| 数学推理 | ✅ 强化 | ✅ 强化 | 一般 | 一般 |
2. Qwen3-VL
2.1 模型简介
Qwen3-VL是通义千问团队研发的最新版视觉语言模型,是目前开源界最强的多模态模型之一。该系列采用Dense和MoE两种架构,从边缘设备到云端均可部署,并提供Instruct和Thinking两个版本。
2.2 核心能力
2.2.1 视觉能力
- 视觉Agent:可操作PC/手机GUI界面,识别元素、理解功能、调用工具、完成任务
- 视觉编码增强:可从图片/视频生成Draw.io/HTML/CSS/JS代码
- 高级空间感知:判断物体位置、视角、遮挡关系,支持2D和3D定位
- 长上下文与视频理解:原生支持256K上下文,可扩展至1M;支持书籍和长视频理解,支持秒级时间索引
2.2.2 视觉识别增强
- 更广泛的高质量预训练数据,能"识别一切":名人、动漫、商品、地标、动植物等
- 扩展OCR支持32种语言(从10种升级),在弱光、模糊、倾斜场景下鲁棒性强
- 对罕见/古文字和术语有更好的识别能力,长文档结构解析能力更强
2.2.3 文本理解
- 文本理解能力与纯LLM持平
- 文本-视觉无缝融合,实现无损统一理解
2.3 模型架构创新
- Interleaved-MRoPE:通过健壮的位置编码在时间、宽度、高度三个维度上实现全频率分配,增强长视界视频推理
- DeepStack:融合多级ViT特征,捕捉细粒度细节,增强图文对齐
- 文本-时间戳对齐:超越T-RoPE,实现精确的时间戳定位事件,增强视频时序建模
2.4 模型规格
| 型号 | 类型 | 参数规模 | 序列长度 | 下载链接 |
|---|---|---|---|---|
| Qwen3-VL-2B | Instruct/Thinking | 2B | 256K+ | HuggingFace |
| Qwen3-VL-4B | Instruct/Thinking | 4B | 256K+ | HuggingFace |
| Qwen3-VL-8B | Instruct/Thinking | 8B | 256K+ | HuggingFace |
| Qwen3-VL-30B-A3B | Instruct/Thinking | 30B(A3B激活) | 256K+ | HuggingFace |
| Qwen3-VL-32B | Instruct/Thinking | 32B | 256K+ | HuggingFace |
| Qwen3-VL-235B-A22B | Instruct/Thinking | 235B(A22B激活) | 256K+ | HuggingFace |
2.5 最小显存需求(Transformers推理)
| 精度 | 2B | 4B | 8B | 32B | 235B-A22B |
|---|---|---|---|---|---|
| FP32 | 0.23 GB | 0.46 GB | 0.92 GB | 133.11 GB | ~1.3 TB |
| BF16 | 0.12 GB | 0.23 GB | 0.46 GB | 66.5 GB | ~665 GB |
| INT8 | 0.06 GB | 0.12 GB | 0.23 GB | 33.28 GB | - |
| INT4 | 0.03 GB | 0.06 GB | 0.12 GB | 16.64 GB | - |
2.6 优势
- 视频理解能力最强:支持长视频理解,秒级时间索引,视频OCR能力强
- 多分辨率自适应:支持任意分辨率输入,无需固定尺寸
- 丰富的Cookbook:提供10+官方教程,涵盖识别、定位、文档解析、视频理解、Agent等
- API友好:支持阿里云API,一键调用
- 多模态编码:支持图片、视频、多模态混合输入
2.7 不足
- 大模型资源需求高:235B-A22B版本需要大量GPU资源
- 部分Cookbook还在更新中:并非所有能力都有完整教程
- 中文文档较少:主要文档为英文
3. GLM-4V / GLM-4.1V
3.1 模型简介
GLM-4V是智谱AI基于GLM-4系列开发的视觉语言模型。2025年7月,智谱发布了GLM-4.1V-9B-Thinking系列VLM,增强了推理能力。
3.2 核心能力
3.2.1 视觉理解
- 支持图像理解和多轮对话
- 支持文档、图表、数学公式的识别和理解
- 支持高分辨率图像输入
3.2.2 Agent能力
- GUI Agent:支持桌面操作自动化
- 搜索能力:支持联网搜索和信息检索
- 函数调用:支持工具调用和API交互
3.2.3 推理能力
- GLM-Z1系列强化数学推理
- 支持深度思考(Thinking)模式
- Rumination模式支持更长的推理链
3.3 模型规格
| 型号 | 类型 | 参数规模 | 序列长度 | 下载链接 |
|---|---|---|---|---|
| GLM-4-9B-0414 | Chat | 9B | 32K-128K | HuggingFace |
| GLM-4V-9B | Chat | 9B | 8K | HuggingFace |
| GLM-4.1V-9B-Thinking | Reasoning | 9B | 128K | HuggingFace |
| GLM-4-32B-0414 | Chat | 32B | 32K-128K | HuggingFace |
| GLM-Z1-32B-0414 | Reasoning | 32B | 128K | HuggingFace |
| GLM-Z1-Rumination-32B-0414 | Reasoning | 32B | 128K | HuggingFace |
3.4 优势
- 国内生态完善:智谱AI提供完整的国内部署方案
- GLM-4.1V-Thinking:新增推理增强版本,数学和逻辑推理能力显著提升
- 中文优化好:对中文文档、表格、公式的支持较好
- Agent能力强:GUI Agent功能成熟
3.5 不足
- 视频理解相对弱:相比Qwen3-VL,视频时序建模能力较弱
- 上下文长度有限:原生32K,需YaRN扩展
- 社区生态:相比Qwen和LLaVA,社区资源和预训练模型较少
4. CogVLM/CogAgent
4.1 模型简介
CogVLM是清华大学THUDM团队开发的视觉语言模型,后续进化出CogAgent(专注GUI Agent)。目前最新版本为CogVLM2,基于LLaMA-3-8B构建,在多数场景下性能媲美GPT-4V。
4.2 核心能力
4.2.1 CogVLM
- 17B参数(10B视觉+7B语言)
- 支持490×490分辨率图像理解
- 多轮对话
4.2.2 CogAgent
- 18B参数(11B视觉+7B语言)
- 支持1120×1120高分辨率
- GUI Agent能力,支持桌面操作
- 支持定位(Grounding)功能
4.3 优势
- GUI Agent领先:在AITW、Mind2Web等GUI数据集上表现优异
- 高分辨率支持:1120×1120输入,适合文档/图表分析
- 4-bit量化:仅需11GB显存即可推理
- 社区活跃:清华维护,文档完善
4.4 不足
- 参数规模较小:相比Qwen3-VL-235B,能力差距明显
- 视频支持有限:主要在图像理解上优化
- 中文生态:虽然模型支持中文,但主要社区在英文
5. 常见部署方案
5.1 vLLM部署方案
vLLM是目前最高效的LLM/VLM推理框架,支持PagedAttention、Continuous Batching等核心技术。
5.1.1 安装
pip install vllm
# 或使用conda
conda install -c conda-forge vllm
5.1.2 Qwen3-VL部署示例
from vllm import LLM, SamplingParams
from transformers import AutoProcessor
# 加载模型
llm = LLM(
model="Qwen/Qwen3-VL-8B-Instruct",
tensor_parallel_size=1, # 多GPU并行
max_model_len=4096,
dtype="bfloat16"
)
# 处理器
processor = AutoProcessor.from_pretrained("Qwen/Qwen3-VL-8B-Instruct")
# 采样参数
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.8,
max_tokens=512
)
# 构建消息
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": "https://example.com/image.jpg"},
{"type": "text", "text": "描述这张图片"}
]
}
]
# 推理
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt"
)
outputs = llm.generate(inputs)
for output in outputs:
print(output.outputs[0].text)
5.1.3 vLLM部署优化参数
llm = LLM(
model="Qwen/Qwen3-VL-8B-Instruct",
tensor_parallel_size=4, # 4卡并行
pipeline_parallel_size=1, # 流水线并行
max_num_seqs=256, # 最大序列数
gpu_memory_utilization=0.9, # GPU显存利用率
dtype="float16", # 使用FP16节省显存
quantization="awq", # 量化(可选)
max_model_len=8192, # 最大上下文长度
)
5.1.4 vLLM API服务
from vllm import AsyncEngineArgs, AsyncLLMEngine
engine_args = AsyncEngineArgs(
model="Qwen/Qwen3-VL-8B-Instruct",
tensor_parallel_size=1,
max_model_len=4096,
dtype="bfloat16"
)
llm = AsyncLLMEngine.from_engine_args(engine_args)
# 可通过OpenAI兼容接口访问
# curl http://localhost:8000/v1/chat/completions
5.2 其他部署方案
5.2.1 Transformers原生部署
from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained(
"Qwen/Qwen3-VL-8B-Instruct",
dtype="auto",
device_map="auto"
)
processor = AutoProcessor.from_pretrained("Qwen/Qwen3-VL-8B-Instruct")
5.2.2 Ollama部署
# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
# 拉取Qwen3-VL模型
ollama pull qwen3-vl:8b
# 运行
ollama run qwen3-vl:8b
5.2.3 阿里云API部署
import dashscope
from dashscope import MultiModalConversation
response = MultiModalConversation.call(
model="qwen-vl-max-latest",
messages=[
{
"role": "user",
"content": [
{"image": "https://example.com/image.jpg"},
{"text": "描述这张图片"}
]
}
]
)
print(response.output.choices[0].message.content)
5.3 部署方案对比
| 方案 | 易用性 | 性能 | 显存需求 | 适用场景 |
|---|---|---|---|---|
| vLLM | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 优化 | 生产环境 |
| Transformers | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 高 | 开发/测试 |
| Ollama | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 中等 | 本地快速体验 |
| 阿里云API | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 无需 | 快速集成 |
6. 客户端测试工具
以下是一个Python客户端测试工具,用于测试Qwen3-VL和GLM-4V等模型的图像理解能力:
6.1 安装依赖
pip install requests pillow transformers qwen-vl-utils
6.2 测试代码
"""
视频分析大模型客户端测试工具
支持Qwen3-VL、GLM-4V、阿里云API等多种模型
"""
import requests
import base64
from PIL import Image
from io import BytesIO
import time
import argparse
from typing import List, Dict, Optional
class VisionModelTester:
"""视觉模型测试器"""
def __init__(self, base_url: str = "http://localhost:8000", api_key: str = ""):
self.base_url = base_url
self.api_key = api_key
self.headers = {
"Content-Type": "application/json"
}
if api_key:
self.headers["Authorization"] = f"Bearer {api_key}"
def encode_image(self, image_path: str) -> str:
"""将图片编码为base64"""
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def test_qwen3_vl(self, image_path: str, prompt: str = "描述这张图片") -> Dict:
"""测试Qwen3-VL模型"""
image_b64 = self.encode_image(image_path)
payload = {
"model": "Qwen/Qwen3-VL-8B-Instruct",
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"image": f"data:image/jpeg;base64,{image_b64}"
},
{
"type": "text",
"text": prompt
}
]
}
],
"max_tokens": 512,
"temperature": 0.7
}
return self._send_request(payload)
def test_glm4_v(self, image_path: str, prompt: str = "描述这张图片") -> Dict:
"""测试GLM-4V模型"""
image_b64 = self.encode_image(image_path)
payload = {
"model": "THUDM/glm-4v-9b",
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"image": f"data:image/jpeg;base64,{image_b64}"
},
{
"type": "text",
"text": prompt
}
]
}
],
"max_tokens": 512,
"temperature": 0.7
}
return self._send_request(payload)
def test_alibaba_api(self, image_path: str, prompt: str = "描述这张图片") -> Dict:
"""测试阿里云API"""
image_b64 = self.encode_image(image_path)
payload = {
"model": "qwen-vl-max-latest",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": f"data:image/jpeg;base64,{image_b64}"
},
{
"text": prompt
}
]
}
]
},
"parameters": {
"max_tokens": 512,
"temperature": 0.7
}
}
return self._send_request(payload)
def _send_request(self, payload: Dict) -> Dict:
"""发送请求到模型服务"""
try:
start_time = time.time()
response = requests.post(
f"{self.base_url}/v1/chat/completions",
headers=self.headers,
json=payload,
timeout=60
)
elapsed = time.time() - start_time
if response.status_code == 200:
result = response.json()
return {
"success": True,
"response_time": f"{elapsed:.2f}s",
"content": result["choices"][0]["message"]["content"],
"usage": result.get("usage", {})
}
else:
return {
"success": False,
"error": response.text,
"status_code": response.status_code
}
except Exception as e:
return {
"success": False,
"error": str(e)
}
def benchmark(self, image_path: str, prompt: str = "描述这张图片", num_runs: int = 5) -> Dict:
"""基准测试"""
results = []
for i in range(num_runs):
result = self.test_qwen3_vl(image_path, prompt)
if result["success"]:
results.append(result)
if results:
times = [float(r["response_time"].replace("s", "")) for r in results]
return {
"num_runs": num_runs,
"successful_runs": len(results),
"avg_time": f"{sum(times)/len(times):.2f}s",
"min_time": f"{min(times):.2f}s",
"max_time": f"{max(times):.2f}s",
"sample_responses": [r["content"] for r in results[:3]]
}
return {"error": "All runs failed"}
def main():
parser = argparse.ArgumentParser(description="视觉模型测试工具")
parser.add_argument("--image", required=True, help="测试图片路径")
parser.add_argument("--prompt", default="描述这张图片", help="测试提示词")
parser.add_argument("--url", default="http://localhost:8000", help="API地址")
parser.add_argument("--model", choices=["qwen3-vl", "glm4-v", "alibaba"], default="qwen3-vl", help="模型类型")
parser.add_argument("--benchmark", type=int, default=0, help="基准测试次数")
parser.add_argument("--key", default="", help="API密钥")
args = parser.parse_args()
tester = VisionModelTester(args.url, args.key)
if args.benchmark > 0:
print(f"开始{args.benchmark}轮基准测试...")
result = tester.benchmark(args.image, args.prompt, args.benchmark)
print(f"测试结果: {result}")
else:
print(f"使用模型: {args.model}")
print(f"图片: {args.image}")
print(f"提示词: {args.prompt}")
print("-" * 50)
if args.model == "qwen3-vl":
result = tester.test_qwen3_vl(args.image, args.prompt)
elif args.model == "glm4-v":
result = tester.test_glm4_v(args.image, args.prompt)
else:
result = tester.test_alibaba_api(args.image, args.prompt)
if result["success"]:
print(f"响应时间: {result['response_time']}")
print(f"内容: {result['content']}")
else:
print(f"错误: {result.get('error', 'Unknown error')}")
if __name__ == "__main__":
main()
6.3 使用说明
# 基本测试
python test_vision_model.py --image test.jpg --prompt "描述这张图片"
# 指定模型
python test_vision_model.py --image test.jpg --model qwen3-vl
# 基准测试
python test_vision_model.py --image test.jpg --benchmark 5
# 使用自定义API地址
python test_vision_model.py --image test.jpg --url http://your-server:8000
# 阿里云API
python test_vision_model.py --image test.jpg --model alibaba --key YOUR_API_KEY
7. 结束语
7.1 模型选择建议
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 生产环境视频分析 | Qwen3-VL-235B/32B | 能力最强,社区支持好 |
| 边缘设备部署 | Qwen3-VL-2B/4B | 参数小,性能尚可 |
| GUI自动化 | CogAgent/GLM-4.1V | GUI Agent能力突出 |
| 中文场景 | GLM-4V | 中文优化好,国内生态完善 |
| 快速原型 | 阿里云API | 无需部署,开箱即用 |
| 学术研究 | Qwen3-VL/GLM-4V | 论文完善,开源协议友好 |
7.2 未来展望
- 更长视频理解:当前模型对长视频的理解仍然有限,未来将支持更长时序建模
- 更精细时空定位:从2D定位到3D定位,从秒级到帧级定位
- 多模态Agent:视频理解+行动决策的闭环
- 端侧部署:模型压缩和量化技术将使手机/平板等设备运行大模型
- 多语言OCR:支持更多语言和手写体
7.3 参考资料
更多推荐



所有评论(0)