meta的細分市場模型2(SAM 2)是分割技術的最新創新。這是Meta的第一個統一模型,可以實時分段圖像和視頻中的對象。
>但是為什麼要微調SAM 2如果已經可以分割任何東西?> SAM 2是強大的開箱即用,但其在稀有或特定領域的任務上的性能可能並不總是滿足期望。微調使您可以根據自己的特定需求調整SAM2,從而提高其特定用例的準確性和效率。
在本文中,我將通過SAM 2的微調過程逐步指導您。 SAM2是由Meta開發的基礎模型,用於在圖像和視頻中迅速進行視覺分割。與主要專注於靜態圖像的前身SAM不同,SAM2也旨在處理視頻分割的複雜性。SAM2-任務,模型和數據(來源:Ravi等,2024)
其數據引擎允許進行交互式數據收集和模型改進,使該模型能夠分割任何可能的東西。該引擎使SAM 2能夠連續學習和適應,從而使其在處理新的和具有挑戰性的數據方面更有效。但是,對於特定於領域的任務或稀有物體,微調對於實現最佳性能至關重要。
為什麼要微調SAM2?
在SAM 2的上下文中,微調是在特定數據集上進一步培訓預訓練的SAM 2模型以增強其針對特定任務或域的性能的過程。雖然SAM 2是一種在廣泛而多樣的數據集中訓練的強大工具,但其通用性質可能並不總是為專業或稀有任務帶來最佳結果。
例如,如果您正在從事一個需要識別特定腫瘤類型的醫學成像項目,則該模型的性能可能會由於其廣義培訓而下降。
微調過程
通過允許您將模型調整到特定數據集中,這是微調SAM 2的關鍵好處:
>>訪問SAM 2模型和代碼庫:可以訪問SAM 2模型及其代碼庫。您可以從Meta的GitHub存儲庫中下載預先訓練的SAM 2模型。
>> pytorch
>
2。數據提取和清潔由於SAM2模型需要以特定格式的輸入,因此我們將數據轉換為以下內容:
可視化:我們通過覆蓋圖像上的掩碼來可視化圖像面罩對。這有助於我們檢查口罩的一致性和準確性。
步驟1:安裝SAM-2
此代碼段確保已正確安裝SAM2庫並準備在我們的微調工作流程中使用。 >安裝了SAM-2庫後,下一步是獲取我們將用於微調的數據集。我們使用Kaggle上可用的數據集,特別是胸部CT分割數據集,其中包含肺,心臟和氣管的掩模。
>
>
解壓縮數據: >準備好數據集後,讓我們開始微調過程。正如我之前提到的,這裡的關鍵是僅對SAM2的輕量級組件進行微調,例如蒙版解碼器和提示編碼器,而不是整個模型。這種方法效率更高,需要更少的資源。
在此步驟中,我們下載了與不同型號大小相對應的各種SAM-2檢查點(例如Tiny,Small,Base_plus,大)。可以根據可用的計算資源和手頭的特定任務來調整檢查點的選擇。
>下載數據集後,下一步是為培訓做準備。這涉及將數據集分配到培訓和測試集中,並創建可以在微調過程中饋入SAM 2模型的數據結構。 將數據集拆分為培訓和測試集後,下一步涉及創建二進制掩碼,選擇這些掩碼中的要點,並可視化這些元素以確保正確處理數據。 1。讀取和調整圖像:該過程首先從數據集中隨機選擇圖像及其相應的掩碼。圖像從BGR轉換為RGB格式,這是大多數深度學習模型的標準顏色格式。相應的註釋(掩碼)以灰度模式讀取。然後,將圖像和註釋掩碼調整為1024像素的最大尺寸,保持縱橫比以確保數據擬合在模型的輸入要求中並減少計算負載。
侵蝕會稍微降低面具的大小,這有助於避免選擇點時的邊界效應。這樣可以確保選定的點很好地在對象的內部內而不是其邊緣旁邊,這可能是嘈雜的或模棱兩可的。 關鍵點是從侵蝕的掩碼中選擇的。這些觀點在微調過程中充當提示,指導模型將注意力集中在哪裡。這些點是從對象內部隨機選擇的,以確保它們具有代表性,並且不受嘈雜邊界的影響。
3。可視化:此步驟對於驗證數據預處理步驟是否正確執行至關重要。通過視覺檢查二進制面膜上的要點,您可以確保模型在培訓期間會收到適當的輸入。最後,對二進制掩碼進行了重塑並正確格式化(具有適合模型輸入的尺寸),並且該點也被重塑以在訓練過程中進一步使用。該函數返回已處理的圖像,二進制掩碼,選定點以及找到的掩碼數量。
>加載模型檢查點: >我們配置了幾個超參數,以確保模型有效地學習,例如學習率,權重衰減和梯度積累步驟。這些超參數控制學習過程,包括模型更新其權重的速度以及如何避免過度擬合。隨時可以玩這些。 >優化器負責更新模型權重,而調度程序則調整訓練期間的學習率以改善收斂性。通過微調這些參數,我們可以實現更好的分割精度。
在每次迭代期間,模型會處理一批圖像,計算分割掩碼,並將它們與地面真相進行比較以計算損失。然後使用此損失來調整模型權重,從而逐漸提高模型的性能。訓練約3000個時期後,我們獲得了約72%的準確性(IOU - 交叉點)。
測試數據上的最終分割圖像
對於更高級的用例,請考慮對SAM2的其他組件進行微調,例如圖像編碼器。儘管這需要更多的資源,但它提供了更大的靈活性和改進的性能。 證明您可以有效,負責任地使用AI.獲得認證,獲得錄用>步驟2:下載數據集
images.zip:rgb格式的圖像
來自CT掃描數據集的圖像
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
# get dataset from Kaggle
from google.colab import files
files.upload() # This will prompt you to upload the kaggle.json file
!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
>步驟3:下載SAM-2檢查點
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
>我們將數據集分為訓練集(80%)和測試集(20%),以確保我們可以在培訓後評估模型的性能。培訓數據將用於微調SAM 2模型,而測試數據將用於推理和評估。
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
2。分割掩碼的二進化:多類註釋掩碼(可能具有帶有不同像素值的多個對像類)被轉換為二進制掩碼。此掩蓋突出顯示了圖像中所有感興趣的區域,將分割任務簡化為二進制分類問題:對象與背景。然後使用5x5內核侵蝕二進制蒙版。 # get dataset from Kaggle
from google.colab import files
files.upload() # This will prompt you to upload the kaggle.json file
!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
>上面的代碼返回以下圖,其中包含來自數據集的原始圖像及其二進制掩碼和帶有點的二進制掩碼。 !unzip chest-ct-segmentation.zip -d chest-ct-segmentation
步驟5:對SAM2模型進行微調
我們首先使用預訓練的檢查點構建SAM2模型。然後將模型包裹在預測器類中,該類簡化了設置圖像,編碼提示和解碼蒙版的過程。
配置超參數
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
實際的微調過程是迭代的,在每個步驟中,僅通過模型傳遞了一批肺部圖像和掩模,並且計算損失並用於更新模型權重。
# get dataset from Kaggle
from google.colab import files
files.upload() # This will prompt you to upload the kaggle.json file
!mkdir -p ~/.kaggle
!mv kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
!kaggle datasets download -d polomarco/chest-ct-segmentation
推斷
然後,該模型可以用於推理,在該推理中可以預測新的,看不見的圖像上的分割掩碼。從read_images和get_points助手函數開始,以獲取推理圖像及其掩碼以及關鍵點。
在此步驟中,我們使用微型模型來生成用於測試圖像的分割掩碼。然後,將預測的面膜與原始圖像和地面真相面具一起進行可視化,以評估模型的性能。
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
!wget -O sam2_hiera_tiny.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt"
!wget -O sam2_hiera_small.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt"
!wget -O sam2_hiera_base_plus.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt"
!wget -O sam2_hiera_large.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt"
結論>
以上是自定義數據集上的微調SAM 2:教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!