VisionTransformer (ViT) の詳細なアーキテクチャ図

これは元のアーキテクチャ図ですが、多くのものが欠けています。

ソースコードを元にまとめた詳細版です

ここに画像の説明を挿入します

説明が必要な点がいくつかありますが、アーキテクチャ図を見て理解できる方はコメントを読む必要はありません。

(1) 入力画像は 224x224x3 である必要があります。そうでない場合は、このサイズに拡大縮小します。

(2) Transformer が必要とするのは、一連の埋め込みベクトルです。これはおそらくSeqLen, HidSize形状の 2 次元配列です。画像はH, W, C3 次元配列です。それを挿入したい場合は、変換のステップを経る必要があります。これは埋め込みモジュールが行うことです。

簡単に言うと、16*16*3サイズ の断片 (パッチ) に切り分けられ、各断片は7681 ステップの線形マッピングによって長さ 1 次元のベクトルに変換されます。このステップは、コード内のConv2d1 パスで完了します。

畳み込み層には、16*16*3サイズ の 768 個の畳み込みカーネルが含まれており、ストライドは畳み込みカーネルのサイズに等しいです。言い換えれば、これは画像を16*16*3セグメントに分割し、各セグメントと各コンボリューション カーネルを乗算し、合計して値を取得することと同じです。各フラグメントは合計 768 個の値を生成し、それらを順番に並べて、その埋め込みベクトルである 1 次元ベクトルを取得します。次に、すべてのフラグメントの埋め込みベクトルを順番に並べて、画像全体の埋め込みシーケンスを取得します。 。

(3) シーケンスの先頭に特殊な埋め込みベクトルが追加されますが、<CLS>この埋め込みベクトルにはそれ以外の意味はなく、出力位置の埋め込みを表すだけであり、画像全体のカテゴリ埋め込みとして計算する必要があります。

(4) 位置の埋め込みはエンコードではなく後で追加されます。これは学習可能であるため、つまり、勾配がロックされていないためです。多くの Transformer は勾配ロックされているため、位置埋め込みです。

(5) 位置埋め込み後にドロップアウト層が存在しますが、これは論文の元の画像には存在せず、多くの Bert または GPT バリアントにはこれが存在すると思われます。

(6) 12 TF ブロックの後、このブロックは魔法の変更を加えていない Bert と同じになります。

(7) TF ブロックの後に、元の画像には見られない LayerNorm が存在しますが、これも多くのバリエーションで現れます。

(8) 論文内で分類、または分類タスクを使用したいため、SeqLenディメンションの最初の要素であるカテゴリ埋め込みを取得する必要があります。

(9) その後、linear + Tanh が渡されますが、これは事前トレーニング期間中にのみ必要であり、移行中に直接破棄できると論文では述べられています。

(10) の後には線形 + Softmax が続きます。これは、カテゴリの埋め込みを画像が各カテゴリに属する​​確率に変換するために使用されます。

おすすめ

転載: blog.csdn.net/wizardforcel/article/details/133438092