Qwen 2.5 VL 多種推理方案

Qwen 2.5 VL 多種推理方案

flyfish

單圖推理

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torchmodel_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map="auto",
)processor = AutoProcessor.from_pretrained(model_path)messages = [{"role": "user","content": [{"type": "image","image": "output_frames/frame_0000.jpg",},{"type": "text", "text": "描述圖像"},],}
]text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
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")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
)
print(output_text)

多圖推理

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch# 默認:加載模型到可用設備上
# model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
#     "Qwen/Qwen2.5-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
# )# 指定本地模型路徑
model_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"
# 推薦啟用 flash_attention_2 以獲得更好的加速和內存節省,特別是在多圖像和視頻場景中。
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map="auto",
)# 默認處理器
processor = AutoProcessor.from_pretrained(model_path)# 模型中每個圖像的視覺標記數量范圍默認為 4-16384。
# 根據需要設置 min_pixels 和 max_pixels,例如令牌范圍為 256-1280,以平衡性能和成本。
# min_pixels = 256*28*28
# max_pixels = 1280*28*28
# processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)# 包含多個圖像和文本查詢的消息
messages = [{"role": "user","content": [{"type": "image", "image": "output_frames/frame_0000.jpg"},{"type": "image", "image": "output_frames/frame_0001.jpg"},{"type": "text", "text": "找出這些圖片之間的相似之處。"},],}
]# 準備推理
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
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")# 推理
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
)
print(output_text)

視頻推理1

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torchmodel_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map="auto",
)processor = AutoProcessor.from_pretrained(model_path)messages = [{"role": "user","content": [{"type": "video","video": ["output_frames/frame_0000.jpg","output_frames/frame_0001.jpg","output_frames/frame_0002.jpg","output_frames/frame_0003.jpg",],},{"type": "text", "text": "描述這個視頻。"},],}
]text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
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")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
)
print(output_text)

視頻推理2

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torchmodel_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map="auto",
)processor = AutoProcessor.from_pretrained(model_path)# messages = [
#     {
#         "role": "user",
#         "content": [
#             {
#                 "type": "video",
#                 "video": "test.mp4",
#             },
#             {"type": "text", "text": "描述這個視頻。"},
#         ],
#     }
# ]messages = [{"role": "user","content": [{"type": "video","video": "test.mp4","max_pixels": 360 * 420,"fps": 1.0,},{"type": "text", "text": "描述這個視頻。"},],}
]text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
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")generated_ids = model.generate(**inputs, max_new_tokens=8192)
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
)
print(output_text)

批量推理

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torchmodel_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map="auto",
)processor = AutoProcessor.from_pretrained(model_path)processor.tokenizer.padding_side = 'left'
# Sample messages for batch inference
messages1 = [{"role": "user","content": [{"type": "image", "image": "output_frames/frame_0000.jpg"},{"type": "image", "image": "output_frames/frame_0001.jpg"},{"type": "text", "text": "這些圖片中有哪些共同的元素?"},],}
]
messages2 = [{"role": "system", "content": "你是一個能提供幫助的助手。"},{"role": "user", "content": "你是誰?"},
]
# Combine messages for batch processing
messages = [messages1, messages2]# Preparation for batch inference
texts = [processor.apply_chat_template(msg, tokenize=False, add_generation_prompt=True)for msg in messages
]
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(text=texts,images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",
)
inputs = inputs.to("cuda")# Batch Inference
generated_ids = model.generate(**inputs, max_new_tokens=8192)
generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_texts = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_texts)

72B

from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch#model_path = "/media/model/Qwen/Qwen25-VL-7B-Instruct/"model_path = "/media//Qwen/Qwen25-VL-72B-Instruct-AWQ/"# #7B
# model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
#     model_path,
#     torch_dtype=torch.bfloat16,
#     attn_implementation="flash_attention_2",
#     device_map="auto",
# )
# 72B
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=torch.float16,attn_implementation="flash_attention_2",device_map="cuda",
)
model.config.use_cache = True
model = torch.compile(model,mode="max-autotune",fullgraph=True,dynamic=False)
processor = AutoProcessor.from_pretrained(model_path)# 加載提示信息
def load_prompts():# 打開并讀取文本文件的內容with open('prompt.txt', 'r', encoding='utf-8') as file:lines = file.readlines()# 將多行內容合并為單行prompt = ''.join(lines).replace('\n', ' ').strip()return prompt, messages = [{"role": "user","content": [{"type": "video","video": ["output_frames/frame_0001.jpg","output_frames/frame_0000.jpg","output_frames/frame_0002.jpg","output_frames/frame_0003.jpg",],},{"type": "text", "text": load_prompts()},],}
]text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True
)
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")generated_ids = model.generate(**inputs, max_new_tokens=8192)
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
)
print(output_text)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76872.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器視覺檢測Pin針歪斜應用

在現代電子制造業中,Pin針(插針)是連接器、芯片插座、PCB板等元器件的關鍵部件。如果Pin針歪斜,可能導致接觸不良、短路,甚至整機失效。傳統的人工檢測不僅效率低,還容易疲勞漏檢。 MasterAlign 機器視覺對…

經典算法問題解析:兩數之和與三數之和的Java實現

文章目錄 1. 問題背景2. 兩數之和(Two Sum)2.1 問題描述2.2 哈希表解法代碼實現關鍵點解析復雜度對比 3. 三數之和(3Sum)3.1 問題描述3.2 排序雙指針解法代碼實現關鍵點解析復雜度分析 4. 對比總結5. 常見問題解答6. 擴展練習 1. …

1022 Digital Library

1022 Digital Library 分數 30 全屏瀏覽 切換布局 作者 CHEN, Yue 單位 浙江大學 A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an u…

地理人工智能中位置編碼的綜述:方法與應用

以下是對論文 《A Review of Location Encoding for GeoAI: Methods and Applications》 的大綱和摘要整理: A Review of Location Encoding for GeoAI: Methods and Applications 摘要(Summary) 本文系統綜述了地理人工智能(G…

(C語言)算法復習總結2——分治算法

1. 分治算法的定義 分治算法(Divide and Conquer)是一種重要的算法設計策略。 “分治” 從字面意義上理解,就是 “分而治之”。 它將一個復雜的問題分解成若干個規模較小、相互獨立且與原問題形式相同的子問題,然后遞歸地解決這…

愛普生FC1610AN5G手機中替代傳統晶振的理想之選

在 5G 技術引領的通信新時代,手機性能面臨前所未有的挑戰與機遇。從高速數據傳輸到多任務高效處理,從長時間續航到緊湊輕薄設計,每一項提升都離不開內部精密組件的協同優化。晶振,作為為手機各系統提供穩定時鐘信號的關鍵元件&…

Android 接口定義語言 (AIDL)

目錄 1. 本地進程調用(同一進程內)2. 遠程進程調用(跨進程)3 `oneway` 關鍵字用于修改遠程調用的行為Android 接口定義語言 (AIDL) 與其他 IDL 類似: 你可以利用它定義客戶端與服務均認可的編程接口,以便二者使用進程間通信 (IPC) 進行相互通信。 在 Android 上,一個進…

關于QT5項目只生成一個CmakeLists.txt文件

編譯器自動檢測明明可以檢測,Kit也沒有報紅 但是最后生成項目只有一個文件 一:檢查cmake版本,我4.1版本cmake一直報錯 cmake3.10可以用 解決之后還是有問題 把環境變量加上去:

uniapp小程序位置授權彈框與隱私協議耦合(合而為一)(只在真機上有用,模擬器會分開彈 )

注意: 只在真機上有用,模擬器會分開彈 效果圖: 模擬器效果圖(授權框跟隱私政策會分開彈,先彈隱私政策,同意再彈授權彈框): manifest-template.json配置( "__usePr…

[Godot] C#人物移動抖動解決方案

在寫一個2D平臺跳躍的游戲代碼發現,移動的時候會抖動卡頓的厲害,后來研究了一下抖動問題,有了幾種解決方案 1.垂直同步和物理插值問題 這是最常見的可能導致畫面撕裂和抖動的原因,大家可以根據自己的需要調整項目設置&#xff0…

紅帽Linux網頁訪問問題

配置網絡,手動配置 搭建yum倉庫紅帽Linux網頁訪問問題 下載httpd 網頁訪問問題:首先看httpd的狀態---selinux的工作模式(強制)---上下文類型(semanage-fcontext)---selinux端口有沒有放行semanage port ---防火墻有沒有active---…

Android12編譯x86模擬器報找不到userdata-qemu.img

qemu-system-x86_64: Could not open out/target/product/generic_x86_64/userdata-qemu.img: No such file or directory 選擇編譯aosp_x86-eng時沒有生成模擬器,報 qemu-system-x86_64: Could not open out/target/product/generic_x86_64/userdata-qemu.img: No…

【AI論文】PixelFlow:基于流的像素空間生成模型

摘要:我們提出PixelFlow,這是一系列直接在原始像素空間中運行的圖像生成模型,與主流的潛在空間模型形成對比。這種方法通過消除對預訓練變分自編碼器(VAE)的需求,并使整個模型能夠端到端訓練,從…

AI大模型學習九:?Sealos cloud+k8s云操作系統私有化一鍵安裝腳本部署完美教程(單節點)

一、說明 ?Sealos?是一款基于Kubernetes(K8s)的云操作系統發行版,它將K8s以及常見的分布式應用如Docker、Dashboard、Ingress等進行了集成和封裝,使得用戶可以在不深入了解復雜的K8s底層原理的情況下,快速搭建起一個…

【HDFS入門】HDFS核心組件DataNode詳解:角色職責、存儲機制與健康管理

目錄 1 DataNode的角色定位 2 DataNode的核心職責 2.1 數據塊管理 2.2 與NameNode的協作 3 DataNode的存儲機制 3.1 數據存儲目錄結構 3.2 數據塊文件組織 4 DataNode的工作流程 4.1 數據寫入流程 4.2 數據讀取流程 5 DataNode的健康管理 5.1 心跳機制(…

BufferedOutputStream 終極解析與記憶指南

BufferedOutputStream 終極解析與記憶指南 一、核心本質 BufferedOutputStream 是 Java 提供的緩沖字節輸出流,繼承自 FilterOutputStream,通過內存緩沖區顯著提升 I/O 性能。 核心特性速查表 特性說明繼承鏈OutputStream → FilterOutputStream → …

光纖模塊全解:深入了解XFP、SFP、QSFP28等類型

隨著信息技術的快速發展,數據中心和網絡的帶寬需求不斷提高,光纖模塊的選擇與應用顯得尤為重要。光纖模塊是實現高速網絡連接的重要組件,選擇合適的模塊能夠顯著提升傳輸性能、降低延遲。本文將深入解析幾種常見的光纖模塊類型,包…

【高階數據結構】第三彈---圖的存儲與遍歷詳解:鄰接表構建與鄰接矩陣的BFS/DFS實現

?個人主頁: 熬夜學編程的小林 💗系列專欄: 【C語言詳解】 【數據結構詳解】【C詳解】【Linux系統編程】【高階數據結構】 目錄 1、圖的存儲結構 1.1、鄰接表 1.1.1、邊的結構 1.1.2、圖的基本結構 1.1.3、圖的創建 1.1.4、獲取頂點下…

OpenCV的詳細介紹與安裝(一)

1.OpenCV概述 OpenCV是一個開源的計算機視覺和機器學習軟件庫, 它輕量級而且高效——由一系列 C 函數和少量 C 類構成,它支持多種編程語言(如C、Python、Java),并可在Windows、Linux、macOS、Android和iOS等平臺上運行…

STM32F103_HAL庫+寄存器學習筆記15 - 梳理CAN發送失敗時,涉及哪些寄存器

導言 《STM32F103_LL庫寄存器學習筆記14 - CAN發送完成中斷》上一章節完成CAN發送完成中斷,在梳理二級發送緩存之前,先梳理怎樣監控CAN發送失敗。 如上所示: 當我關掉CAN分析儀的CAN通道1,CAN錯誤狀態寄存器CAN_ESR的TEC&#x…