如何使用Florence -2 -Analytics Vidhya執行計算機視覺任務
介紹
原始變壓器的引入為當前的大語言模型鋪平了道路。同樣,在引入變壓器模型之後,引入了視覺變壓器(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/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174502929770135.png" 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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

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

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Meta的Llama 3.2:多模式和移動AI的飛躍 Meta最近公佈了Llama 3.2,這是AI的重大進步,具有強大的視覺功能和針對移動設備優化的輕量級文本模型。 以成功為基礎

嘿,編碼忍者!您當天計劃哪些與編碼有關的任務?在您進一步研究此博客之前,我希望您考慮所有與編碼相關的困境,這是將其列出的。 完畢? - 讓&#8217

本週的AI景觀:進步,道德考慮和監管辯論的旋風。 OpenAI,Google,Meta和Microsoft等主要參與者已經釋放了一系列更新,從開創性的新車型到LE的關鍵轉變

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

介紹 想像一下,穿過美術館,周圍是生動的繪畫和雕塑。現在,如果您可以向每一部分提出一個問題並獲得有意義的答案,該怎麼辦?您可能會問:“您在講什麼故事?

介紹 Openai已根據備受期待的“草莓”建築發布了其新模型。這種稱為O1的創新模型增強了推理能力,使其可以通過問題進行思考

SQL的Alter表語句:動態地將列添加到數據庫 在數據管理中,SQL的適應性至關重要。 需要即時調整數據庫結構嗎? Alter表語句是您的解決方案。本指南的詳細信息添加了Colu

斯坦福大學以人為本人工智能研究所發布的《2025年人工智能指數報告》對正在進行的人工智能革命進行了很好的概述。讓我們用四個簡單的概念來解讀它:認知(了解正在發生的事情)、欣賞(看到好處)、接納(面對挑戰)和責任(弄清我們的責任)。 認知:人工智能無處不在,並且發展迅速 我們需要敏銳地意識到人工智能發展和傳播的速度有多快。人工智能係統正在不斷改進,在數學和復雜思維測試中取得了優異的成績,而就在一年前,它們還在這些測試中慘敗。想像一下,人工智能解決複雜的編碼問題或研究生水平的科學問題——自2023年
