ホームページ >テクノロジー周辺機器 >AI >カスタムデータセットでSAM 2を微調整します:チュートリアル
メタのセグメントAnything Model 2(SAM 2)は、セグメンテーションテクノロジーの最新のイノベーションです。これは、画像とビデオの両方でオブジェクトをリアルタイムでセグメント化できるメタの最初の統一モデルです。
しかし、なぜサム2がすでに何かをセグメント化できるのになぜ微調整しますか?SAM 2はすぐに行われていますが、レアまたはドメイン固有のタスクでのパフォーマンスは常に期待を満たすとは限りません。微調整により、SAM2を特定のニーズに合わせて適応させることができ、特定のユースケースの正確性と効率を向上させることができます。 この記事では、SAM 2の微調整プロセスを段階的に紹介します。sam2?
SAM2は、メタによって開発された基礎モデルで、画像やビデオで迅速な視覚セグメンテーションです。主に静的画像に焦点を当てた前任者であるSAMとは異なり、SAM2はビデオセグメンテーションの複雑さも処理するように設計されています。
sam2-タスク、モデル、およびデータ(出典:Ravi et al。、2024)
ストリーミングメモリを備えたトランスアーキテクチャを使用して、リアルタイムのビデオ処理を可能にします。 Sam 2のトレーニングには、51,000本のビデオにまたがる600,000を超えるマスクレットアノテーションを含む、小説SA-Vデータセットを備えた広大で多様なデータセットが含まれていました。
インタラクティブなデータ収集とモデルの改善を可能にするデータエンジンは、モデルに可能なものをセグメント化する機能をモデルに与えます。このエンジンにより、Sam 2は継続的に学習および適応することができ、新しい挑戦的なデータの取り扱いにより効率的になります。ただし、ドメイン固有のタスクまたはまれなオブジェクトの場合、最適なパフォーマンスを実現するには微調整が不可欠です。
微調整プロセス
の重要な利点があります
適切なデータセット:グラウンドトゥルースセグメンテーションマスクを含むデータセットが必要です。このチュートリアルでは、胸CTセグメンテーションデータセットを使用します。これは、トレーニングの準備と準備ができます。
計算リソース:微調整sam 2には、十分な計算能力を備えたハードウェアが必要です。特に大規模なデータセットまたは複雑なモデルを操作する場合、プロセスが効率的で管理可能であることを確認するために、GPUを強くお勧めします。この例では、Google ColabでA100 GPUが使用されています。opencv:opencv-pythonをインストールするpipを使用してインストールします
SAM 2を微調整するためのデータセットの準備4。データの保存と整理
セグメントモデル2にはいくつかのコンポーネントが含まれていますが、ここでのキャッチは、モデル全体ではなく、マスクデコーダーやプロンプトエンコーダーなどの軽量コンポーネントのみをトレーニングすることです。このモデルを微調整するための手順は次のとおりです
微調整プロセスを開始するには、SAM-2ライブラリをインストールする必要があります。このモデルは、さまざまなセグメンテーションタスクを効果的に処理するように設計されています。インストールには、GitHubからSAM-2リポジトリをクローニングし、必要な依存関係をインストールすることが含まれます。
SAM-2ライブラリがインストールされたら、次のステップは、微調整に使用するデータセットを取得することです。 Kaggleで利用可能なデータセット、特に肺、心臓、気管の画像とマスクを含む胸部CTセグメンテーションデータセットを使用します。
データセットには:が含まれます
CTスキャンデータセットからの画像
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:データの準備データセットをトレーニングセット(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モデルを微調整します
SAM2モデルの微調整には、モデルのロード、オプティマイザーとスケジューラのセットアップ、トレーニングデータに基づいてモデルの重みを繰り返し更新するなど、いくつかのステップが含まれます。
学習率、体重減衰、勾配蓄積の手順など、モデルが効果的に学習するように、いくつかのハイパーパラメーターを構成します。これらのハイパーパラメーターは、モデルが重みを更新する速さと過剰適合を回避する方法など、学習プロセスを制御します。これらを自由にプレイしてください。
!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ヘルパーが機能して、キーポイントとともに推論画像とそのマスクを取得する。
このステップでは、微調整されたモデルを使用して、テスト画像のセグメンテーションマスクを生成します。予測されたマスクは、元の画像とグラウンドトゥルースマスクと一緒に視覚化され、モデルのパフォーマンスを評価します。
!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を微調整します:チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。