經過一年的不懈努力,今天我們很高興發布Qwen2-VL ! Qwen2-VL 是 Qwen 模型系列中視覺語言模型的最新版本。
SoTA 理解各種解析度和比例的圖像:Qwen2-VL 在視覺理解基準上實現了最先進的性能,包括 MathVista、DocVQA、RealWorldQA、MTVQA 等。
理解20分鐘以上的影片:借助線上串流功能,Qwen2-VL可以透過基於高品質影片的問答、對話、內容創作等來理解20分鐘以上的影片。
可以操作手機、機器人等的智慧型體:Qwen2-VL具有複雜的推理和決策能力,可以與手機、機器人等設備集成,基於視覺環境和文字指令進行自動操作。
多語言支援:為了服務全球用戶,除了英語和中文之外,Qwen2-VL現在支援圖像內不同語言文字的理解,包括大多數歐洲語言、日語、韓語、阿拉伯語、越南語等。
樸素動態分辨率:與以前不同,Qwen2-VL可以處理任意影像分辨率,將它們映射到動態數量的視覺標記中,提供更接近人類的視覺處理體驗。
多模態旋轉位置嵌入(M-ROPE) :將位置嵌入分解為多個部分,以捕獲1D文字、2D視覺和3D視訊位置訊息,增強其多模態處理能力。
我們開源了Qwen2-VL模型,包括Apache 2.0許可下的Qwen2-VL-2B和Qwen2-VL-7B,以及Qwen許可下的Qwen2-VL-72B。這些模型現已與 Hugging Face Transformers、vLLM 和其他第三方框架整合。我們希望您喜歡使用它們!
2024.09.19:指令調整的 Qwen2-VL-72B 模型及其量化版本 [AWQ、GPTQ-Int4、GPTQ-Int8] 現已推出。我們也同步發布了Qwen2-VL論文。
2024年8月30日:我們發布了Qwen2-VL系列。 2B 和 7B 型號現已上市,開源的 72B 型號即將推出。欲了解更多詳情,請查看我們的部落格!
基準 | 以前的 SoTA (開源 LVLM) | 克勞德-3.5 十四行詩 | GPT-4o | Qwen2-VL-72B (?? | Qwen2-VL-7B (??) | Qwen2-VL-2B (??) |
---|---|---|---|---|---|---|
MMMU值 | 58.3 | 68.3 | 69.1 | 64.5 | 54.1 | 41.1 |
MMMU-專業版 | 46.9 | 51.5 | 51.9 | 46.2 | 43.5 | 37.6 |
DocVQA測試 | 94.1 | 95.2 | 92.8 | 96.5 | 94.5 | 90.1 |
資訊VQA測試 | 82.0 | - | - | 84.5 | 76.5 | 65.5 |
圖表QA測試 | 88.4 | 90.8 | 85.7 | 88.3 | 83.0 | 73.5 |
文字VQA值 | 84.4 | - | - | 85.5 | 84.3 | 79.7 |
OCRBench | 第852章 | 第788章 | 第736章 | 第877章 | 第845章 | 第794章 |
MTV品質保證 | 17.3 | 25.7 | 27.8 | 30.9 | 25.6 | 18.1 |
VCR簡單 | 84.67 | 63.85 | 91.55 | 91.93 | 89.70 | 81.45 |
VCR zh 簡單 | 22.09 | 1.0 | 14.87 | 65.37 | 59.94 | 46.16 |
真實世界品質保證 | 72.2 | 60.1 | 75.4 | 77.8 | 70.1 | 62.9 |
MME總和 | 2414.7 | 1920.0 | 2328.7 | 2482.7 | 2326.8 | 1872.0 |
MMBench-EN測試 | 86.5 | 79.7 | 83.4 | 86.5 | 83.0 | 74.9 |
MMBench-CN測試 | 86.3 | 80.7 | 82.1 | 86.6 | 80.5 | 73.5 |
MMBench-V1.1測試 | 85.5 | 78.5 | 82.2 | 85.9 | 80.7 | 72.2 |
MMT-台架測試 | 63.4 | - | 65.5 | 71.7 | 63.7 | 54.5 |
MM星 | 67.1 | 62.2 | 63.9 | 68.3 | 60.7 | 48.0 |
MMVet GPT-4-渦輪 | 65.7 | 66.0 | 69.1 | 74.0 | 62.0 | 49.5 |
HallBench平均 | 55.2 | 49.9 | 55.0 | 58.1 | 50.6 | 41.7 |
MathVista測試迷你 | 67.5 | 67.7 | 63.8 | 70.5 | 58.2 | 43.0 |
數學視覺 | 16.97 | - | 30.4 | 25.9 | 16.3 | 12.4 |
基準 | 以前的 SoTA (開源 LVLM) | 雙子座 1.5-Pro | GPT-4o | Qwen2-VL-72B (??) | Qwen2-VL-7B (??) | Qwen2-VL-2B (??) |
---|---|---|---|---|---|---|
MVBench | 69.6 | - | - | 73.6 | 67.0 | 63.2 |
感知測試測試 | 66.9 | - | - | 68.0 | 62.3 | 53.9 |
自我圖式測試 | 62.0 | 63.2 | 72.2 | 77.9 | 66.7 | 54.9 |
視訊MME (無/無潛水艇) | 66.3/69.6 | 75.0 / 81.3 | 71.9/77.2 | 71.2/77.8 | 63.3/69.0 | 55.6/60.4 |
基準 | 公制 | 以前的 SoTA | GPT-4o | Qwen2-VL-72B | |
---|---|---|---|---|---|
一般的 | FnCall [1] | TM | - | 90.2 | 93.1 |
EM | - | 50.0 | 53.2 | ||
遊戲 | 數軸 | SR | 89.4 [2] | 91.5 | 100.0 |
二十一點 | SR | 40.2 [2] | 34.5 | 42.6 | |
易點 | SR | 50.0 [2] | 85.5 | 100.0 | |
第24點 | SR | 2.6 [2] | 3.0 | 4.5 | |
安卓 | 愛茲 | TM | 83.0 [3] | 70.0 | 89.6 |
EM | 47.7 [3] | 35.3 | 72.1 | ||
艾2雷神 | ALFRED有效-未見 | SR | 67.7 [4] | - | 67.8 |
氣相層析 | 75.3 [4] | - | 75.8 | ||
VLN | R2R有效-未見 | SR | 79.0 | 43.7 [5] | 51.7 |
REVERIE有效-未見 | SR | 61.0 | 31.6 [5] | 31.0 |
SR、GC、TM 和 EM 是成功率、目標條件成功、類型匹配和精確匹配的縮寫。 ALFRED 得到 SAM [6]的支持。
Qwen 團隊自行策劃的函數呼叫基準
透過強化學習微調大型視覺語言模型作為決策代理
動物園裡的 Android:GUI 代理的行動鏈思想
ThinkBot:帶有思想鏈推理的具身指令
MapGPT:地圖引導提示與視覺和語言導航的自適應路徑規劃
分割任何東西。
型號 | 擴增實境 | 德 | FR | 它 | 日本航空協會 | KO | 魯 | TH | 六、 | 平均電壓 |
---|---|---|---|---|---|---|---|---|---|---|
Qwen2-VL-72B | 20.7 | 36.5 | 44.1 | 42.8 | 21.6 | 37.4 | 15.6 | 17.7 | 41.6 | 30.9 |
GPT-4o | 20.2 | 34.2 | 41.2 | 32.7 | 20.0 | 33.9 | 11.5 | 22.5 | 34.2 | 27.8 |
克勞德3作品 | 15.1 | 33.4 | 40.6 | 34.4 | 19.4 | 27.2 | 13.0 | 19.5 | 29.1 | 25.7 |
雙子座超 | 14.7 | 32.3 | 40.0 | 31.8 | 12.3 | 17.2 | 11.8 | 20.3 | 28.6 | 23.2 |
這些結果是在 MTVQA 基準上評估的。
下面,我們提供簡單的範例來展示如何使用 Qwen2-VL 和 ?模型範圍和?變形金剛。
Qwen2-VL 的程式碼已包含在最新的 Hugging Face Transformer 中,我們建議您使用以下命令從原始程式碼建置:
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
或者您可能會遇到以下錯誤:
KeyError: 'qwen2_vl'
注意:目前最新版本的transformers
在載入 Qwen2-VL 配置時存在錯誤,因此您需要安裝如上所述的特定版本的變壓器。
我們提供了一個工具包來幫助您更方便地處理各種類型的視覺輸入,就像您使用 API 一樣。這包括 base64、URL 以及交錯的圖像和影片。您可以使用以下命令安裝它:
# 強烈建議使用 `[decord]` 功能來加快影片載入速度。
如果您不使用 Linux,則可能無法從 PyPI 安裝decord
。在這種情況下,您可以使用pip install qwen-vl-utils
,它將回退到使用 torchvision 進行視訊處理。但是,您仍然可以從原始程式碼安裝decord,以便在載入影片時使用decord。
這裡我們展示了一個程式碼片段,向您展示如何將聊天模型與transformers
和qwen_vl_utils
結合使用:
from Transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessorfrom qwen_vl_utils import process_vision_info# default: 在可用設備上載入模型 model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-700 月_多圖推理
# 包含多個圖像和文字的訊息 querymessages = [ {“角色”:“使用者”,“內容”:[ {"type": "image", "image": "file:///path/to/image1.jpg"}, {"type": "image", "image": "file:///path/to/image2.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=p. , return_tensors =“pt”, )inputs = input.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. ) ]output_text=processor.batch_decode( generated_ids_trimmed,skip_special_tokens=True,clean_up_tokenization_spaces=False)print(output_text)影片推理
# 包含視訊圖像清單和文字的訊息 querymessages = [ {“角色”:“使用者”,“內容”:[ {"type": "video","video": ["file:///path/to/frame1.jpg","file:///path/to/frame2.jpg","file:///路徑/to/frame3.jpg","檔案:///path/to/frame4.jpg", ], }, {"type": "text", "text": "描述這個影片。"}, ], } ]# 包含本地視訊路徑和文字查詢的訊息 = [ {“角色”:“使用者”,“內容”:[ {“類型”:“視訊”,“視訊”:“檔案:///path/to/video1.mp4”,“最大像素”:360 * 420,“fps”:1.0, }, {"type": "text", "text": "描述這個影片。"}, ], } ]# 包含影片 URL 和文字查詢的訊息 = [ {“角色”:“使用者”,“內容”:[ {"type": "video","video": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4", }, {"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=p. , return_tensors =“pt”, )inputs = input.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. ) ]output_text=processor.batch_decode( generated_ids_trimmed,skip_special_tokens=True,clean_up_tokenization_spaces=False)print(output_text)視訊URL相容性很大程度取決於第三方函式庫版本。詳細資訊如下表所示。如果您不想使用預設後端,請透過
FORCE_QWENVL_VIDEO_READER=torchvision
或FORCE_QWENVL_VIDEO_READER=decord
變更後端。
後端 HTTP協定 HTTPS 火炬視覺 >= 0.19.0 ✅ ✅ 火炬視覺 < 0.19.0 ❌ ❌ 裝飾 ✅ ❌ 批量推理
# 批次推理的範例訊息messages1 = [ {“角色”:“使用者”,“內容”:[ {"type": "image", "image": "file:///path/to/image1.jpg"}, {"type": "image", "image": "file:///path/to/image2.jpg"}, {"type": "text", "text": "這些圖片中有哪些共同元素?"}, ], } ]訊息2 = [ {"role": "system", "content": "你是得力助手。"}, {"role": "用戶", "content": "你是誰?"}, ]# 合併訊息進行批次處理messages = [messages1, messages2]# 批次推理準備texts = [processor.apply_chat_template(msg, tokenize=False, add_ Generation_prompt=True)for msg in messages]image_inputs, video_inputs=True)for msg in messages]image_inputs, video_inputs, essacess_inputs, essacess_inputs, 5] = process (文本=文本,圖像=image_inputs,視頻=video_inputs,padding=True,return_tensors=“pt”, )inputs = input.to("cuda")# 批次推理generated_ids = model.generate(**inputs, max_new_tokens=128) generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids inputin. generated_ids ) ]output_texts=processor.batch_decode( generated_ids_trimmed,skip_special_tokens=True,clean_up_tokenization_spaces=False)print(output_texts)?模型範圍
我們強烈建議用戶尤其是中國大陸的用戶使用ModelScope。
snapshot_download
可以幫助您解決有關下載檢查點的問題。更多使用技巧
對於輸入圖像,我們支援本機檔案、base64 和 URL。對於視頻,我們目前僅支援本地文件。
# 您可以直接將本機檔案路徑、URL或base64編碼的圖片插入到文字中您想要的位置。 {“角色”:“使用者”,“內容”:[ {"type": "image", "image": "file:///path/to/your/image.jpg"}, {"type": "text", "text": "描述這張圖。"}, ], } ]## 圖片 URL 訊息 = [ {“角色”:“使用者”,“內容”:[ {“類型”:“圖像”,“圖像”:“http://path/to/your/image.jpg”}, {"type": "text", "text": "描述這張圖。"}, ], } ]## Base64 編碼的圖像訊息 = [ {“角色”:“使用者”,“內容”:[ {"type": "image", "image": "data:image;base64,/9j/..."}, {"type": "text", "text": "描述這張圖。"}, ], } ]影像解析度可提升效能
該模型支援多種分辨率輸入。預設情況下,它使用原始解析度進行輸入,但更高的解析度可以提高效能,但代價是更多的計算。使用者可以設定最小和最大像素數,以實現適合其需求的最佳配置,例如令牌計數範圍為 256-1280,以平衡速度和記憶體使用。
min_pixels = 256 * 28 * 28max_pixels = 1280 * 28 * 28processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels, max_pixels=)此外,我們提供了兩種方法來細粒度控制輸入到模型的圖像大小:
指定精確尺寸:直接設定
resized_height
和resized_width
。這些值將四捨五入到最接近的 28 倍數。定義 min_pixels 和 max_pixels:影像將被調整大小以將其縱橫比保持在 min_pixels 和 max_pixels 範圍內。
# 調整大小的高度和調整大小的寬度訊息 = [ {“角色”:“使用者”,“內容”:[ {“類型”:“圖像”,“圖像”:“檔案:///path/to/your/image.jpg”,“調整大小的高度”:280,“調整大小的寬度”:420, }, {"type": "text", "text": "描述這張圖。"}, ], } ]# min_pixels 和 max_pixelsmessages = [ {“角色”:“使用者”,“內容”:[ {“類型”:“圖像”,“圖像”:“檔案:///path/to/your/image.jpg”,“最小像素”:50176,“最大像素”:50176, }, {"type": "text", "text": "描述這張圖。"}, ], } ]為多個影像輸入新增 id
預設情況下,圖像和視訊內容直接包含在對話中。處理多個圖像時,為圖像和影片添加標籤以便更好地參考會很有幫助。使用者可以透過以下設定控制此行為:
添加視覺 ID
對話=[ {"role": "user","content": [{"type": "image"}, {"type": "text", "text": "你好,你好嗎?"}], }, {"role": "assistant","content": "我很好,謝謝您的詢問。今天需要什麼幫助嗎?", }, {“角色”:“使用者”,“內容”:[ {"type": "text", "text": "你能描述一下這些圖片和影片嗎?"}, {“類型”:“圖像”}, {“類型”:“圖像”}, {“類型”:“視訊”}, {"type": "text", "text": "這些是我假期裡的。"}, ], }, {"role": "assistant","content": "我很樂意為您描述這些圖像和影片。您能提供更多有關您的假期的背景資訊嗎?", }, {"role": "user","content": "這是一次山裡旅行。你能看到圖片和影片中的細節嗎?", }, ]# 預設值:prompt_without_id = process.apply_chat_template(conversation, add_ Generation_prompt=True)# 例外輸出: '<|im_start|>systemnYou are a happy Assistant.<|im_end|>n<|im_start|start| >< |image_pad|><|vision_end|>你好,你好嗎?今天我能為您提供什麼幫助? ><|image_pad| ><|vision_end|><|vision_start|><|video_pad|><|vision_end|>這些來自我的假期。描述圖像和視頻你。您能否提供更多有關您假期的背景資訊?你能看到圖像和影片中的詳細資訊嗎? <|im_start |>systemn你是得力助手。 |im_end|>n< |im_start|>assistantn我做得很好,謝謝您的詢問。今天我能為您提供什麼幫助? 3: <|vision_start |><|image_pad|><|vision_end|>影片1:<|vision_start|><|video_pad|><|vision_end|>這些來自我的假期。 <|im_end|>n<|im_start |>assistantnI'd很樂意為您描述圖像和影片。您能否提供更多有關您假期的背景資訊?您能看到圖片和影片中的詳細資訊嗎?Flash-Attention 2 加速生成
首先,請確保已安裝最新版本的Flash Attention 2:
pip install -U flash-attn --no-build-isolation另外,您應該有一個與 Flash-Attention 2 相容的硬體。 FlashAttention-2 僅當模型載入到
torch.float16
或torch.bfloat16
中時才能使用。若要使用 Flash Attention-2 載入並執行模型,只需在載入模型時新增
attn_implementation="flash_attention_2"
即可,如下所示:from Transformers import Qwen2VLForConditionalGenerationmodel =