ホームページ >テクノロジー周辺機器 >AI >カスタムデータセットでSAM 2を微調整します:チュートリアル

カスタムデータセットでSAM 2を微調整します:チュートリアル

Jennifer Aniston
Jennifer Anistonオリジナル
2025-03-04 09:26:13884ブラウズ

メタのセグメントAnything Model 2(SAM 2)は、セグメンテーションテクノロジーの最新のイノベーションです。これは、画像とビデオの両方でオブジェクトをリアルタイムでセグメント化できるメタの最初の統一モデルです。

しかし、なぜサム2がすでに何かをセグメント化できるのになぜ微調整しますか?

SAM 2はすぐに行われていますが、レアまたはドメイン固有のタスクでのパフォーマンスは常に期待を満たすとは限りません。微調整により、SAM2を特定のニーズに合わせて適応させることができ、特定のユースケースの正確性と効率を向上させることができます。 この記事では、SAM 2の微調整プロセスを段階的に紹介します。

sam2?

SAM2は、メタによって開発された基礎モデルで、画像やビデオで迅速な視覚セグメンテーションです。主に静的画像に焦点を当てた前任者であるSAMとは異なり、SAM2はビデオセグメンテーションの複雑さも処理するように設計されています。

sam2-タスク、モデル、およびデータ(出典:Ravi et al。、2024)

カスタムデータセットでSAM 2を微調整します:チュートリアルストリーミングメモリを備えたトランスアーキテクチャを使用して、リアルタイムのビデオ処理を可能にします。 Sam 2のトレーニングには、51,000本のビデオにまたがる600,000を超えるマスクレットアノテーションを含む、小説SA-Vデータセットを備えた広大で多様なデータセットが含まれていました。 インタラクティブなデータ収集とモデルの改善を可能にするデータエンジンは、モデルに可能なものをセグメント化する機能をモデルに与えます。このエンジンにより、Sam 2は継続的に学習および適応することができ、新しい挑戦的なデータの取り扱いにより効率的になります。ただし、ドメイン固有のタスクまたはまれなオブジェクトの場合、最適なパフォーマンスを実現するには微調整が不可欠です。

なぜSAM2を微調整しますか?

SAM 2のコンテキストでは、微調整は、特定のタスクまたはドメインのパフォーマンスを強化するために、特定のデータセットで事前に訓練されたSAM 2モデルをさらにトレーニングするプロセスです。 SAM 2は、広範囲で多様なデータセットで訓練された強力なツールですが、その汎用性の性質は、特殊なタスクまたは希少タスクに対して常に最適な結果をもたらすとは限りません。 たとえば、特定の腫瘍タイプの特定を必要とする医療画像プロジェクトに取り組んでいる場合、モデルのパフォーマンスは一般化されたトレーニングのために不足する可能性があります。

微調整プロセス

微調整sam 2は、モデルを特定のデータセットに適応させることにより、この制限に対処します。このプロセスにより、モデルの精度が向上し、独自のユースケースに対してより効果的になります。

ここに微調整されたSAM 2:

の重要な利点があります

  1. 精度の向上:特定のデータセットでモデルを微調整することにより、その精度を大幅に向上させ、ターゲットアプリケーションのパフォーマンスを向上させることができます。
  2. 特殊なセグメンテーション:微調整により、モデルは特定のオブジェクトタイプ、視覚スタイル、またはプロジェクトに関連する環境のセグメント化に熟達し、汎用モデルが達成できないテーラード結果を提供することができます。
  3. 効率:微調整は、モデルをゼロからトレーニングするよりも効率的です。通常、データと時間が少ないため、モデルを迅速に新しいタスクまたはニッチタスクに迅速に適応させるための実用的なソリューションになります。
  4. 微調整SAM 2:前提条件
  5. を始めましょう
SAM 2を微調整するには、次の前提条件を設定する必要があります。

SAM 2モデルとコードベースへのアクセス:SAM 2モデルとそのコードベースにアクセスできます。メタのGitHubリポジトリから事前に訓練されたSAM 2モデルをダウンロードできます。

適切なデータセット:グラウンドトゥルースセグメンテーションマスクを含むデータセットが必要です。このチュートリアルでは、胸CTセグメンテーションデータセットを使用します。これは、トレーニングの準備と準備ができます。

計算リソース:微調整sam 2には、十分な計算能力を備えたハードウェアが必要です。特に大規模なデータセットまたは複雑なモデルを操作する場合、プロセスが効率的で管理可能であることを確認するために、GPUを強くお勧めします。この例では、Google ColabでA100 GPUが使用されています。
  1. ソフトウェアおよびその他の要件:
  2. python 3.11以降
  3. pytorch

opencv:opencv-pythonをインストールするpipを使用してインストールします

SAM 2を微調整するためのデータセットの準備
    データセットの品質は、SAM 2モデルを微調整するために重要です。正確なセグメンテーションマスクを備えた高品質の注釈付き画像またはビデオは、最適なパフォーマンスを実現するために不可欠です。正確な注釈により、モデルは正しい機能を学習し、現実世界のアプリケーションでセグメンテーションの精度と堅牢性を向上させることができます。
  • 1。データ収集
  • 最初のステップには、トレーニングプロセスのバックボーンを形成するデータセットの取得が含まれます。データセットの多様な範囲を提供する信頼できるプラットフォームであるKaggleからデータを調達しました。 Kaggle APIを使用して、必要な形式でデータをダウンロードし、画像と対応するセグメンテーションマスクがさらに処理できるようにしました。
  • 2。データ抽出とクリーニング
  • データセットをダウンロードした後、次の手順を実行しました
    • 解凍とクリーニング:ダウンロードしたzipファイルからデータを抽出し、ディスク容量を保存するために不要なファイルを削除します。
    • ID抽出:画像とマスクの一意の識別子(ID)が抽出され、トレーニング中にそれらの間の正しいマッピングを確保します。 不要なファイルの削除:データセットの整合性を維持するために、既知の問題を抱える特定の画像などのノイズの多いファイルや無関係なファイルを削除します。
    • 3。使用可能な形式への変換
    • SAM2モデルは特定の形式で入力を必要とするため、次のようにデータを変換しました。

    dicomからnumpy:diCom画像は読み取り、numpyアレイとして保存され、512x512ピクセルの標準次元にサイズ変更されました。 マスクのnumpyからnrrd:同様に、肺、心臓、および気管のマスクを含むNRDファイルを処理し、numpyアレイとして保存しました。これらのマスクは、対応する画像に一致するように再形成されました。 JPG/PNGへの変換:視覚化と互換性を向上させるために、numpyアレイはJPG/PNG形式に変換されました。このステップには、画像の強度値の正規化とマスクが正しく方向付けられていることを確認しました。

    4。データの保存と整理

      処理された画像とマスクは、微調整プロセス中に簡単にアクセスできるように、それぞれのフォルダーに編成されます。さらに、これらの画像とマスクへのパスは、トレーニング中のデータの読み込みを容易にするためにCSVファイル(Train.CSV)に書き込まれます。
    • 5。視覚化と検証
    • 最終的なステップには、データセットの検証を行い、その精度を確保することが含まれていました。
    • 視覚化:画像上のマスクをオーバーレイすることにより、画像マスクペアを視覚化しました。これにより、マスクのアライメントと精度を確認するのに役立ちました。
    • 検査:いくつかのサンプルを検査することにより、データセットが正しく準備され、微調整で使用できることを確認できました。

    ここに、データセット作成のためのコードを使用するための簡単なノートブックがあります。このデータ作成パスを通過するか、前提条件に記載されているものと同じ形式でオンラインで利用可能なデータセットを直接使用できます。

    微調整sam2

    セグメントモデル2にはいくつかのコンポーネントが含まれていますが、ここでのキャッチは、モデル全体ではなく、マスクデコーダーやプロンプトエンコーダーなどの軽量コンポーネントのみをトレーニングすることです。このモデルを微調整するための手順は次のとおりです

    ステップ1:SAM-2

    をインストールします

    微調整プロセスを開始するには、SAM-2ライブラリをインストールする必要があります。このモデルは、さまざまなセグメンテーションタスクを効果的に処理するように設計されています。インストールには、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資格情報を含むファイル

      データを解凍します:

      データセットの準備ができたら、微調整プロセスを始めましょう。前述したように、ここで重要なのは、モデル全体ではなく、マスクデコーダーやプロンプトエンコーダーなど、SAM2の軽量コンポーネントのみを微調整することです。このアプローチはより効率的であり、必要なリソースが少なくなります。
!git clone https://github.com/facebookresearch/segment-anything-2
%cd /content/segment-anything-2
!pip install -q -e .

ステップ3:SAM-2チェックポイントをダウンロード

# 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
微調整プロセスでは、事前に訓練されたSAM2モデルの重みから始める必要があります。 「チェックポイント」と呼ばれるこれらの重みは、さらなるトレーニングの出発点です。チェックポイントは幅広い画像でトレーニングされており、特定のデータセットでそれらを微調整することにより、ターゲットタスクでより良いパフォーマンスを実現できます。

このステップでは、さまざまなモデルサイズ(たとえば、小さな、小、base_plus、大)に対応するさまざまなSAM-2チェックポイントをダウンロードします。チェックポイントの選択は、利用可能な計算リソースと手元の特定のタスクに基づいて調整できます。

ステップ4:データの準備

データセットがダウンロードされた場合、次のステップはトレーニングの準備をすることです。これには、データセットをトレーニングとテストセットに分割し、微調整中にSAM 2モデルに供給できるデータ構造の作成が含まれます。

データセットをトレーニングセット(80%)とテストセット(20%)に分割して、トレーニング後にモデルのパフォーマンスを評価できるようにします。トレーニングデータは、SAM 2モデルの微調整に使用され、テストデータは推論と評価に使用されます。
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
データセットをトレーニングセットとテストセットに分割した後、次のステップでは、バイナリマスクの作成、これらのマスク内のキーポイントの選択、およびこれらの要素を視覚化してデータが正しく処理されるようにすることが含まれます。 

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

データセットのポイントを備えたオリジナルの画像、バイナリングされたマスク、および二等式のマスク。

ステップ5:SAM2モデルを微調整します

カスタムデータセットでSAM 2を微調整します:チュートリアルSAM2モデルの微調整には、モデルのロード、オプティマイザーとスケジューラのセットアップ、トレーニングデータに基づいてモデルの重みを繰り返し更新するなど、いくつかのステップが含まれます。

モデルチェックポイントをロードします:

事前に訓練されたチェックポイントを使用してSAM2モデルを構築することから始めます。その後、モデルは予測因子クラスに包まれ、画像の設定、プロンプトのエンコード、マスクの解読のプロセスが簡素化されます。

HyperParametersを構成

学習率、体重減衰、勾配蓄積の手順など、モデルが効果的に学習するように、いくつかのハイパーパラメーターを構成します。これらのハイパーパラメーターは、モデルが重みを更新する速さと過剰適合を回避する方法など、学習プロセスを制御します。これらを自由にプレイしてください。

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

オプティマイザーはモデルの重みを更新する責任がありますが、スケジューラはトレーニング中に学習率を調整して収束を改善します。これらのパラメーターを微調整することにより、セグメンテーションの精度を向上させることができます。

トレーニングを開始

実際の微調整プロセスは反復的であり、各ステップでは、肺の画像とマスクのバッチがモデルにのみ渡され、損失が計算され、モデルの重みの更新に使用されます。

各反復中に、モデルは画像のバッチを処理し、セグメンテーションマスクを計算し、それらをグラウンドトゥルースと比較して損失を計算します。この損失は、モデルの重みを調整するために使用され、モデルのパフォーマンスを徐々に改善します。約3000のエポックのトレーニングの後、約72%の正確さ(IOU -交差点)が得られます。
# 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
ステップ6:微調整されたモデルとの推論

その後、モデルは推論に使用できます。この場合、新しい目に見えない画像のセグメンテーションマスクを予測します。 read_imagesとget_pointsヘルパーが機能して、キーポイントとともに推論画像とそのマスクを取得する。

次に、新たに微調整されたウェイトとともに、推論に必要なサンプル画像をロードし、Inference setting 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をプロジェクトに適応させ、最先端のセグメンテーション結果を達成できます。 カスタムデータセットでSAM 2を微調整します:チュートリアルより高度なユースケースについては、画像エンコーダなどのSAM2の追加コンポーネントを微調整することを検討してください。これにはより多くのリソースが必要ですが、柔軟性とパフォーマンスの改善が向上します。

以上がカスタムデータセットでSAM 2を微調整します:チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。