【大模型】視覺語言模型:Qwen2.5-VL的使用

官方github地址:https://github.com/QwenLM/Qwen2.5-VL

目錄

Qwen家族的最新成員:Qwen2.5-VL

主要增強功能

模型架構更新

快速開始

使用Transformers聊天

Docker



Qwen家族的最新成員:Qwen2.5-VL

主要增強功能

強大的文檔解析功能:將文本識別升級為全文檔解析,擅長處理多場景、多語言和各種內置(手寫、表格、圖表、化學式和樂譜)文檔。

跨格式精確的對象基礎:解鎖在檢測,指向和計數對象方面的提高準確性,為高級空間推理提供絕對坐標和JSON格式。

超長視頻理解和細粒度視頻基礎:將原生動態分辨率擴展到時間維度,增強對持續數小時的視頻的理解能力,同時在數秒內提取事件片段。

增強的計算機和移動設備代理功能:利用先進的推理和決策能力,通過智能手機和計算機上的高級代理功能來增強模型。

模型架構更新

視頻理解的動態分辨率和幀率訓練

通過采用動態FPS采樣將動態分辨率擴展到時間維度,使模型能夠在不同采樣率下理解視頻。因此,在時間維度上使用id和絕對時間對齊來更新mRoPE,使模型能夠學習時間序列和速度,最終獲得精確定位特定時刻的能力。

流線型和高效的視覺編碼器

通過在ViT中戰略性地實施窗口注意力來提高訓練和推理速度。利用SwiGLU和RMSNorm對ViT架構進行進一步優化,使其與Qwen2.5 LLM的結構保持一致。

快速開始

下面,將提供簡單的示例來展示如何將Qwen2.5-VL與ModelScope和Transformers一起使用。

Qwen2.5-VL的代碼已經在最新的?Hugging face?transformers中,建議使用命令從源代碼構建:

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

安裝依賴

pip install qwen-vl-util

使用Transformers聊天

這里展示了一個代碼片段,展示如何使用聊天模型與transformers和qwen_vl_utils:

from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info# default: Load the model on the available device(s)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
)# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.
# model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
#     "Qwen/Qwen2.5-VL-7B-Instruct",
#     torch_dtype=torch.bfloat16,
#     attn_implementation="flash_attention_2",
#     device_map="auto",
# )# default processor
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct")# The default range for the number of visual tokens per image in the model is 4-16384.
# You can set min_pixels and max_pixels according to your needs, such as a token range of 256-1280, to balance performance and cost.
# 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": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",},{"type": "text", "text": "Describe this image."},],}
]# Preparation for inference
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(model.device)# Inference: Generation of the output
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)

多圖片推理

# Messages containing multiple images and a text query
messages = [{"role": "user","content": [{"type": "image", "image": "file:///path/to/image1.jpg"},{"type": "image", "image": "file:///path/to/image2.jpg"},{"type": "text", "text": "Identify the similarities between these images."},],}
]# Preparation for inference
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")# Inference
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)

更多使用提示

對于輸入圖像,支持本地文件、base64和url。對于視頻,目前只支持本地文件。

# You can directly insert a local file path, a URL, or a base64-encoded image into the position where you want in the text.
## Local file path
messages = [{"role": "user","content": [{"type": "image", "image": "file:///path/to/your/image.jpg"},{"type": "text", "text": "Describe this image."},],}
]
## Image URL
messages = [{"role": "user","content": [{"type": "image", "image": "http://path/to/your/image.jpg"},{"type": "text", "text": "Describe this image."},],}
]
## Base64 encoded image
messages = [{"role": "user","content": [{"type": "image", "image": "data:image;base64,/9j/..."},{"type": "text", "text": "Describe this image."},],}
]

提高性能的圖像解決方法

該模型支持廣泛的分辨率輸入。默認情況下,它使用本機分辨率作為輸入,但是更高的分辨率可以以更多的計算為代價來提高性能。用戶可以設置最小和最大像素數,以實現滿足其需求的最佳配置,例如token計數范圍為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
)

此外,提供了兩種方法對輸入到模型的圖像大小進行細粒度控制:

1.指定確切的尺寸:直接設置resized_height和resized_width。這些值將四舍五入到最接近28的倍數。

2.定義min_pixels和max_pixels:圖像將被調整大小,以保持其寬高比在min_pixels和max_pixels的范圍內。

# resized_height and resized_width
messages = [{"role": "user","content": [{"type": "image","image": "file:///path/to/your/image.jpg","resized_height": 280,"resized_width": 420,},{"type": "text", "text": "Describe this image."},],}
]
# min_pixels and max_pixels
messages = [{"role": "user","content": [{"type": "image","image": "file:///path/to/your/image.jpg","min_pixels": 50176,"max_pixels": 50176,},{"type": "text", "text": "Describe this image."},],}
]

為多個圖像輸入添加id

默認情況下,對話中直接包含圖像和視頻內容。在處理多個圖像時,為圖像和視頻添加標簽有助于更好地參考。用戶可以通過以下設置控制此行為:

1.添加視覺id

Flash-Attention 2加速生成

首先,確保安裝最新版本的Flash Attention 2

pip install -U flash-attn --no-build-isolation

此外,應該有一個與Flash-Attention 2兼容的硬件。在flash attention repository的官方文檔中信息。FlashAttention-2只能在模型加載到torch.float16?或者?torch.bfloat16

要使用Flash Attention-2加載和運行模型,只需在加載模型時添加attn_implementation="flash_attention_2",如下所示:

from transformers import Qwen2_5_VLForConditionalGenerationmodel = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2",
)

處理長文本

當前配置config.json設置的上下文長度最多為32,768個token。為了處理超過32,768個token的大量輸入,使用?YaRN,這是一種增強模型長度外推的技術,確保在長文本上的最佳性能。

對于支持的框架,可以在config.json中添加以下內容來啟用YaRN:

{...,"type": "yarn","mrope_section": [16,24,24],"factor": 4,"original_max_position_embeddings": 32768
}

然而,需要注意的是,這種方法對時間和空間定位任務的性能有很大的影響,因此不建議使用。

同時,對于長視頻輸入,由于MRoPE本身使用id更經濟,因此可以直接將max_position_embeddings修改為更大的值,例如64k。

Docker

為了簡化部署過程,提供了帶有預構建環境的docker:qwenllm/qwenvl。只需要安裝驅動程序并下載模型文件來啟動演示。

docker run --gpus all --ipc=host --network=host --rm --name qwen2.5 -it qwenllm/qwenvl:2.5-cu121 bash

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

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

相關文章

HDMI接口設計

1. HDMI簡介 HDMI(High Definition Multimedia Interface)高清多媒體接口,是首個支持在單線纜上傳輸,不經過壓縮的全數字高清晰度、多聲道音頻和智能格式與控制命令數據的數字接口。這個接口可以同時傳輸視頻信號、音頻信號和控制信號。 從上圖里面可以看到HDMI有3組數據信號…

C/C++ JSON 庫綜合對比及應用案例(六)

第六部分:C/C JSON 庫綜合對比及應用案例 📢 快速掌握 JSON!文章 視頻雙管齊下 🚀 如果你覺得閱讀文章太慢,或者更喜歡 邊看邊學 的方式,不妨直接觀看我錄制的 JSON 課程視頻!🎬 …

LXC 導入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)

前提要求 ubuntu下安裝lxd 參考Rockylinux下安裝lxd 參考LXC 源替換參考LXC 容器端口發布參考LXC webui 管理<

Spring MVC 頁面跳轉方案與區別

SpringMVC 的頁面跳轉方案主要分為 ?轉發&#xff08;Forward&#xff09;? 和 ?重定向&#xff08;Redirect&#xff09;? 兩類&#xff0c;具體實現方式和區別如下&#xff1a; 一、頁面跳轉方案 1. ?轉發&#xff08;Forward&#xff09;? 默認方式?&#xff1a;直…

基于Spring Boot的輕型卡車零部件銷售平臺的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

高性能計算面經

高性能計算面經 C八股文真景一面涼經自我介紹&#xff0c;介紹一下你做過的加速的模塊(疊噪&#xff0c;噪聲跟原圖有什么關系&#xff1f;)OpenGL和OpenCL有什么區別&#xff1f;**1. 核心用途****2. 編程模型****3. 硬件抽象****4. API設計****5. 典型應用場景****6. 互操作性…

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析 一、函數與微積分1. 函數與初等函數2. 導數與優化 二、概率與統計1. 概率基礎2. 統計推斷3. 隨機變量與分布 三、幾何與代數1. 向量與矩陣運算2. 復數與坐標變換 四、數學建模與算法思維1. 數學建模2. 算法邏輯…

11亂碼問題的解釋(2)

這個字符串使用哪種方式編碼的?---看包含在哪個文件中 和當前 mylabel.cpp 文件的編碼方式是一致的~~ 如果這里顯示的是 UTF-8&#xff0c;說明這個文件就是UTF-8 編碼 如果顯示的是 ANSI,說明這個文件就是 GBK 編碼~ Qt Creator 內置的終端是 utf8 的方式來顯示字符串嗎?? …

我的機器學習學習之路

學習python的初衷 ? hi&#xff0c;今天給朋友們分享一下我是怎么從0基礎開始學習機器學習的。 ? 我是2023年9月開始下定決心要學python的&#xff0c;目的有兩個&#xff0c;一是為了提升自己的技能和價值&#xff0c;二是將所學的知識應用到工作中去&#xff0c;提升工作…

27--當路由器學會“防狼術“:華為設備管理面安全深度解剖(完整戰備版)

當路由器學會"防狼術"&#xff1a;華為設備管理面安全深度解剖&#xff08;完整戰備版&#xff09; 引言&#xff1a;網絡世界的"門神"進化論 “從前有個路由器&#xff0c;它把所有數據包都當好人&#xff0c;直到有一天…” ——《悲慘世界網絡版》 如果…

Docker容器網絡相關設置

確認容器是否正確啟動 首先&#xff0c;確保 MySQL 容器正在運行。可以使用 docker ps 查看當前正在運行的容器。如果 MySQL 容器沒有啟動&#xff0c;可以嘗試以下命令啟動它&#xff1a; docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORDrootpassword mysql:8 這…

hive相關面試題以及答案

什么是Hive&#xff1f;它的作用是什么&#xff1f; 答&#xff1a;Hive是一個建立在Hadoop之上的數據倉庫工具&#xff0c;它提供了類似于SQL的查詢語言HiveQL來操作存儲在Hadoop中的數據。Hive的主要作用是讓用戶能夠使用SQL語法來查詢和分析大規模數據集。 Hive的架構是什么…

前端學習記錄之HTML

1. 網頁 1.1 什么是網頁 網站是指在因特網上根據一定的規則&#xff0c;使用HTML等制作的用于展示特定內容相關的網頁集合。 網頁是網站中的一“頁”&#xff0c;通常是HTML格式的文件&#xff0c;它要通過瀏覽器來閱讀 網頁是構成網站的基本元素。它通常由圖片&#xff0c;…

【1-1】ICT=IT+CT

前言 從這篇文章開始&#xff0c;我將總結軟考網工相關的筆記和自己的所思所想。我所總結內容均來自互聯網&#xff0c;歡迎大家交流、學習、討論。 1. ICT ICT IT CT 這里&#xff0c;這三個縮寫的對應英文如下&#xff1a; 縮寫英文含義ICTInformation and Communicat…

多賬號安全登錄與瀏覽器指紋管理的實現方案

隨著跨境電商、社交媒體運營等場景的普及&#xff0c;用戶對多賬號管理與反檢測技術的需求日益增長。指紋瀏覽器作為一款專注于多賬號安全登錄與瀏覽器指紋管理的工具&#xff0c;通過虛擬瀏覽器環境隔離、動態指紋模擬等技術&#xff0c;解決了賬號關聯封禁的痛點。本文將從技…

CMake Presets教程

在使用 CMake 作為構建工具的時候, 對于一個稍微大一點的項目, 存在有很多的選項. 比如 Debug 版本還是 Release 版本, 是否開啟特定選項, 是否開啟測試等等. 這些通常是作為命令行參數傳遞進去的. 但是很多程序員并不在命令行中作開發, 更多的是使用 IDE 來進行開發. 不同的 I…

vue搭建一個樹形菜單項目

首先搭建項目需要先通過步驟搭建一個vue的項目&#xff0c;然后創建一個component文件&#xff0c;里面新建一個index.vue頁面來。 這是引入的element-ui組件庫里的組件&#xff0c;來實現我的路由&#xff0c;渲染的是我存儲的動態路由&#xff0c;所以需要先安裝并且引用。 …

【Python 算法】動態規劃

本博客筆記內容來源于靈神&#xff0c;視頻鏈接如下&#xff1a;https://www.bilibili.com/video/BV16Y411v7Y6?vd_source7414087e971fef9431117e44d8ba61a7&spm_id_from333.788.player.switch 01背包 計算了f[i1]&#xff0c;f[i]就沒用了&#xff0c;相當于每時每刻只有…

c#的反射和特性

在 C# 中&#xff0c;反射&#xff08;Reflection&#xff09;和特性&#xff08;Attributes&#xff09;是兩個強大的功能&#xff0c;它們在運行時提供元編程能力&#xff0c;廣泛用于框架開發、對象映射和動態行為擴展。以下是對它們的詳細介紹&#xff0c;包括定義、用法、…

云終端的作用,此刻在校園和醫院里具象化

數字化轉型已經成為各行各業交流的熱點話題&#xff0c;校園和醫院這兩個重要領域正經歷著深刻變革。云終端&#xff0c;正以實際應用成果展現其獨特作用&#xff0c;讓人們切實感受到它帶來的高效與便利。 傳統的教學中&#xff0c;學校機房的電腦設備更新換代成本高&#xf…