Hugging Face Transformersを使用した画像分類のためのVision Transformer (ViT) のファインチューニング

概要

Hugging Faceは、画像分類タスクのためにVision Transformer (ViT) をファインチューニングするためのワークフローを詳細に説明しています。画像パッチをトークンとして扱うことで(自然言語処理 (NLP) における単語の扱いに似ています)、ViTはトランスフォーマーベースのアーキテクチャをコンピュータビジョンに適用することを可能にします。このプロセスには、画像をサブイメージパッチのグリッドに分割し、各パッチを線形投影で埋め込み、生成されたトークンシーケンスをトランスフォーマーモデルに渡すことが含まれます。

ViTImageProcessorによる画像のプリプロセッシング

正しい画像の変換は、ViTモデルのパフォーマンスにとって極めて重要です。なぜなら、モデルは入力が元のトレーニング中に使用された特定の正規化およびリサイズパラメータに従うことを期待しているからです。

一貫性を確保するために、ViTImageProcessorを使用して、事前学習済みモデル(google/vit-base-patch16-224-in21kなど)から設定をロードします。プロセッサは以下の操作を処理します:

  • リサイズ: 画像を標準サイズ(例:224x224ピクセル)に調整します。
  • 正規化: ピクセルデータに特定の平均値と標準偏差を適用します。
  • リサンプリング: 画像がモデル用に正しくサンプリングされるようにします。

このツールを通じて画像を処理すると、モデルが必要とする数値テンソル表現であるpixel_valuesを含む辞書が返されます。

Transformsによる効率的なデータセットの取り扱い

画像データセットを扱う際、ds.mapを介してすべての例に変換を適用することは、計算コストが高く、時間がかかる場合があります。代わりに、Hugging Faceはdatasetsライブラリのwith_transformメソッドを使用することを推奨しています。

Transformsは、データセット全体を事前処理するのではなく、例がインデックス付けされる際にリアルタイムで適用されます。このアプローチには、データのバッチを処理し、関連付けられたラベルを保持しながら、PIL画像のリストを必要なpixel_valuesテンソルに変換できる変換関数が必要です。

ファインチューニング・パイプラインと設定

ViTモデルをファインチューニングするには、モデルが収束し、正しく評価されることを確実にするために、いくつかの主要なコンポーネントが含まれます:

データ・コレーションとメトリクス

バッチが辞書のリストとして提供されるため、pixel_valueslabelsをtorchテンソルにスタックするために、カスタムのcollate_fnが必要です。評価のために、evaluateライブラリのaccuracyメトリクスが通常、モデルの予測クラス(np.argmaxによる予測値の決定)を正解ラベルと比較するために使用されます。

モデルの初期化

特定のタスクに適応させるために、事前学習済みViTを使用する場合、ViTForImageClassificationが使用されます。モデルは、num_labelsを使用して、正しい出力ユニット数を持つ分類ヘッドを作成するために初期化されます。

さらに、id2labelおよびlabel2idのマッピングが提供され、Hugging Face Hubにホストされた際にモデルの出力が人間にとって読みやすいものになるようにします。

学習用引数

TrainingArgumentsにおける主要な設定は以下の通りです:

  • remove_unused_columns=False: これは極めて重要です。デフォルトでは、トレーナーはモデルのフォワードパスで使用されない列を削除します。しかし、image列は変換関数がpixel_valuesを作成するために必要であるため、保持する必要があります。
  • fp16=True: メモリ使用量を削減し、学習速度を向上させるために、混合精度トレーニングを有効にします。
  • evaluation_strategy="settings": 学習プロセス中に定期的な評価を可能にします。

パフォーマンス結果

beansデータセット(健康な豆の葉と不健康な豆の葉を分類するもの)を使用した提供された例では、ファインチューニングされたViTモデルは、4エポックの学習後に、評価精度が0.985、評価損失が0.0637を達成しました。

Sources

関連

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch