【大模型应用开发】Qwen2.5-VL-3B识别视频

0. 编写代码并尝试运行

克隆以下代码

git clone https://gitee.com/ai-trailblazer/qwen-vl-hello.git

尝试运行qwen-vl-hello.py,报错原因缺少modelscope:

1. 安装qwen-vl-utils工具包

pip install qwen-vl-utils[decord]==0.0.8

尝试运行,不出意外的话肯定运行不了,报错原因依然是缺少modelscope:

2. 安装modelscope

 pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

再次尝试运行,依然无法运行,报错原因modelscope下未找到Qwen2_5_VLForConditionalGeneration:

3.安装transformers

pip install git+https://github.com/huggingface/transformers accelerate

经历10分钟的漫长等待,终于下载安装完成。再次尝试运行,依然运行失败,报错原因缺少torchvision模块:

4.安装torchvision

pip install torchvision

5.尝试进行视频识别(失败)

再次尝试运行,事情出现转机,开始下载模型,并进行漫长的等待(在等待过程中,顺手去清理一些爆红的C盘!)

经历九九八十一分钟后,发生了意外(我没有碰它呀)

再次尝试运行,执行失败,报错原因是TypeError: process_vision_info() got an unexpected keyword argument 'return_video_kwargs':

下面先进行图片识别,排查一下是否是环境问题。

6. 尝试图片识别(成功)

先运行图片识别的代码(qwen-vl-img-hello.py)吧,没想到又发生更大意外惊喜,wsl系统连不上了!

Reload Window后,重新连接了

再次运行,图片识别成功。

图片识别成功,初步假设运行环境已经没有问题了,下面再次尝试视频识别。

7.尝试进行视频识别(失败)

依然是第5节的执行失败原因:

检查代码问题。先删除当前不必要的代码

然后脑袋总算是要清醒一点了,即这一行代码就是设置一个意料之外的参数return_video_kwargs。

image_inputs, video_inputs, video_kwargs = process_vision_info(messages, return_video_kwargs=True)
inputs = processor(text=[text],images=image_inputs,videos=video_inputs,fps=fps,padding=True,return_tensors="pt",**video_kwargs,
)
inputs = inputs.to("cuda")

继续思考解决方案:后面又要使用到这个video_kwargs,如果不配置它会不会无法返回这个参数......,管它呢,先删除return_video_kwargs=True,反正电脑又不会炸掉!(继续Run Python,并战术性的喝了一口水)。

 嗯哼,报错了:Error reading?难道是视频链接失效了,复制到浏览器查看没问题呀,视频链接是有效的。

https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4

下面将继续排查,瞅一眼qwen-vl-utils的版本为0.0.8,没错儿呀,是文档里的版本咧。

看看源码,这个函数返回了None,但是这个函数的源码又看不到!暂且不继续了看源码了,换个方向再试试。

继续排查,尝试识别本地视频。(再喝一口水缓解一下压力)

messages = [{"role": "user","content": [{"type": "video","video": "file:///mnt/e/WORK/project/ai/qwen-vl-hello/demo.mp4",},{"type": "text", "text": "Describe this video."},],}
]

wsl又无法连接了!

再次连接后,再次尝试运行,虽然报错了,但是至少视频是能读取了,报错只是说明video_kwargs这个不能用了。

修改代码再次尝试运行,wsl又断连接了

直接在命令行执行

运行失败,报错原因fps未定义(这官方教程存在问题哦,艾特一下qwen官方)。修改代码,删除fps=fps。修改后再次运行

image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt"
)
inputs = inputs.to("cuda")

显存溢出!我不服,再次尝试还是显存溢出,我服了。

继续尝试量化模型Qwen/Qwen2.5-VL-3B-Instruct-AWQ

# 第一处修改
model = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct-AWQ", torch_dtype="auto", device_map="auto"
)# 第二处修改
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct-AWQ")

继续运行,开始下载模型,然后继续漫长的等待(顺便打开音乐播放器,放一首DJ串烧缓解一下情绪)

经过九九八十一天的等待后,模型下载完了,但是紧接着又报了一个错,报错意思是`autoawq`的版本太低。

先不急,再运行一次看看,报错依然如此。通过pip list|grep autoawq发现并没有安装autoawq,那就尝试用pip安装一个autoawq

pip install autoawq

继续尝试运行,显存溢出!

但是,细心的我发现这样一行输出,于是我虚心的请教了Deepseek

Unused or unrecognized kwargs: return_tensors, fps.

修改代码

image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=[text],images=image_inputs,videos=video_inputs,fps=30,padding=True,return_tensors="pt"
)
inputs = inputs.to("cuda")

仍然报错显存溢出!但是这个输出内容有点奇怪,区别如下(虚心的我又去查了一下这个单词的意思unrecognized-无法识别的,也就是说:这两个参数没有意义加和不加都一样!):

# 不添加fps参数
Unused or unrecognized kwargs: return_tensors, fps.# 添加fps=30后
Unused or unrecognized kwargs: fps, return_tensors.

有进行了多次尝试,添加PYTORCH_CUDA_ALLOC_CONF环境变量、指定torch_dtype,都以显存溢出为结局

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torchimport os
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"# default: Load the model on the available device(s)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct-AWQ", torch_dtype=torch.float16, device_map="auto"
)

于是,我不得不承认本地的GPU显存确实有限,下面我改变策略,在云服务进行尝试。

8.借用云服务器进行视频识别(失败)

在魔塔选择赠送的GPU服务器使用时长,点击启动并稍等2分钟左右

克隆代码仓库

https://gitee.com/ai-trailblazer/qwen-vl-hello.git

代码拉取完成后,继续查看conda版本和显存。

发现没有conda,那就先在常规python环境尝试。

pip install qwen-vl-utils[decord]==0.0.8
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install git+https://github.com/huggingface/transformers accelerate

安装transformers报错了,暂且不管,先运行代码

python qwen-vl-video-hello.py

第一行运行报错,找不到Qwen2_5_VLForConditionalGeneration

此时回忆一下在本地的经验,安装transformers可是花费了十分钟之久,并且下载了很多内容,但是此时马上下载完毕并且还报错了,仔细分析错误原因,发现是很多python三方库版本不兼容的问题。所以后面还是启动一个conda环境吧

【AI训练环境搭建】在Windows11上搭建WSL2+Ubuntu22.04+Tensorflow+GPU机器学习训练环境

创建新的conda环境,名称为vlenv

conda create -n vlenv python=3.12

安装依赖

pip install qwen-vl-utils[decord]==0.0.8
pip install modelscope
pip install git+https://github.com/huggingface/transformers accelerate

安装transformers报错了

重新创建一个3.11 python版本的conda环境,名称为t1

conda create -n t1 python=3.11

尝试安装

pip install qwen-vl-utils[decord]==0.0.8
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install git+https://github.com/huggingface/transformers accelerate

这次看起来能正常安装了

安装完成

尝试运行,报出熟悉的异常

安装torchvision

pip install torchvision

再次尝试运行

python qwen-vl-video-hello.py

依然报显存溢出(这可是20多个G的显存哦)

(本次实践从本地到云服务,共花费7个多小时光阴,虽然目前没有运行成功,但是至少在这过程中实践了很多经验,后续我将尝试找一个比较小的视频再次验证。)

9.使用一个较小的视频进行识别(成功)

在以上实践中,使用的是一个21M的视频,视频时长约三分钟。而后我又拿了一个只有291KB的视频,视频时长只有1s。

功夫不负有心人,终于成功识别了一个视频!尽管这个视频只有1s,可以看到GPU也占用了9G(该显卡总共只有12G)。

10. 总结和展望

在本次实践中,主要采用transformers拉起Qwen2.5-VL-3B大模型进行视频识别,尽管这并不是工程化的运行方式,但是有作为入门实践的价值。

在整个过程中,总结出以下经验:

(1)鉴于网络原因,最好使用modelscope来下载模型;

(2)在vscode中使用wsl的conda环境,可能会出现无响应的情况,此时直接使用cmd命令行可能更加方便;

(3)当一条路走不通时,可以换一条路,如果换一条路还是走不通,这时在回头看方法是否有问题,很多时候就是在你回头思考的过程中解决掉问题的,但是你还是得感谢你在另一条路上探索,因为你至少知道了那条路行不通,否则你的思维陷入到不确定中;

(4)云服务器的网络和硬件优势可以加速我们进行AI方面的实践,本次实践中在云服务器上花费的实践仅仅只占总时长的30%,但是产生的效果却很显著,在这里也非常感谢modelscope社区和阿X云为我们提供的免费实例环境,非常感谢;

(5)conda是个好东西,其提供的强大的隔离式python环境,在解决各种依赖库版本库问题的时候非常有用,本次实践中,在云服务器最终使用的是python3.11版本,而我本地电脑是使用的python3.12,这些经验在工程成产过程中也很有价值;

后续的实际计划和展望:
(1)达到这个目标“Qwen2.5-VL 可以理解超过1小时的视频”,所需要的条件和方式有哪些?

(2)考虑更加工程化和轻量化的通过Qwen2.5-VL进行视频识别的方案;

(3)其它模型或方案进行视频识别的使用资源和效果对比;
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 窗口函数深度解析:语法、应用场景与性能优化

一、窗口函数核心概念 ​​本质​​:对一组与当前行相关联的行执行计算,​​不改变原表行数​​ ​​与聚合函数的区别​​: SELECT department, AVG(salary) -- 普通聚合:每个部门一行 FROM employees GROUP BY department;SE…

新版Chrome浏览器加载eDrawings 3D Viewer控件网页查看DWG、DXF

eDrawings是一款由达索系统(DASSAULT SYSTMES)开发的免费跨平台CAD看图工具,专注于3D模型和2D工程图的查看、协作与共享。其核心功能包括多格式支持、动态模型展示、跨平台适配及轻量化操作体验,适用于工程设计、教育培训等领域。…

阿姆斯特朗数

阿姆斯特朗数也就是俗称的水仙花数,是指一个n位数,其各位数字的n次方之和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。请问100-10000所有水仙花数有哪些。 采用穷举法对范围之间的…

vmvare 虚拟机内存不足

centos 扩展物理卷df -hT / sudo du -hx --max-depth1 / | sort -rh | head -n 20 // 查看前20个的大文件 # 清理旧日志(保留最近7天) sudo find /var/log -type f -mtime 7 -delete sudo journalctl --vacuum-time7d # 清理yum缓存 sudo yum clean …

C++?继承!!!

一、引言 代码的复用对于代码的质量以及程序员的代码设计上都是非常重要的,C中的许多特性都体现了这一点,从函数复用、模板的引入到今天我们将一起学习的:继承 二、什么是继承? 1、继承的概念 继承(inheritance)机制是面向对象程…

Android设置界面层级为最上层实现

Android设置界面层级为最上层实现 文章目录 Android设置界面层级为最上层实现一、前言二、Android设置界面层级为最上层实现1、主要代码2、后遗症 三、其他1、Android设置界面层级为最上层小结2、悬浮框的主要代码悬浮框 注意事项(1)权限限制&#xff08…

Linux 了解篇

一、GNU 项目与 GPL 许可 (一)GNU 项目 GNU :GNU 是一个递归缩写,代表 "GNUs Not Unix"。GNU 项目旨在开发一个完全自由的操作系统,该操作系统基于 Unix 的设计理念但不包含 Unix 的代码。GNU 项目提供了大…

word 如何让公式居中,公式编号右对齐

问题: 如何让输入的公式居中,公式编号右对齐? 解决方法: 方法一:使用制表符 1、输入内容:先按一次“Tab”键(制表符),然后键入公式,然后再按一次“Tab”键…

华为OD机试真题——最小循环子数组 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

OpenCv高阶(十七)——dlib库安装、dlib人脸检测

文章目录 前言一、dlib库简介二、dlib库安装1、本地安装(离线)2、线上安装 三、dlib人脸检测原理1、HOG 特征提取2、 SVM 分类器训练3、 滑动窗口搜索4、非极大值抑制(NMS) 四、dlib人脸检测代码1、导入OpenCV计算机视觉库和dlib机…

AD-PCB--AD20软件安装及中英文切换 DAY 2

1.软件安装 1.1 软件包下载 给你一个捷径: 1.2 安装过程(安装过的人跳过就好,一般很多都支持懒人安装) 双击其中的exe文件 点击下一步 选择中文 接受用户协议 下面这个弹窗有的没有。 建议勾选导入导出 安装目录&#xff0c…

单向循环链表与双向链表

单向循环链表的原理与应用 思考:对于单向链表而言,想要遍历链表,则必须从链表的首结点开始进行遍历,请问有没有更简单的方案实现链表中的数据的增删改查? 回答:是有的,可以使用单向循环的链表进…

Windows鼠标掉帧测试与修复

前言 这两天突然发现鼠标似乎有掉帧,但是掉的又不太明显,用着感觉似乎快速移动的时候会有一瞬间卡一下,但是眼睛又看不清楚,不太确定是不是自己的心理作用,非常难受。 如何判断鼠标是否掉帧 根据我的经验&#xff0…

U 盘数据恢复全攻略

目录 💾 U盘数据误删怎么办?两款实用工具助你找回丢失文件!1️⃣ Recover My Files:数据恢复的得力助手📌 主要特点🛠 使用步骤详解1. 下载与安装2. 启动软件并选择恢复类型3. 选择U盘所在分区4. 选择文件恢…

HarmonyOS NEXT~鸿蒙系统运维:全面解析与最佳实践

HarmonyOS NEXT~鸿蒙系统运维:全面解析与最佳实践 摘要 本文深入探讨鸿蒙(HarmonyOS)系统的运维管理,从架构特点到日常维护操作,全面分析这一全场景分布式操作系统的运维要点。文章将介绍鸿蒙系统特有的分布式能力运维管理、性能…

基于 STM32 的智慧农业温室控制系统设计与实现

摘要 本文提出一种基于 STM32 微控制器的智慧农业温室控制系统设计方案,通过集成多类型环境传感器、执行机构及无线通信模块,实现对温室内温湿度、光照、土壤湿度等参数的实时监测与自动调控。文中详细阐述硬件选型、电路连接及软件实现流程,并附关键代码示例,为智慧农业领…

Appium+python自动化(五)- 模拟器

简介 Appium是做安卓自动化的一个比较流行的工具,对于想要学习该工具但是又局限于没 android 手机来说,可以通过安卓模拟器来解决该问题,下面就讲解使用appium连接安卓模拟器的操作步骤。而是由于手机数据线问题,也只好先用模拟器…

汽车充电桩专用ASCP210系列电气防火限流式保护器

1.概述汽车充电桩专用电气防火限流式保护器 电气防火限流式保护器可有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大,以及使用寿命短等弊端,发生短路故障时,能以微秒级速度快速限制短…

Linux中磁盘分区与挂载

一、磁盘划分 1.1 了解磁盘 硬盘的接口类型 接口类型发展方向应用场景IDESATA I/II/III个人PC机SCSISAS服务器上 磁盘命名规则 OSIDE(并口)SATA(串口)SCSIRHEL5/dev/hda/dev/sda/dev/sdaRHEL6/dev/sda/dev/sda/dev/sdaRHEL7/dev/sda/dev/sda/dev/sda 1.2 磁盘划分 磁盘划…

【数据分析】什么是特征蒸馏?

引言 —— “ 在数据洪流中提炼真金——解密特征蒸馏的艺术。” 在数据爆炸的时代,我们每天产生的信息量已远超人类处理能力的极限。当企业拥有百万维的用户行为数据,医疗研究者面对TB级的基因测序记录,工程师试图从千万张图像中识别关键模式…