[論文メモ] Patches Are All You Need?
2021/10/8時点でUnder review as a conference paper at ICLR 2022
概要
画像タスクでViTが高い性能を発揮しているが、それは本当にTransformerのアーキテクチャの恩恵なのか、それともパッチに分割するという画像タスクに適した帰納バイアスのおかげなのか。
提案するConvMixerはMLP-MixerをベースにしつつViTの考え方を踏襲した非常にシンプルなモデルだが、ViTやMLP-Mixerよりも優れている。
手法
ConvMixerのアーキテクチャについて。全体図は図2参照。
構造としてはPatch EmbeddingとConvMixer LayerとGlobal Average Poolingから成る。
Patch Embedding
Patch Embeddingはただのconvolutionで行う(式(1))。
入力チャンネルが、出力チャンネルが、パッチサイズが(なのでconvのstrideとkernelサイズは)
は活性化関数でここではGELU。
ConvMixer Layer
ConvMixerのブロックはdepthwise convとpointwise convから成る(式(2), 式(3))。
residual構造のdepthwise convのあとに pointwise convを適用する。
このブロックを回繰り返したあとGlobal Average Pooling -> FCで出力を得る。
図3にConvMixerブロックPytorchの実装を示す。
ConvMixerは入力画像のサイズは自由。
実験
ConvMxierは4つのパラメータから成る。
) チャンネルサイズ
[te:x d]) ブロックの繰り返し回数
) 入力のパッチサイズ
) カーネルサイズ
ConvMixerの命名はチャンネルサイズとブロックの繰り返し回数から ConvMixer-/とする。また入力の画像サイズをnとしてそれをパッチサイズで割った値をinternal resolutionと呼ぶ。
CIFAR-10については図4を参照。
ImageNet-1k
augmentationはRandAugment、mixup、CutMix、 random erasing。またgradient norm clippingも採用。最適化はAdamW。
実験結果が表1。他モデルと比べ少ないパラメータで同等レベルのtop-1精度だが、実行時間が遅い。
所感
シンプルなconvolutionのみでSOTAレベルを達成。ただ速度とパラメータのトレードオフ感は否めない。
またブロック数が多くなると学習に必要なepoch数も多くなりそう。AppendixにConvMixer-1536/20の学習時間について記載があったが10個のRTX8000で150epochに9日はかなりコストが高いように感じる。
convolutionもまだまだ捨てたもんじゃないという気持ちになる論文ではあった。
本文自体は短く約4枚。Conclusionに「まだ先があると思った?急いで出したと思う?そうじゃなくてシンプルな手法だから説明もシンプルな方が効果的だと考えたんだ。必ずしも8ページや9ページも要るか?重要なところは書いたから詳細が必要な人のためには付録を付けたよ(意訳)」とありせやなという気持ち。
またタイトルも以下のようになっていて少々遊び心があるなと思った(これが良いのか悪いのかは...)。