[論文メモ] Improved Multiscale Vision Transformers for Classification and Detection

arxiv.org

FAIR
Technical report

クラス分類、物体検出、動画の認識のためのMultiscale Vision Transformer(MViT)の改善
f:id:Ninhydrin:20211207092103p:plain

MViT

高解像度・低解像度のマルチステージを持つViT。以下の論文で提案(著者はほぼ同じ)。
arxiv.org

Pooling Attention(PA)が提案されている。
ViTは入力画像をパッチに分けそれをシーケンス  L = H \times Wとして扱うが、PAでは H \times Wに対して普通のPoolingを実行することでシーケンス長を L = H \times Wから \tilde{L} = \tilde{H} \times \tilde{W}に縮小していく。

手法

主にPAの改善

f:id:Ninhydrin:20211207095355p:plain

Decomposed relative position embedding

なお、動画関係を扱うため入力次元は H \times Wではなく T \times H \times Wになる。
MViTではabsolute positional enmbedding(APE)を使っていたのでpoolingが位置に対して不変でなかった。
それを回避するためにAPEからrelative positional embedding(RPE)に変更。ただ単に採用するとPREは \mathcal{O}(THW)のサイズになり計算コストがかかる。
なので各方向(時間、縦、横)毎に独立したPEを利用する。これにより \mathcal{O}(T + H +W)に抑えられる。
図2の真ん中辺りがそれ。
なおembeddingなので学習対象になることに注意(固定ではない)。

Residual pooling connection

attentionのKeyとValueに関しては大きめのstrideを利用し、Queryに関しては必要に応じたdownsamplingを適用していた。
Queryのサイズは基本変わらないので、Residual connectionを導入し情報を増やす and attentionの学習を容易にさせる。
図2の右側の赤い矢印がそれ。

MViT for Object Detection

MViTをバックボーンとした物体検出への拡張。
よくあるようにFeature Pyramid Networks(FPN)を追加(図3参照)。
f:id:Ninhydrin:20211207095605p:plain

self-attention(SA)はただでさえ計算コストが高く、物体検出では入力解像度が高いのでなおのことコストが高い。
Swin Transformerで使われたwindow attentionはパッチすべてを入力するのではなくwindowに区切って、そのwindow内でattentionを行う。なのでlocalなattentionといえる。
それに対してPAはpoolingをして周辺パッチを集約させるという意味ではローカルだが、attention自体はパッチすべてを扱うのでglobalといえる。

window attentionはwindow間でのやり取りができない問題をshifted windowを行うことで解決していた。
ここではHybrid window attention (Hwin)を提案。
最後の3ステージに関して、最後のブロック以外でwindow attentionを行う。

Positional Embeddingに関してはクラス分類と違って入力サイズが可変なので、ImageNetクラス分類で学習したPositional Embeddingを元に補完して利用する。

MViT for Video Recognition

vision用との違いは3つ
1) projectionが2Dから3Dになる
2) poolingが時間方向も含める
3) relative positional embeddingが時間方向も含める

実験結果

表1に示すように複数のMViTを用意。
f:id:Ninhydrin:20211207101954p:plain

詳しい実験内容・結果は論文を参照。一応表だけ載せておく。
f:id:Ninhydrin:20211207101720p:plain
f:id:Ninhydrin:20211207101802p:plain
f:id:Ninhydrin:20211207101916p:plain

Positional Embeddingのablation
f:id:Ninhydrin:20211207102352p:plain


Residual pooling connectionのablation
f:id:Ninhydrin:20211207102321p:plain

所感

ViTでPoolingを採用する方法があるのを知らなかった。
paddingを利用しないと解像度が変化、つまりシーケンス長が変化するので特定のタスクでは利用が難しそう。
QueryをAttention後にResidual Connectionで足し合わせるというのは初めて見たかもしれない。計算コストやメモリの大幅な増加は無いので問題は無いが、ここにconnectionを追加してもいいのだろうかという気持ちがある。一応ablationで問題ないことは示されてはいる。