介紹
原始變壓器的引入為當前的大語言模型鋪平了道路。同樣,在引入變壓器模型之後,引入了視覺變壓器(VIT)。就像變形金剛在理解文本和生成響應的文本中表現出色一樣,視覺變壓器模型也被開發出來理解圖像並提供給定圖像的信息。這些導致視覺語言模型,在理解圖像方面表現出色。微軟已經向前邁出了一步,並引入了一個模型,該模型能夠僅使用單個模型執行許多視覺任務。在本指南中,我們將查看Microsoft發布的名為Florence-2的模型,旨在解決許多不同的視覺任務。
學習目標
- 介紹佛羅倫薩-2,一種視覺語言模型。
- 了解訓練佛羅倫薩-2的數據。
- 了解佛羅倫薩-2家族中的不同型號。
- 了解如何下載佛羅倫薩-2。
- 編寫代碼以使用Florence-2執行不同的計算機視覺任務。
本文作為數據科學博客馬拉鬆的一部分發表。
目錄
- 什麼是佛羅倫薩-2?
- 與佛羅倫薩-2的圖像字幕
- 佛羅倫薩-2的對象檢測
- 佛羅倫薩-2分割
- 常見問題
什麼是佛羅倫薩-2?
Florence-2是Microsoft團隊開發的視覺語言模型(VLM)。佛羅倫薩-2有兩種尺寸。一個是0.23B版本,另一個是0.77b版本。這些低尺寸使每個人都可以輕鬆地在CPU本身上運行這些模型。創建了佛羅倫薩-2,請記住一個模型可以解決所有問題。對佛羅倫薩-2進行了訓練,可以解決不同的任務,包括對象檢測,對象分割,圖像字幕(甚至生成詳細的字幕),短語分割,OCR(光學字符識別)以及這些組合。
Florence-2 Vision語言模型在FLD 5B數據集上進行了培訓。該FLD-5B是由Microsoft團隊創建的數據集。該數據集在約1.26億張圖像上包含約54億個文本註釋。其中包括13億個文本區域註釋,5億個文本註釋和36億條文本短語區域註釋。 Florence-2接受文本說明和圖像輸入,為OCR,對象檢測或圖像字幕等任務生成文本結果。
該體系結構包含一個視覺編碼器,然後是變壓器編碼器解碼器塊,為了損失,它們可以使用標準損耗函數,即交叉熵損失。 Florence-2模型執行了三種類型的區域檢測:用於對象檢測的框表示,OCR文本檢測的四框表示以及用於分割任務的多邊形表示。
與佛羅倫薩-2的圖像字幕
圖像字幕是一項視覺語言任務,在給定圖像的情況下,深度學習模型將輸出有關圖像的標題。根據模型經過的培訓,該標題可以簡短或詳細。執行這些任務的模型經過巨大的圖像字幕培訓,它們在其中學習如何輸出文本,給定圖像。他們訓練的數據越多,他們就越擅長描述圖像。
下載和安裝
我們將首先下載和安裝一些我們需要運行佛羅倫薩視覺模型的庫。
!
- 變形金剛: HuggingFace的Transformers庫為您可以下載的不同任務提供了各種深度學習模型。
- 加速: HuggingFace的加速庫可以改善通過GPU服務模型時的模型推理時間。
- Flash_attn: Flash注意力庫實現了比原始庫更快的關注算法,並且在佛羅倫薩-2模型中使用。
- EINOPS:愛因斯坦操作簡化了代表矩陣乘法並在佛羅倫薩-2模型中實現的。
下載佛羅倫薩-2型號
現在,我們需要下載Florence-2模型。為此,我們將使用以下代碼。
從變形金剛導入自動化處理器AutomodelforCausAllm model_id ='Microsoft/Florence-2-large-ft' model = automodelforcausallm.from_pretrate(model_id,trust_remote_code = true).eval()。 cuda() processor = autopersesor.from_pretrataining(model_id,trust_remote_code = true,device_map =“ cuda”)
- 我們首先導入AutomodelForCausAllm和AutoPeroCessor。
- 然後,我們將模型名稱存儲在model_name變量中。在這裡,我們將與Florence-2大調節模型一起工作。
- 然後,我們通過調用.from_pretaining()函數賦予其模型名稱並設置trust_remote_code = true來創建一個AutoModelforCausAllm的實例,這將從HF存儲庫中下載該模型。
- 然後,我們通過調用.eval()來將此模型設置為評估模型,並通過調用.cuda()函數將其發送到GPU。
- 然後,我們通過調用.from_pretaining()並給出模型名稱並將Device_map設置為CUDA來創建一個自動處理器的實例。
Autopersestor與自動訓練器非常相似。但是,自動傳動器類涉及文本和文本令牌化。而自動處理器則處理文本和圖像令牌化,因為佛羅倫薩-2處理圖像數據,我們與自動處理者合作。
現在,讓我們拍攝圖像:
從PIL導入圖像 image = image.open(“/content/beach.jpg”)
在這裡,我們拍了一張海灘照片。
生成標題
現在,我們將將這張圖像提供給Florence-2 Vision語言模型,並要求它生成標題。
提示=“ <catchion>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</catchion>
- 我們首先創建提示。
- 然後,我們將提示和圖像同時給處理器類,然後返回Pytorch傳感器。我們將它們提供給GPU,因為該模型位於GPU中並將其存儲在變量輸入中。
- 輸入變量包含input_ids,即令牌ID和圖像的像素值。
- 然後,我們調用模型的生成函數並給出輸入ID,即圖像像素值。我們將最大生成的令牌設置為512將採樣保留為false,並將生成的令牌存儲在生成的_ids中。
- 然後,我們調用處理器的.batch_decode函數將其授予生成的_ids,並將skip_special_tokens flag設置為false。這將是一個列表,因此我們需要列表的第一個元素。
- 最後,我們通過調用.post_process_generated並將其生成的文本,任務類型和image_size作為元組來進行後處理。
運行代碼並看到上面的輸出圖片,我們看到該模型為圖像生成了標題“雨傘和休息室在海灘上的雨傘和休息室”。上面的圖像標題非常短。
提供提示
我們可以通過提供其他提示來邁出下一步,例如
嘗試此操作的代碼可以在下面看到:
提示=“ <lated_caption>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</lated_caption>
提示=“ <more_detailed_caption>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) 打印(結果[提示])</more_detailed_caption>
在這裡,我們使用了
佛羅倫薩-2的對象檢測
對象檢測是計算機視覺中著名的任務之一。它處理給定圖像的找到一些對象。在對象檢測中,該模型標識圖像並提供對象周圍邊界框的X和Y坐標。 Florence-2 Vision語言模型非常能夠檢測給定圖像的對象。
讓我們使用以下圖像嘗試一下:
image = image.open(“/content/van.jpg”)
在這裡,我們有一張明亮的橙色麵包車的圖像,背景中有一棟白色的建築物。
為佛羅倫薩-2視覺語言模型提供圖像
現在,讓我們將此圖像提供給佛羅倫薩-2視覺語言模型。
提示=“ <od>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務=提示,image_size =(image.width,image.height)) </od>
對象檢測的過程與我們剛剛完成的圖像字幕任務非常相似。這裡唯一的區別是,我們將提示更改為
輸出存儲在變量命名結果中。可變結果是格式{:{'bboxes':[x1,y1,x2,y2],…],'labels':['label1','label1','label2',…]}}}。因此,佛羅倫薩-2視覺模型可為每個標籤坐標框,y contings for每個對象,該對像是為每個對象的協調,該對象可檢測到該圖像。
在圖像上繪製界限
現在,我們將使用我們擁有的坐標在圖像上繪製這些邊界框。
導入matplotlib.pyplot作為PLT 導入matplotlib.patches作為補丁 圖,ax = plt.subplots() ax.Imshow(圖像) 對於bbox,在zip中標記(結果[提示] ['bboxes'],結果[提示] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
- 為了繪製圖像周圍的矩形邊界框,我們與matplotlib庫一起工作。
- 我們首先創建一個圖形和一個軸,然後顯示給佛羅倫薩-2視覺語言模型的圖像。
- 在這裡,模型輸出的邊界框是包含x,y坐標的列表,在最終輸出中,有一個邊界框的列表,即每個標籤都有其自己的邊界框。
- 因此,我們迭代邊界框的列表。
- 然後,我們打開邊界框的X和Y坐標。
- 然後,我們與最後一步中解開包裝的坐標一起繪製矩形。
- 最後,我們將其修補為當前顯示的圖像。
- 我們甚至需要在邊界框中添加標籤,以說明邊界框包含什麼對象。
- 最後,我們卸下軸。
運行此代碼並查看圖片,我們看到我們為其提供的範圍圖像生成了許多界限框。我們看到該模型已檢測到麵包車,窗戶和車輪,並能夠為每個標籤提供正確的坐標。
標題為短語接地
接下來,我們將執行一個名為“標題為“短語接地”的任務”,佛羅倫薩-2模型支持。該模型的作用是給定圖像和標題,短語接地的任務是找到給定標題中的名詞短語中提到的每個 /最相關的實體 /對象。
我們可以使用以下代碼來查看此任務:
提示=“ <catchion_to_phrase_grounding>一輛橙色的貨車停在白色建築物前” task_type =“ <catchion_to_phrase_grounding>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務= task_type,image_size =(image.width,image.height)) </catchion_to_phrase_grounding></catchion_to_phrase_grounding>
在此提示,我們將其提供“
導入matplotlib.pyplot作為PLT 導入matplotlib.patches作為補丁 圖,ax = plt.subplots() ax.Imshow(圖像) 對於bbox,在zip中標記(結果[task_type] ['bboxes'],結果[task_type] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
在這裡,我們看到佛羅倫薩-2視覺語言模型能夠從中提取兩個實體。一個是橙色的麵包車,另一輛是白色的建築。然後,佛羅倫薩-2為每個實體生成了邊界框。這樣,給定標題,該模型可以從給定的字幕中提取相關實體/對象,並能夠為這些對像生成相應的邊界框。
佛羅倫薩-2分割
分割是一個過程,在其中拍攝圖像,並為圖像的多個部分生成掩模。每個掩碼是一個對象。分割是對象檢測的下一個階段。在對象檢測中,我們僅找到圖像的位置並生成邊界框。但是在分割中,我們沒有生成一個矩形邊界框,而是生成一個將處於對象形狀的掩碼,因此就像為該對象創建掩碼一樣。這很有幫助,因為我們不僅知道對象的位置,而且甚至知道對象的形狀。幸運的是,佛羅倫薩-2視覺語言模型支持細分。
對圖像進行分割
我們將嘗試對我們的麵包車形象進行細分。
提示=“ <refering_expression_segentation>兩個黑色輪胎” task_type =“ <refering_expression_sementation>” 輸入=處理器(text =提示,images = image,return_tensors =“ pt”)。 to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 結果= processor.post_process_generation(text_generations, 任務= task_type,image_size =(image.width,image.height)) </refering_expression_sementation></refering_expression_segentation>
- 在這裡,該過程類似於圖像字幕和對象檢測任務。我們首先提供提示。
- 這裡的提示為“
兩個黑色輪胎”,其中該任務為分割。 - 分割將基於提供的文本輸入,在這裡是“兩個黑色輪胎”。
- 因此,Florence-2模型將嘗試生成與此文本輸入密切相關的面具和所提供的圖像。
在這裡,結果變量將為格式{:{'polygons':[[[[[polygon]],…],'labels':[[“”,“”,…]}}},其中每個對象/掩碼由多邊形列表表示。每個對象/掩碼列表。
創建口罩並覆蓋實際圖像
現在,我們將創建這些蒙版並在實際圖像上疊加它們,以便我們可以更好地可視化。
導入副本 導入numpy作為NP 來自ipython.display導入顯示 從PIL導入圖像,ImageDraw,ImageFont output_image = copy.deepcopy(圖像) res =結果[task_type] draw = imagedraw.draw(output_image) 比例= 1 對於多邊形,在zip中標記(res ['polygons'],res ['labels']): fill_color =“藍色” 多邊形中的_polygon: _polygon = np.Array(_polygon).Reshape(-1,2) 如果Len(_polygon)<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174502929770135.png?x-oss-process=image/resize,p_40" class="lazy" alt="如何使用Florence -2 -Analytics Vidhya執行計算機視覺任務" ></p><h4 id="解釋">解釋</h4>
- 在這裡,我們首先從PIL庫中導入各種工具進行圖像處理。
- 我們在新變量中創建圖像的深層副本,並將鍵“
”的值存儲。 - 接下來,我們通過調用.draw()方法創建ImageDraw實例並給出實際映像的副本來加載圖像。
- 接下來,我們迭代多邊形和標籤值的拉鍊。
- 對於每個多邊形,我們用名稱_polygon迭代單個多邊形並重塑它。 _polygon現在是一個高維列表。
- 我們知道_polygon必須至少有3個側面,以便可以連接。因此,我們檢查了此有效性條件,以查看_polygon列表至少有3個列表項目。
- 最後,我們通過調用.polygon()方法並將其授予_polygon,在實際圖像的副本上繪製此_polygon。除此之外,我們甚至還給它帶有輪廓顏色和填充顏色。
- 如果Florence-2 Vision語言模型為這些多邊形生成標籤,那麼我們甚至可以通過調用.text()函數並將其列為標籤來將此文本繪製在實際圖像的副本上。
- 最後,在繪製了佛羅倫薩-2模型生成的所有多邊形之後,我們通過調用Ipython庫的顯示功能來輸出圖像。
Florence-2 Vision語言模型成功地理解了我們對“兩個黑色輪胎”的查詢,並推斷出圖像包含一輛帶有可見黑色輪胎的車輛。該模型生成了這些輪胎的多邊形表示,並用藍色掩蓋。由於Microsoft團隊策劃了強大的培訓數據,該模型在各種計算機視覺任務上都表現出色。
結論
Florence-2是Microsoft團隊從頭開始創建和訓練的視覺語言模型。與其他視覺語言模型不同,Florence-2執行各種計算機視覺任務,包括對象檢測,圖像字幕,短語對象檢測,OCR,細分和這些組合。在本指南中,我們研究瞭如何下載Florence-2大型模型以及如何使用Florence-2更改提示執行不同的計算機視覺任務。
關鍵要點
- Florence-2型號有兩種尺寸。一個是基本變體,它是20億個參數版本,另一個是大型變體,是7億參數版本。
- Microsoft Team在FLD 5B數據集中培訓了Florence-2模型,該模型是一個圖像數據集,其中包含Microsoft Team創建的不同圖像任務。
- Florence-2接受圖像以及提示輸入。提示定義了佛羅倫薩-2視覺模型應執行的任務類型的情況。
- 每個任務都會生成不同的輸出,所有這些輸出都是以文本格式生成的。
- Florence-2是具有MIT許可證的開源模型,因此可以使用商業應用程序。
常見問題
Q1。什麼是佛羅倫薩-2?A. Florence-2是由Microsoft團隊開發的視覺語言模型,並以兩種尺寸(0.23B參數和0.7B參數版本)發布。
Q2。自動處理器與自動訓練器有何不同?答:自動訪問器只能處理將文本轉換為令牌的文本數據。另一方面,多模式模型的自動處理前處理器數據甚至包括圖像數據。
Q3。什麼是FLD-5B?A. FLD-5B是由Microsoft團隊策劃的圖像數據集。它包含約54億張圖像字幕的1.26億張圖像。
Q4。佛羅倫薩-2模型輸出什麼?A. Florence-2模型根據給定的輸入圖像和輸入文本輸出文本。該文本可以是簡單的圖像字幕,也可以是界框,如果任務是對象檢測或分割,則可以坐標。
Q5。 Florence-2開源嗎?答:是的。 Florence-2是根據MIT許可發布的,因此使其成為開源,並且無需使用HuggingFace進行身份驗證即可使用此模型。
本文所示的媒體不由Analytics Vidhya擁有,並由作者酌情使用。
以上是如何使用Florence -2 -Analytics Vidhya執行計算機視覺任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

自2008年以來,我一直倡導這輛共享乘車麵包車,即後來被稱為“ Robotjitney”,後來是“ Vansit”,這是城市運輸的未來。 我預見這些車輛是21世紀的下一代過境解決方案Surpas

革新結帳體驗 Sam's Club的創新性“ Just Go”系統建立在其現有的AI驅動“掃描和GO”技術的基礎上,使會員可以在購物旅行期間通過Sam's Club應用程序進行掃描。

NVIDIA在GTC 2025上的增強可預測性和新產品陣容 NVIDIA是AI基礎架構的關鍵參與者,正在專注於提高其客戶的可預測性。 這涉及一致的產品交付,達到績效期望以及

Google的Gemma 2:強大,高效的語言模型 Google的Gemma語言模型家族以效率和性能而慶祝,隨著Gemma 2的到來而擴展。此最新版本包括兩種模型:270億個參數VER

這一領先的數據劇集以數據科學家,天體物理學家和TEDX演講者Kirk Borne博士為特色。 Borne博士是大數據,AI和機器學習的著名專家,為當前狀態和未來的Traje提供了寶貴的見解

這次演講中出現了一些非常有見地的觀點——關於工程學的背景信息,這些信息向我們展示了為什麼人工智能如此擅長支持人們的體育鍛煉。 我將從每位貢獻者的觀點中概括出一個核心思想,以展示三個設計方面,這些方面是我們探索人工智能在體育運動中應用的重要組成部分。 邊緣設備和原始個人數據 關於人工智能的這個想法實際上包含兩個組成部分——一個與我們放置大型語言模型的位置有關,另一個與我們人類語言和我們的生命體徵在實時測量時“表達”的語言之間的差異有關。 Alexander Amini 對跑步和網球都很了解,但他還

卡特彼勒(Caterpillar)的首席信息官兼高級副總裁傑米·恩格斯特(Jamie Engstrom)領導了一支由28個國家 /地區的2200多名IT專業人員組成的全球團隊。 在卡特彼勒(Caterpillar)工作了26年,其中包括她目前的四年半,Engst

Google Photos的新Ultra HDR工具:快速指南 使用Google Photos的新型Ultra HDR工具增強照片,將標準圖像轉換為充滿活力的高動態範圍傑作。對於社交媒體而言,此工具可提高任何照片的影響,


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。