首頁 >科技週邊 >人工智慧 >自定義數據集上的微調SAM 2:教程

自定義數據集上的微調SAM 2:教程

Jennifer Aniston
Jennifer Aniston原創
2025-03-04 09:26:13882瀏覽

meta的細分市場模型2(SAM 2)是分割技術的最新創新。這是Meta的第一個統一模型,可以實時分段圖像和視頻中的對象。

>但是為什麼要微調SAM 2如果已經可以分割任何東西?

> SAM 2是強大的開箱即用,但其在稀有或特定領域的任務上的性能可能並不總是滿足期望。微調使您可以根據自己的特定需求調整SAM2,從而提高其特定用例的準確性和效率。

在本文中,我將通過SAM 2的微調過程逐步指導您。 SAM2是由Meta開發的基礎模型,用於在圖像和視頻中迅速進行視覺分割。與主要專注於靜態圖像的前身SAM不同,SAM2也旨在處理視頻分割的複雜性。

SAM2-任務,模型和數據(來源:Ravi等,2024)

>它採用了帶有流內存的變壓器體系結構,從而實現了實時視頻處理。 SAM 2的培訓涉及一個龐大而多樣的數據集,其中包含新型SA-V數據集,其中包括60萬個Masklet註釋,涉及51,000個視頻。

其數據引擎允許進行交互式數據收集和模型改進,使該模型能夠分割任何可能的東西。該引擎使SAM 2能夠連續學習和適應,從而使其在處理新的和具有挑戰性的數據方面更有效。但是,對於特定於領域的任務或稀有物體,微調對於實現最佳性能至關重要。

為什麼要微調SAM2? 自定義數據集上的微調SAM 2:教程 在SAM 2的上下文中,微調是在特定數據集上進一步培訓預訓練的SAM 2模型以增強其針對特定任務或域的性能的過程。雖然SAM 2是一種在廣泛而多樣的數據集中訓練的強大工具,但其通用性質可能並不總是為專業或稀有任務帶來最佳結果。

>

例如,如果您正在從事一個需要識別特定腫瘤類型的醫學成像項目,則該模型的性能可能會由於其廣義培訓而下降。

微調過程

通過允許您將模型調整到特定數據集中,

微調SAM 2可以解決此限制。此過程提高了模型的準確性,並使其對您獨特的用例更有效。

>

這是微調SAM 2的關鍵好處:

>
  1. 提高精度:通過對特定數據集上的模型進行微調,您可以顯著提高其準確性,從而確保目標應用程序的更好性能。
  2. >專業細分:微調使該模型能夠熟練地分割與項目相關的特定對像類型,視覺樣式或環境,從而提供了量身定制的結果,該結果是通用模型可能無法實現的。
  3. >效率:微調通常比從頭開始訓練模型更有效。它通常需要更少的數據和時間,這是將模型快速調整為新任務或利基任務的實用解決方案。
  4. 開始使用微調SAM 2:先決條件
要開始進行微調SAM 2,您需要擁有以下先決條件:

>訪問SAM 2模型和代碼庫:可以訪問SAM 2模型及其代碼庫。您可以從Meta的GitHub存儲庫中下載預先訓練的SAM 2模型。

>
    >合適的數據集:您需要一個數據集,其中包括基礎真相分割掩碼。對於本教程,我們將使用胸部CT分段數據集,您可以下載並為培訓做準備。
  1. 計算資源:微調SAM 2需要具有足夠的計算能力的硬件。強烈建議使用GPU來確保該過程有效且易於管理,尤其是在使用大型數據集或複雜模型時。在此示例中,使用了Google Colab上的A100 GPU。
  2. >
  3. 軟件和其他要求:
python 3.11或更高

> pytorch

    openCV:使用! pip安裝opencv-python
  • >為微調SAM 2
  • 準備數據集
  • 數據集的質量對於微調SAM 2模型至關重要。具有準確的分割口罩的高質量註釋圖像或視頻對於實現最佳性能至關重要。精確的註釋使模型能夠學習正確的功能,從而在現實世界應用程序中提高了更好的細分精度和魯棒性。
1。數據採集​​

>第一步涉及獲取數據集,該數據集構成了培訓過程的骨幹。我們從Kaggle採購了我們的數據,Kaggle是一個可靠的平台,可提供各種數據集。使用Kaggle API,我們以所需的格式下載了數據,以確保圖像和相應的分割掩碼很容易用於進一步處理。

>

2。數據提取和清潔

下載數據集後,我們執行了以下步驟:>
  • >解壓縮和清潔:從下載的zip文件中提取數據,並刪除不必要的文件以節省磁盤空間。
  • ID提取:提取圖像和口罩的唯一標識符(ID),以確保在訓練期間正確映射。
  • >
  • >刪除不必要的文件:刪除任何嘈雜或無關的文件,例如具有已知問題的某些圖像,以維護數據集的完整性。

3。轉換為可用格式

由於SAM2模型需要以特定格式的輸入,因此我們將數據轉換為以下內容:>

    > diCom到numpy:讀取DICOM圖像並將其存儲為Numpy陣列,然後將其調整為512x512像素的標準尺寸。 nrrd to numpy for masks:類似地,處理了包含肺,心臟和氣管掩模的NRRD文件,並作為Numpy數組保存並保存。然後對這些掩碼進行重塑以匹配相應的圖像。
  • >轉換為JPG/PNG:為了更好地可視化和兼容性,將Numpy陣列轉換為JPG/PNG格式。此步驟包括標準化圖像強度值並確保正確定向掩模。
  • 4。保存和組織數據
  • 然後將處理後的圖像和掩碼組織到各自的文件夾中,以便在微調過程中訪問。此外,這些圖像和口罩的路徑被寫入CSV文件(Train.CSV),以促進培​​訓期間的數據加載。
5。可視化和驗證

>最後一步涉及驗證數據集以確保其準確性:>

可視化:我們通過覆蓋圖像上的掩碼來可視化圖像面罩對。這有助於我們檢查口罩的一致性和準確性。

>

檢查:通過檢查一些樣本,我們可以確認數據集已正確準備並準備好進行微調。

    這是一本快速筆記本,可以帶您瀏覽數據集創建的代碼。您可以瀏覽此數據創建路徑,也可以直接使用與先決條件中提到的格式相同格式的任何數據集。
  • >
  • 微調SAM2
  • 段的任何模型2都包含幾個組件,但是在這裡進行微調的捕獲是僅訓練輕質組件,例如蒙版解碼器和提示編碼器,而不是整個模型。微調該模型的步驟如下:

步驟1:安裝SAM-2

>要啟動微調過程,我們需要安裝SAM-2庫,這對於任何模型(SAM2)至關重要。該模型旨在有效地處理各種細分任務。該安裝涉及從GitHub克隆SAM-2存儲庫並安裝必要的依賴項。

此代碼段確保已正確安裝SAM2庫並準備在我們的微調工作流程中使用。 >

>步驟2:下載數據集

>安裝了SAM-2庫後,下一步是獲取我們將用於微調的數據集。我們使用Kaggle上可用的數據集,特別是胸部CT分割數據集,其中包含肺,心臟和氣管的掩模。

數據集包含:

    images.zip:rgb格式的圖像
  • > masks.zip:RGB格式的分割蒙版
  • > train.csv:帶有圖像名稱的CSV文件

自定義數據集上的微調SAM 2:教程 來自CT掃描數據集的圖像

在此博客中,我們將僅使用肺部的圖像和蒙版進行細分。 Kaggle API允許我們將數據集直接下載到我們的環境中。我們首先將kaggle.json文件從kaggle上傳到可輕鬆訪問任何數據集。

>

要獲取kaggle.json,請轉到用戶配置文件下的“設置”選項卡,然後選擇“創建新令牌”。這將觸發Kaggle下載。 json,一個包含您API憑據的文件。

>

解壓縮數據:

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .

>準備好數據集後,讓我們開始微調過程。正如我之前提到的,這裡的關鍵是僅對SAM2的輕量級組件進行微調,例如蒙版解碼器和提示編碼器,而不是整個模型。這種方法效率更高,需要更少的資源。

# 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檢查點

>在微調過程中,我們需要從預先訓練的SAM2模型權重開始。這些稱為“檢查點”的權重是進行進一步訓練的起點。檢查點已經在各種圖像上進行了培訓,並且通過在我們的特定數據集中進行微調,我們可以在目標任務上實現更好的性能。

在此步驟中,我們下載了與不同型號大小相對應的各種SAM-2檢查點(例如Tiny,Small,Base_plus,大)。可以根據可用的計算資源和手頭的特定任務來調整檢查點的選擇。

步驟4:數據準備
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation

>下載數據集後,下一步是為培訓做準備。這涉及將數據集分配到培訓和測試集中,並創建可以在微調過程中饋入SAM 2模型的數據結構。

>

>我們將數據集分為訓練集(80%)和測試集(20%),以確保我們可以在培訓後評估模型的性能。培訓數據將用於微調SAM 2模型,而測試數據將用於推理和評估。

將數據集拆分為培訓和測試集後,下一步涉及創建二進制掩碼,選擇這些掩碼中的要點,並可視化這些元素以確保正確處理數據。 

1。讀取和調整圖像:該過程首先從數據集中隨機選擇圖像及其相應的掩碼。圖像從BGR轉換為RGB格式,這是大多數深度學習模型的標準顏色格式。相應的註釋(掩碼)以灰度模式讀取。然後,將圖像和註釋掩碼調整為1024像素的最大尺寸,保持縱橫比以確保數據擬合在模型的輸入要求中並減少計算負載。

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .
2。分割掩碼的二進化:多類註釋掩碼(可能具有帶有不同像素值的多個對像類)被轉換為二進制掩碼。此掩蓋突出顯示了圖像中所有感興趣的區域,將分割任務簡化為二進制分類問題:對象與背景。然後使用5x5內核侵蝕二進制蒙版。

侵蝕會稍微降低面具的大小,這有助於避免選擇點時的邊界效應。這樣可以確保選定的點很好地在對象的內部內而不是其邊緣旁邊,這可能是嘈雜的或模棱兩可的。

>

關鍵點是從侵蝕的掩碼中選擇的。這些觀點在微調過程中充當提示,指導模型將注意力集中在哪裡。這些點是從對象內部隨機選擇的,以確保它們具有代表性,並且不受嘈雜邊界的影響。

3。可視化:此步驟對於驗證數據預處理步驟是否正確執行至關重要。通過視覺檢查二進制面膜上的要點,您可以確保模型在培訓期間會收到適當的輸入。最後,對二進制掩碼進行了重塑並正確格式化(具有適合模型輸入的尺寸),並且該點也被重塑以在訓練過程中進一步使用。該函數返回已處理的圖像,二進制掩碼,選定點以及找到的掩碼數量。

# 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

原始圖像,二進制掩碼和帶有數據集的點的二進制掩碼。

自定義數據集上的微調SAM 2:教程步驟5:對SAM2模型進行微調

SAM2模型進行微調涉及多個步驟,包括加載模型,設置優化器和調度程序,並根據培訓數據迭代更新模型權重。

>加載模型檢查點:

我們首先使用預訓練的檢查點構建SAM2模型。然後將模型包裹在預測器類中,該類簡化了設置圖像,編碼提示和解碼蒙版的過程。

配置超參數

>我們配置了幾個超參數,以確保模型有效地學習,例如學習率,權重衰減和梯度積累步驟。這些超參數控制學習過程,包括模型更新其權重的速度以及如何避免過度擬合。隨時可以玩這些。

!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .

>優化器負責更新模型權重,而調度程序則調整訓練期間的學習率以改善收斂性。通過微調這些參數,我們可以實現更好的分割精度。

開始訓練

實際的微調過程是迭代的,在每個步驟中,僅通過模型傳遞了一批肺部圖像和掩模,並且計算損失並用於更新模型權重。

在每次迭代期間,模型會處理一批圖像,計算分割掩碼,並將它們與地面真相進行比較以計算損失。然後使用此損失來調整模型權重,從而逐漸提高模型的性能。訓練約3000個時期後,我們獲得了約72%的準確性(IOU - 交叉點)。

>步驟6:使用微型模型
# 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助手函數開始,以獲取推理圖像及其掩碼以及關鍵點。

然後,加載您要推斷的樣本圖像,以及新調整的權重,並執行推理設置torch.no_grad()。

在此步驟中,我們使用微型模型來生成用於測試圖像的分割掩碼。然後,將預測的面膜與原始圖像和地面真相面具一起進行可視化,以評估模型的性能。

!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"
結論

>微調SAM2提供了一種實用方法來增強其特定任務的功能。無論您是從事醫學成像,自動駕駛汽車還是視頻編輯,微調都可以讓您使用SAM2來滿足您的獨特需求。通過遵循本指南,您可以調整SAM2的項目並獲得最新的細分結果。

對於更高級的用例,請考慮對SAM2的其他組件進行微調,例如圖像編碼器。儘管這需要更多的資源,但它提供了更大的靈活性和改進的性能。 自定義數據集上的微調SAM 2:教程>

賺取頂級AI認證

證明您可以有效,負責任地使用AI.獲得認證,獲得錄用

以上是自定義數據集上的微調SAM 2:教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn