十、OpenAI之視覺

視覺
學習怎樣使用視覺能力理解圖片

1. 介紹

GPT-4o和GPT-4 Turbo兩個模型都擁有視覺能力,這意味著模型可以接收圖片并回答關于圖片的問題。從歷史上看,語言模型系統被限制采用單一的文本輸入方式。

2. 快速開始

模型使用圖片主要有2種方式;直接在請求中傳遞一個圖片的鏈接或base64位編碼的圖片。通過user,system和assitant消息傳遞圖片。當前不支持圖片在第一個system消息中。

from openai import OpenAIclient = OpenAI()response = client.chat.completions.create(model="gpt-4o",messages=[{"role": "user","content": [{"type": "text", "text": "What’s in this image?"},{"type": "image_url","image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",},},],}],max_tokens=300,
)print(response.choices[0])

模型最擅長回答圖片里有什么的普通問題。雖然它能理解圖片中兩個物體的關系,但還沒有優化到回答關于在圖片中確定的物體的位置細節問題。例如:你可以問這個汽車是什么顏色或基于你的冰箱的食物可以做什么樣的晚餐。但如果你展示一個房間的圖片,并問椅子在哪?可能不能正確的回答。
當你探索什么樣的案例能應用視覺理解時,切記模型能力的限制非常重要

3. 上傳base64編碼圖片

如果你本地有1個或多個圖片,你可以使用base64的格式傳給模型,以下是操作的例子:

import base64
import requests# OpenAI API Key
api_key = "YOUR_OPENAI_API_KEY"# Function to encode the image
def encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode('utf-8')# Path to your image
image_path = "path_to_your_image.jpg"# Getting the base64 string
base64_image = encode_image(image_path)headers = {"Content-Type": "application/json","Authorization": f"Bearer {api_key}"
}payload = {"model": "gpt-4o","messages": [{"role": "user","content": [{"type": "text","text": "What’s in this image?"},{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}]}],"max_tokens": 300
}response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)print(response.json())

4. 多圖片輸入

Chat Completions API 有能力接收和處理base64格式的多張圖片或圖片的URL.模型會處理每一張圖片并使用它們所有的信息來回答問題。

from openai import OpenAIclient = OpenAI()
response = client.chat.completions.create(model="gpt-4o",messages=[{"role": "user","content": [{"type": "text","text": "What are in these images? Is there any difference between them?",},{"type": "image_url","image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",},},{"type": "image_url","image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",},},],}],max_tokens=300,
)
print(response.choices[0])

這是展示模型兩張同一個圖片并回答關于這兩張圖片或獨立回答每一張圖片的問題。

5. 低或高保真圖片理解

對于控制細節參數有3個選項:low high auto,你可以完全控制模型處理圖片,從而生成理解文本。模型默認使用參數auto,設置需根據輸入圖片的大小來確定使用low 或 high

  • low 將開啟’low res’模式,模型將接收一個512x512大小的圖片,代表圖片將消耗65tokens。這將使模型更快的返回響應并消耗較少的tokens,前提是你的案例不需要很高的細節處理
  • high 將開啟’high res‘模式,模型首先使用low res處理圖片,然后基于輸入圖片的大小創建512px的正方形的細節剪切圖片。每一個剪切的圖片將消耗2倍的tokens,總數大約有129tokens
from openai import OpenAIclient = OpenAI()response = client.chat.completions.create(model="gpt-4o",messages=[{"role": "user","content": [{"type": "text", "text": "What’s in this image?"},{"type": "image_url","image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg","detail": "high"},},],}],max_tokens=300,
)print(response.choices[0].message.content)

6. 管理圖片

Chat Completions API不像Assistants API,它是無狀態的。這就意味著你必須自己管理傳遞給模型的消息(包括圖片)。如果你要傳遞給模型一個圖片多次,那每一次請求模型的API你都必須傳遞這個圖片。
對于較長的會話,我們建議圖片的傳遞方式通過URL而不是base64,如果圖片大小比允許的最大值越小,那么在開始下載時就能減少模型的延時。對于low res模型,我們期望512x512大小的圖片。對于high res,則圖片最短的一邊要小于768px,最長的一邊要小于2000px
在模型處理完圖片后,我們會將其刪除。不會作為OpenAI的訓練數據

7. 限制

雖然ChatGPT4的視覺能力很強并能被使用到很場景下,對于了解模型的限制也是非常重要的。下邊是我們知道的一些限制:

  • 醫學影像: 模型不適合翻譯特殊的醫學影像如:CT掃描,并不能作為醫學的建議
  • 非英文: 當模型處理非拉丁字母的圖片時,表現還不夠最優,像日文或韓文
  • 小文本:放大圖片的文本可以改善可讀性,但避免剪掉重要細節信息
  • 旋轉:模型不能翻譯旋轉或上下顛倒的圖片或文字
  • 可視化元素:模型很難理解圖片或文字中的顏色和樣式,如實線、橫虛線、點虛線的變化
  • 空間推理: 模型很難處理需要準確定位的任務,如象棋的位置
  • 準確率:模型在某個場景下可能產生不正確的描述或標注
  • 圖片形狀:模型很難處理全景圖和魚眼圖
  • 元數據和縮放:模型不能使用原始名或元數據,圖片在分析之前要進行縮放調整,將改其原始維度大小
  • 計數:只能給出圖片中大概的物體數量
  • 驗證碼:為了安全,我們在系統中實現了阻止批量提交的驗證碼功能

8. 計算成本

圖片的輸入用tokens進行計量和收費,和文本輸入一樣。傳遞的圖片的token的花費由兩個因素決定:每個圖片URL塊的大小和細節選項。所有的圖片都使用detail:low,每個圖片會消耗85tokens,detail:high圖片首先縮放至適合2048x2048的正方形,保持它們的長寬比。然后,縮放圖片最短的邊至768px,最終,我們計算圖片包含多少個512px的正方形,每個正方形將消耗170tokens,另外85個tokens也被添加到最終總數中。

這里有一些例子來說明上述問題。

  • 一個1024 × 1024的正方形圖像細節:高模式花費765個令牌

    • 1024小于2048,所以沒有初始大小調整。
    • 最短的邊是1024,所以我們將圖像縮小到768 x 768。
    • 需要4個512px的正方形塊來表示圖像,因此最終的令牌成本為170 * 4 + 85 = 765。
  • 一個2048 x 4096的圖像細節:高模式花費1105個令牌

    • 我們將圖像縮小到1024 x 2048,以適應2048的正方形。
    • 最短的邊是1024,所以我們進一步縮小到768 x 1536。
    • 需要6個512px的貼圖,所以最終的令牌成本是170 * 6 + 85 = 1105
  • 4096 x 8192的detail:low 最便宜的是85個令牌

    • 無論輸入大小如何,低細節圖像都是固定成本。

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

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

相關文章

qml下拉條實現

qml下拉條實現 代碼結構 代碼結構 Rectangle里面嵌套一個Flickable,然后下面是一個Rectangle,作為滑動的區域,給最外層的Rectangle的y加一個屬性動畫。滑動區域寫好onPressed和Onrelease即可。 import QtQuick 2.15 import QtQuick.Control…

從《紅樓夢》的視角看大模型知識庫 RAG 服務的 Rerank 調優

背景介紹 在之前的文章 有道 QAnything 源碼解讀 中介紹了有道 RAG 的一個主要亮點在于對 Rerank 機制的重視。 從目前來看,Rerank 確實逐漸成為 RAG 的一個重要模塊,在這篇文章中就希望能講清楚為什么 RAG 服務需要 Rerank 機制,以及如何選…

Redisson-分布式鎖單Redis節點模式

Redisson-分布式鎖單Redis節點模式 為什么要用分布式鎖? 使用分布式鎖的主要目的是為了解決多線程或多進程并發訪問共享資源時可能出現的競爭條件和數據一致性問題。舉一些實際場?: 數據庫并發控制:在分布式系統中,多個節點同…

虛擬機上部署java微服務

在Windows服務器上安裝Ubuntu系統,先安裝虛擬機,然后再虛擬機上安裝Ubuntu系統 啟動虛擬機上的Ubuntu系統,然后安裝jdk。安裝好的Ubuntu系統是帶桌面版的,需要打開 “終端” 控制臺,通過命令行交互的方式部署程序&…

git 合并多個commit 使分支保持一次提交

1.控制臺輸入 git log 查看commit歷史 找到歷史提交sha 2.控制臺輸入 git rebase -i d0c5de8f7ca8e58fef347b36dd6b0f42f551cdb4 進入變基 3.輸入英文i進入VM輸入模式 4.保留第一行的pick 后面的pick改為s 5.esc退出輸入模式 6.輸入:wq保存退出 7.輸入英文i進入VM輸入模式…

從0開始實現一個博客系統 (SSM 實現)

相關技術 Spring Spring Boot Spring MVC MyBatis Html Css JS 實現功能 用戶注冊 - 密碼加鹽加密 (md5 加密)前后端用戶信息存儲 - 令牌技術用戶登錄 - (使用 攔截器 做登錄校驗)博客的增刪改查后端數據返回前端, 采用 SpringBoot 做統一功能處理和統一異常處理 數據…

軟考-程序員 知識點與部分真題梳理

軟考-程序員 知識點與部分真題梳理 參照《程序員教程》第五版劃分類別; 持續更新中… 計算機系統基礎知識 如何理解和處理浮點數的加減法運算 在計算機科學中,處理浮點數的表示和運算是基礎且關鍵的,尤其是在進行科學計算、圖形處理和數據分…

V2I(車與基礎設施)介紹

V2I(車與基礎設施)介紹 一、V2I技術概述 V2I(Vehicle-to-Infrastructure)技術,全稱汽車與基礎設施通訊,也被稱為信號燈系統。它通過無線通信技術,為車載智能交通運輸系統設立了專門的通信頻段…

【網絡】為什么udp協議報頭有長度字段,而tcp沒有

引言: 在網絡通信中,UDP(用戶數據報協議)和TCP(傳輸控制協議)是兩種常用的傳輸層協議。它們在設計和功能上有一些不同之處,其中之一就是報頭中的長度字段。本文將深入探討UDP和TCP協議中長度字…

SpringCloud Alibaba詳解:打造高可用的分布式系統

SpringCloud Alibaba是一個基于Spring Cloud的微服務開發框架,它集成了阿里巴巴的一系列中間件和工具,能夠快速構建高可用的分布式系統。在本文中,將詳細介紹如何使用SpringCloud Alibaba來打造高可用的分布式系統,并通過代碼案例…

第十一課,end關鍵字、簡單while循環嵌套、初識for循環

一,end關鍵字 end關鍵字用于在print輸出的內容后面聲明結束的字符,我們之前學過并且十分了解print是默認輸出內容之后跟著換行的,如果我們不希望換行而希望使用其它字符來代替換行,就可以用end關鍵字來實現 特殊的,en…

k8s筆記 | 高度調度

CronJob計劃任務 簡介:在k8s中周期性運行計劃任務,與linux中的crontab相同;注意點 CornJob執行的時間是controller-manager的時間,所以一定要確保controller-manager的時間是準確的,另外cornjob cron表達式 文章參…

xjoi題庫一級三段題解(c語言版)

浮點數 時間:0.2 空間:32M 題目描述: 小鸚鵡正在學習浮點數,你跟他說一個浮點數,他立刻就能學會。 輸入一個浮點數,輸出這個浮點數。 輸入格式: 輸入一個浮點數 輸出格式: 輸出一個…

2024.5.25AcWing刷題記錄-排序篇

一、786. 第k個數 - AcWing題庫 三路快速排序 import random def func(nums, start, end):if start > end:return idx random.randint(start, end)base nums[idx]i, j, m start, start, end 1while j < m:if nums[j] < base:nums[i], nums[j] nums[j], nums[i]…

Redis機制-Redis緩存穿透,擊穿,雪崩理解等問題的理解和學習

目錄 一 緩存穿透問題 二 緩存擊穿問題 三 緩存雪崩問題&#xff1a; 圖1 正常的Redis緩存流程 一 緩存穿透問題 我們都知道Redis是一個存儲鍵值對的非關系型數據庫&#xff0c;那么當用戶進行查詢的時候&#xff0c;勢必會從前端發起請求&#xff0c;從而數據從Redis緩存…

內網穿透--Frp-簡易型(速成)-上線

免責聲明:本文僅做技術交流與學習... 目錄 frp項目介紹: 一圖通解: ?編輯 1-下載frp 2-服務端(server)開啟frp口 3-kali客戶端(client)連接frp服務器 4-kali生成馬子 5-kali監聽 6-馬子執行-->成功上線 frp項目介紹: GitHub - fatedier/frp: A fast reverse proxy…

論文精讀-SwinIR Image Restoration Using Swin Transformer

論文精讀-SwinIR: Image Restoration Using Swin Transformer SwinIR:使用 Swin Transformer進行圖像恢復 參數量&#xff1a;SR 11.8M、JPEG壓縮偽影 11.5M、去噪 12.0M 優點&#xff1a;1、提出了新的網絡結構。它采用分塊設計。包括淺層特征提取&#xff1a;cnn提取&#…

Verilog實戰學習到RiscV - 1 : Yosys 綜合

Yosys 綜合 實例 一般 FPGA IDE 的第一步都是RTL 綜合&#xff08;Synthesis&#xff09;。之后就能看到數字電路圖了。然后可以做RTL 級的仿真模擬。 直接上代碼&#xff0c;這里我們看一個簡單的加法器來學習。 module adder(input [7:0] a,input [7:0] b, input …

Java延時隊列取消未支付的訂單 之 重啟服務任務丟失

一、定義延遲任務類 package com.activity.domain;import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit;/*** 延遲任務類*/ public class DelayedCancellation implements Delayed {private String order;private final long delayTime; // 延遲時間p…

鏈表類型的無界阻塞隊列-LinkedBlockingQueue

一:LinkedBlockingQueue介紹 1:LinkedBlockingQueue是一個基于鏈表實現的阻塞隊列,默認情況下,該阻塞隊列的大小為Integer.MAX_VALUE,由于這個數值特別大,所以 LinkedBlockingQueue 也被稱作無界隊列,代表它幾乎沒有界限,隊列可以隨著元素的添加而動態增長,但是如果沒…