【コンピュータビジョン】ViT(Visual Transformer)のモデル構造と原理解析

1.はじめに

Visual Transformer (ViT) は、論文「AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE」に由来します。これは、視覚分野における Transformer ベースのモデルの始まりです。

ここに画像の説明を挿入

この記事では、ViT モデルの全体的なアーキテクチャと基本原則をできるだけ簡潔に紹介します。

ViT モデルは Transformer Encoder モデルに基づいており、読者はすでに Transformer の基本を理解していることを前提としています。

2. ビジョン トランスフォーマーのしくみ

Transformer モデルはもともと自然言語処理 (NLP) の分野で使用されていたことがわかっています. NLP は主にテキスト、文章、段落など、つまりシーケンス データを扱います。ただし、視野は画像データを扱うため、Transformer モデルを画像データに適用するには、次の理由から多くの課題に直面します。

  1. 単語、文章、段落などのテキスト データとは異なり、画像にはより多くの情報が含まれており、ピクセル値の形式で表示されます。
  2. テキストをピクセル単位で処理するのと同じ方法で画像を処理することは、現在のハードウェアでも困難です。
  3. Transformer には、翻訳の不変性や局所的に制限された受容野など、CNN の誘導バイアスがありません。
  4. CNN は同様の畳み込み演算によって特徴を抽出します.モデル層の数が深くなるにつれて、受容野は徐々に増加します. ただし、Transformer の性質上、CNN よりも計算コストが高くなります。
  5. Transformer を直接使用して、画像データなどのグリッドベースのデータを処理することはできません。

上記の問題を解決するために、Googleの研究チームはViTモデルを提案しました.その本質は実際には非常に単純です.Transformerはシーケンスデータしか処理できないため、画像データをシーケンスデータに変換できます. ViT がどのようにそれを行うかを見てみましょう。

3. ViT モデルのアーキテクチャ

まず、以下のアニメーションと組み合わせて、ViT のワークフローを大まかに分析してみましょう。

  1. 画像をパッチに分割します。
  2. パッチを舗装します。
  3. 平坦化されたパッチを低次元空間に線形にマッピングします。
  4. 場所埋め込みエンコーディング情報を追加します。
  5. イメージ シーケンス データを標準の Transformer エンコーダーに送信します。
  6. 大規模なデータセットでの事前トレーニング。
  7. 画像分類のためのダウンストリーム データセットの微調整。

4. ViTの動作原理の分析

上の図に示したプロセスを6つのステップに分解し、その原理を段階的に分析します。以下に示すように:

ここに画像の説明を挿入

4.1 ステップ 1: 画像を一連のパッチに変換する

Transformer が画像データを処理するためには、まず画像データをシーケンス データに変換する必要がありますが、どのように行うのでしょうか。絵があるとします: x ∈ RH × W × C x \in R^{H \times W \times C}バツεRH × W × C、パッチ サイズはppp 、次にNNを作成できますxp ∈ R ( p 2 C ) x_p \in R^{(p^2C)}として表現できるN 個の画像パッチバツpεR( p2 C)、ここでN = HWP 2 N = \frac{HW}{P^2}N=P2HW _NNNはシーケンスの長さで、文の単語数に似ています。上の画像では、画像が 9 つのパッチに分割されていることがわかります。

4.2 ステップ 2: パッチを平坦化する

元の論文では、著者が選んだパッチのサイズは 16 で、パッチの形状は (3, 16, 16)、次元は 3、舗装後のサイズは 3x16x16=768 です。つまり、パッチは長さ 768 のベクトルになります。

ただし、まだ少し大きく見えます.この時点で、線形変換を追加できます.つまり、線形マッピングレイヤーを追加して、パッチの次元を指定した埋め込みの次元にマッピングします.これは、単語に似ています. NLP のベクトル。

4.3 ステップ 3: 位置の埋め込みを追加する

CNN とは異なり、この時点では、モデルはシーケンス データ内のパッチの位置情報を知りません。したがって、これらのパッチは最初に位置情報を追加する必要があります。これは、図の数字を持つベクトルです。

実験では、異なる位置エンコーディング埋め込みが最終結果にほとんど影響を与えないことが示されています. 元の Transformer 論文では、固定位置エンコーディングが使用され、ViT で使用される学習可能な位置埋め込みベクトルが、対応する出力パッチ埋め込みに追加されます.

4.4 ステップ 4: クラス トークンを追加する

Transformer Encoder に入力する前に、特別なクラス トークンを追加する必要があります。これは主に BERT モデルから借用されます。

このクラス トークンを追加する目的は、ViT モデルが Transformer Encoder でのこのクラス トークンの出力を、入力画像のモデルのエンコード機能と見なし、その後の MLP モジュールへの入力に使用されて損失計算を行うためです。イメージラベル。

4.5 ステップ 5: 入力トランスエンコーダー

パッチ埋め込みとクラス トークンを標準の Transformer Encoder にスプライスします。

4.6 ステップ 6: 分類

Transformer Encoder の出力は実際にはシーケンスですが、クラス トークンの出力のみが ViT モデルで使用され、最終的な分類結果を出力するために MLP モジュールに送信されることに注意してください。

V. まとめ

ViT の全体的な考え方は比較的単純で、主に画像分類問題をシーケンス問題に変換します。つまり、画像パッチをトークンに変換して、Transformer で処理できるようにします。

単純に聞こえますが、ViT は大規模なデータセットで事前にトレーニングしてから、下流のデータセットで微調整してより良い結果を得る必要があります。そうしないと、ResNet50 などの CNN ベースのモデルほど効果が得られません。

おすすめ

転載: blog.csdn.net/wzk4869/article/details/130480240