Path: blob/main/transformers_doc/ja/tensorflow/semantic_segmentation.ipynb
4537 views
Semantic segmentation
セマンティック セグメンテーションでは、画像の個々のピクセルにラベルまたはクラスを割り当てます。セグメンテーションにはいくつかのタイプがありますが、セマンティック セグメンテーションの場合、同じオブジェクトの一意のインスタンス間の区別は行われません。両方のオブジェクトに同じラベルが付けられます (たとえば、car-1
とcar-2
の代わりにcar
)。セマンティック セグメンテーションの一般的な現実世界のアプリケーションには、歩行者や重要な交通情報を識別するための自動運転車のトレーニング、医療画像内の細胞と異常の識別、衛星画像からの環境変化の監視などが含まれます。
このガイドでは、次の方法を説明します。
SceneParse150 データセットの SegFormer を微調整します。
微調整したモデルを推論に使用します。
このタスクと互換性のあるすべてのアーキテクチャとチェックポイントを確認するには、タスクページ を確認することをお勧めします。
始める前に、必要なライブラリがすべてインストールされていることを確認してください。
モデルをアップロードしてコミュニティと共有できるように、Hugging Face アカウントにログインすることをお勧めします。プロンプトが表示されたら、トークンを入力してログインします。
Load SceneParse150 dataset
まず、SceneParse150 データセットの小さいサブセットを 🤗 データセット ライブラリから読み込みます。これにより、完全なデータセットのトレーニングにさらに時間を費やす前に、実験してすべてが機能することを確認する機会が得られます。
train_test_split
メソッドを使用して、データセットの train
分割をトレイン セットとテスト セットに分割します。
次に、例を見てみましょう。
image
: シーンの PIL イメージ。annotation
: セグメンテーション マップの PIL イメージ。モデルのターゲットでもあります。scene_category
: "kitchen"や"office"などの画像シーンを説明するカテゴリ ID。このガイドでは、image
とannotation
のみが必要になります。どちらも PIL イメージです。
また、ラベル ID をラベル クラスにマップする辞書を作成することもできます。これは、後でモデルを設定するときに役立ちます。ハブからマッピングをダウンロードし、id2label
および label2id
ディクショナリを作成します。
Preprocess
次のステップでは、SegFormer 画像プロセッサをロードして、モデルの画像と注釈を準備します。このデータセットのような一部のデータセットは、バックグラウンド クラスとしてゼロインデックスを使用します。ただし、実際には背景クラスは 150 個のクラスに含まれていないため、do_reduce_labels=True
を設定してすべてのラベルから 1 つを引く必要があります。ゼロインデックスは 255
に置き換えられるため、SegFormer の損失関数によって無視されます。
モデルを過学習に対してより堅牢にするために、画像データセットにいくつかのデータ拡張を適用するのが一般的です。 このガイドでは、tf.image
を使用して画像の色のプロパティをランダムに変更しますが、任意のプロパティを使用することもできます。画像 好きな図書館。 2 つの別々の変換関数を定義します。
画像拡張を含むトレーニング データ変換
🤗 Transformers のコンピューター ビジョン モデルはチャネル優先のレイアウトを想定しているため、画像を転置するだけの検証データ変換
次に、モデルの画像と注釈のバッチを準備する 2 つの前処理関数を作成します。これらの機能が適用されます 画像変換を行い、以前にロードされた image_processor
を使用して画像を pixel_values
に変換し、 labels
への注釈。 ImageProcessor
は、画像のサイズ変更と正規化も処理します。
データセット全体に前処理変換を適用するには、🤗 Datasets set_transform
関数を使用します。 変換はオンザフライで適用されるため、高速で消費するディスク容量が少なくなります。
Evaluate
トレーニング中にメトリクスを含めると、多くの場合、モデルのパフォーマンスを評価するのに役立ちます。 🤗 Evaluate ライブラリを使用して、評価メソッドをすばやくロードできます。このタスクでは、Mean Intersection over Union (IoU) メトリックをロードします (🤗 Evaluate クイック ツアー を参照して、メトリクスをロードして計算する方法の詳細を確認してください)。
次に、メトリクスを compute
する関数を作成します。予測を次のように変換する必要があります 最初にロジットを作成し、次に compute
を呼び出す前にラベルのサイズに一致するように再形成します。
これでcompute_metrics
関数の準備が整いました。トレーニングをセットアップするときにこの関数に戻ります。
Train
Keras を使用したモデルの微調整に慣れていない場合は、まず 基本チュートリアル を確認してください。
TensorFlow でモデルを微調整するには、次の手順に従います。
トレーニングのハイパーパラメータを定義し、オプティマイザーと学習率スケジュールを設定します。
事前トレーニングされたモデルをインスタンス化します。
🤗 データセットを
tf.data.Dataset
に変換します。モデルをコンパイルします。
コールバックを追加してメトリクスを計算し、モデルを 🤗 Hub にアップロードします
fit()
メソッドを使用してトレーニングを実行します。
まず、ハイパーパラメーター、オプティマイザー、学習率スケジュールを定義します。
次に、ラベル マッピングとともに TFAutoModelForSemanticSegmentation を使用して SegFormer をロードし、それをコンパイルします。 オプティマイザ。 Transformers モデルにはすべてデフォルトのタスク関連の損失関数があるため、次の場合を除き、損失関数を指定する必要はないことに注意してください。
to_tf_dataset
と DefaultDataCollator
を使用して、データセットを tf.data.Dataset
形式に変換します。
予測から精度を計算し、モデルを 🤗 ハブにプッシュするには、Keras callbacks を使用します。 compute_metrics
関数を KerasMetricCallback に渡します。 そして PushToHubCallback を使用してモデルをアップロードします。
ついに、モデルをトレーニングする準備が整いました。トレーニングおよび検証データセット、エポック数、 モデルを微調整するためのコールバック:
おめでとう!モデルを微調整し、🤗 Hub で共有しました。これで推論に使用できるようになりました。
Inference
モデルを微調整したので、それを推論に使用できるようになりました。
推論のために画像をロードします。

画像プロセッサをロードして画像を前処理し、入力を TensorFlow テンソルとして返します。
入力をモデルに渡し、logits
を返します。
次に、ロジットを元の画像サイズに再スケールし、クラス次元に argmax を適用します。
結果を視覚化するには、データセット カラー パレット を、それぞれをマップする ade_palette()
としてロードします。クラスを RGB 値に変換します。次に、画像と予測されたセグメンテーション マップを組み合わせてプロットできます。
