【E資格不合格から学ぶ】Vision Transformer のポイントを解説!

  • 「Vision Transformer」について学びたいけど理解できるか不安・・・
  • 「Vision Transformer」についてどこから学んでいいか分からない?
  • 「Vision Transformer」を体系的に教えて!

 「Vision Transformer」は言語処理用に開発されたTransformerを分類タスクに応用したモデルですが、難しそうで何から学んだらよいか分からず、勉強のやる気を失うケースは非常に多いです。

 私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。

 そこでこの記事では、「Vision Transformer」のポイントについて解説します。

 この記事を参考に「Vision Transformer」のポイントを理解できれば、E資格に合格できるはずです。

<<「Vision Transformer」の学習のポイントを今すぐ知りたい方はこちら

目次

1.Vision Transformer(ViT)の概要

概要
  • 画像特徴量の入力方法・・・画像の”トークン”系列化
    1.画像をパッチに分割し系列化・・・N個の画像パッチで構成される系列
    2.パッチごとにFlatten化・・・”トークン(単語)”化→これを入力値に使用
  • ViTの構造・・・Transformer Encoderを使用
    Transformer Encoderへの入力値の準備
    Transformer Encoder・・・言語処理向けのオリジナルと同等の構造
    MLP Head・・・「CLS」Token系列値の出力特徴量から分類結果を出力
  • 事前学習とファインチューニング
    1.大規模なデータセットでの事前学習
    2.ファインチューニング・・・事前学習より高解像度な画像を入力

2.ViTの画像特徴量の処理

ViTの画像特徴量の処理
  1. 入力画像をパッチに分割する
  2. パッチごとにFlatten処理を行い、”トークン”系列を得る
  3. Embedding表現(埋込表現)に変換する
  4. CLS Tokenを系列データの最初に付加する
  5. Position Embedding(パッチの位置)を付加する

3.ViTの構造

Vitの計算過程

Vitの計算過程
  1. 画像x∈RH×W×C(高さH、幅C、チャンネルC)を、縦幅がPのパッチで分割した画像はx∈RN×(P2・C) (N=HW/P2はパッチ数)
  2. パッチ画像をD次元の特徴量Z0に変換しTransformer Encoderに入力
    Z0=[Xclass;X1PE;X2PE;…;XNPE]+Epos
  3. Transformer EncoderはL回(L層)重ね、ℓ層目について、
    Layer NormをLN MultiーHead self attentionをMSAとし、
    Z’=MSA(LN(Zℓー1))+Zℓ-1 (ℓ=1…L)
    Z=MLP(LN(Z’))+Z’   (ℓ=1…L)
  4. Transformer Encoderの最終層では[CLS]トークに当たる特徴量を出力
    y=LN(Z0L)
  5. このyをMLP Headに入力し、最終的な分類結果を得る。

4.事前学習とファインチューニング

事前学習
  • Vitの事前学習は教師ラベル付きの大規模なデータセットで行われる
  • 事前学習の手順
    事前学習時にはMLP Headを出力層に使用
    ファインチューニングにより低解像度の画像を使用
ファインチューニング
  • 分類クラスの変更
    Transformer EncoderはD次元の特徴量出力を行う
    MLP HeadでD次元をKクラスへ変換する
    ファインチューニング時にはMLP HeadをLinear層に取り換え
  • 入力解像度の変更
    バッチサイズは変更せず、入力時のPosition Embeddingを付替え
    事前学習よりファインチューニングでは高解像度の画像を使用

3.まとめ

【Vision Transformer(ViT)の特徴】
  • Vision Transformer(ViT)
    言語処理に用いられるTransformerを用いた、画像分類タスク用のモデル
  • データ表現と入力
    ・画像をバッチに分割し、バッチごとの特徴量を系列データとしてTransformerに入力する。
    ・バッチ毎の特徴量は、ピクセル幅をFlatten処理・Embedding処理(埋め込み)→Position Embedding情報を加味
    ・入力系列の1番目に、分類タスク用に「CLS」トークンを連結して入力。→入力系列の長さ=バッチ数+1
  • 構造
    ・言語処理におけるTransformer Encoderとほぼ同様の構造である。(系列データを入力)
    ・エンコーダー部分からの出力における1トークン目の特徴量をMLP Headに入力し、最終的な分類結果を出力する。
    ・モデルサイズの違いにより、Base/Large/Hugeの3つが存在する。
  • 事前学習とファインチューニング
    ・事前学習は、教師ラベル付きの巨大データセットで行われ、性能がデータセット規模の影響を受ける。
    ・ファインチューニングでは、MLP Head部分を取り換えることで、分類タスクにおけるクラス数の違いに対応できる。
    ・ファインチューニングで、事前学習より高い解像度の画像に、Position Embeddingの変更のみで対応できる。
  • 性能とその評価
    ・事前学習のデータセットが大規模な場合、既存手法より高性能
    ・事前学習のデータセットが小規模な場合、既存手法(CNN)より低性能
    ・同計算量において、既存手法より高性能。大計算領域において性能向上が期待できる

最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次