カスタムデータセットを使用したセマンティックセグメンテーションのためのSegFormerのファインチューニング

Hugging Faceは、最先端のセマンティックセグメンテーションモデルであるSegFormerを、カスタム画像データセットを扱うためにファインチューニングするためのワークフローを詳細に説明しています。このプロセスにより、事前学習済みウェイトとHugging Faceエコシステムを活用して、ピザ配達ロボットが歩道を認識するためのモデルなど、特化したモデルの作成が可能になります。

SegFormerとセマンティックセグメンテーションの理解

セマンティックセグメンテーションは、画像内の個々のピクセルを分類するプロセスであり、標準的な画像分類よりも詳細なレベルの情報を取得できます。この能力は、医療画像や自動運転のように、正確な境界検出(例:歩道の正確な端を特定する)が必要とされるアプリケーションにおいて極めて重要です。

SegFormerは、2021年にXie et al.によって導入され、従来の畳み込みニューラルネットワーク(CNN)やVision Transformer(ViT)のアプローチを改善しています。そのアーキテクチャは以下で構成されています:

  • 階層型Transformerエンコーダー: ViTとは異なり、SegFormerは位置エンコーディングを使用しません。
  • シンプルなMLPデコーダー: エンコーダーの出力を処理する多層パーセプトロンデコーダーです。

データ準備と拡張

効果的なセマンティックセグメンテーションには、正確なセグメンテーションマップを持つデータセットが必要です。ADE20k、CityScapes、またはBDD100Kのような一般的なデータセットは存在しますが、分布の不一致を避けるためにドメイン固有のデータが必要になることがよくあります。例えば、歩道で動作するロボットには、車の視点ではなく歩道の視点からキャプチャされたデータが必要です。

データセットの読み込みと処理

datasetsライブラリを使用すると、カスタムデータセット(例:segments/sidewalk-semantic)を読み込み、トレーニングセットとテストセットに分割できます。モデルが正しい形式でデータを受け取ることを確実にするために、SegFormerImageProcessorが使用されます。

オンザフライ変換

ディスク容量とトレーニング速度を最適化するために、Hugging Faceはset_transformを介した変換の使用を推奨しています。これは、データセット全体を事前に前処理するのではなく、オンザフライでデータのバッチを準備します。照明条件の変化に対するモデルの回復力を高めるために、torchvision.transforms.ColorJitterがトレーニングパイプラインに統合され、明るさ、コントラスト、彩度、色相をランダムに調整します。

ファインチューニングのワークフロー

モデルの選択

SegFormerは5つのモデルサイズ(B0からB5)を提供しています。エッジデバイスへのデプロイ(例:配達ロボット)の場合、その小さなフットプリント(約14MB)と効率性から、B0モデルが推奨されます。ファインチューニングのプロセスは、通常、ImageNet-1kで事前学習されたモデル(nvidia/mit-b0)から始まります。

トレーニング構成

ファインチューニングは、Hugging FaceのTrainer APIを通じて管理されます。主な構成パラメータは以下の通りです:

  • ハイパーパラメータ: 学習率(例:0.00006)およびエポック数(例:50)。
  • 評価指標: mean Intersection over Union (mIoU) が、予測されたセグメンテーションマスクとグランドトゥルースの重なり具合を測定するために使用されます。
  • ロジットのアップスケーリング: SegFormerは元の画像解像度の1/4の解像度(高さ/4、幅/4)でロジットを出力するため、mIoUを計算する前に、バイリニア補間を使用してラベルのサイズに合わせてロジットをアップスケールする必要があります。

推論とデプロイ

ファインチューニングが完了すると、モデルと画像プロセッサはHugging Face Hubにプッシュできます。これにより、簡単に共有が可能になり、ホストされた推論APIを介してリアルタイムテストを行うための推論ウィジェットの作成が可能になります。

推論の実行

新しい画像に対して推論を行うには、以下の手順が必要です:

  1. 前処理: SegformerImageProcessorを使用して画像を処理します。
  2. フォワードパス: 処理された画像をモデルに通してロジットを取得します。
  3. リスケーリング: nn.functional.interpolateを使用して、ロジットを元の画像寸法にアップサンプルします。
  4. 予測: クラス次元に対してargmax操作を適用して、最終的なピクセルレベルのカテゴリ予測を決定します。

Sources

関連