ViTで出力されるベクトルの次元の意味

Huggingfaceで下記コマンドを実行すると、ViTの最終層のベクトルが得られる

model = ViTModel.from_pretrained('google/vit-base-patch32-224-in21k', output_attentions=True, output_hidden_states=True, use_mask_token=True)

x = model(x)
print(x.last_hidden_state.shape)

このとき、得られるベクトルのサイズは、torch.Size([N, 50, 768])になっているはずだ。

各次元の意味に関して、

N: バッチサイズを表す。dataloaderで指定したバッチサイズがここに示されているはずだ。
50: 1枚の画像を分割して得られた、パッチ画像の総数。google/vit-base-patch32-224-in21kを使用している場合、224/32=49、これに[CLS]トークンを加えて、50のパッチ画像となる。
768: Transformer系のモデルではベクトルは768次元の特徴であることが多い

Uncategorized

Posted by vastee