【大模型應用開發】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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82488.shtml
英文地址,請注明出處:http://en.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級的基因測序記錄,工程師試圖從千萬張圖像中識別關鍵模式…