NFNetを超える速度と精度でEfficientNetが帰ってきた！！EfficientNetV2論文まとめ

#記事を読む前に
筆者は解説記事初投稿です。
間違っている場合はご指摘いただけると大変ありがたいです。
書き方がおかしい等あると思いますが温かい目で見てください

本編での略称

| 略称| 英語 | 訳|
|:-:|:-:|:-:|
|  DA | Data Augmentation  |  データ拡張 |
|  NAS | Neural Architecture Search  |  ニューラルアーキテクチャサーチ ([解説](https://qiita.com/cvusk/items/536862d57107b9c190e2)) |

#論文データ
###Arxiv
[Tan, Mingxing, and Quoc V. Le. "EfficientNetV2: Smaller Models and Faster Training"](https://arxiv.org/abs/2104.00298)
arXiv:2104.00298 [cs.CV]
###実装
[公式実装(TensorFlow)](https://github.com/google/automl/tree/master/efficientnetv2)
[Papers With Code](https://paperswithcode.com/paper/efficientnetv2-smaller-models-and-faster#code)

#忙しい人向け
EfficientNetの一部をFused-MBConvに置き換えることで速度を上げながらパラメーター数増加を抑えた！
Progressive Learningで学習することで訓練時間を短縮するとともに精度も向上した！
ViTと比べ2.0%精度が向上し5~11倍高速に学習できる！

#1.導入
###1.1 近年の手法の問題点
モデルのサイズや学習データが非常に増加しているため、学習効率は深層学習において重要である。学習に数週間かかる、何千個のGPUを使うモデルもあり、再学習などが難しい。最近学習効率に注目するモデルも増えてきており、NFNetやResNet-RS,Vision Transformersなどがあたる。しかしこれらの手法はパラメーターサイズが非常に大きい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/8c585c91-c272-6af8-d469-440ce3ae45dd.png)
そのためNASとスケーリングを用いて学習速度とパラメーター効率両方を上昇させる。
EfficientNetのパラメータ効率の良さを考慮して、まずはEfficientNetの学習ボトルネックを体系的に研究する。
(EfficientNetに関しては[こちらの記事](https://qiita.com/omiita/items/83643f78baabfa210ab1)に詳しく書かれているので詳細は割愛します。)

###1.2 EfficientNetの問題点
EfficientNetにはいくつかの問題点がある。
(1) 解像度の大きい画像の学習が遅い
(2) depthwise convolutionsは浅い層では遅い
(3) すべてのstageにおいて等しくスケールアップするのは最適ではない
これらの調査に基づき、Fused-MBConvなどの新しいオペレーションを加えたものを探索範囲とする。学習を考慮したNASとスケーリングを適用し、モデルの精度、学習速度、パラメータサイズを共同で最適化していく。
EfficientNetV2と名付けられたこのネットワークは、従来のモデルに比べて学習速度が最大4倍になり、同時にパラメータサイズも最大6.8倍になった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/30439759-3a4d-3330-fa39-9369ebfb58f5.png)
###1.3 学習効率のさらなる改善
また、学習中に画像サイズを段階的に大きくすることで、さらに学習を加速させることができる。
progressive resizing，FixRes，Mix&Match などの多くの先行研究では学習に小さな画像サイズを使用しているが、通常すべての画像サイズで同じ正則化を維持しているため、精度が低下している。そのため、異なる画像サイズに対して同じ正則化を維持することは理想的ではないと主張する。

同じネットワークにおいて、画像サイズが小さいとネットワーク容量が小さくなり弱い正則化が必要となり、逆に画像サイズが大きい場合はオーバーフィッティングを防ぐため強い正則化が必要となる。(4.1章を参照)
この洞察に基づいて、Progressive Learningの改良された手法を提案する。初期の学習epochでは、小さな画像サイズと弱い正則化（例えば、ドロップアウトとDA）でネットワークを訓練し、その後、徐々に画像サイズを増やし、より強力な正則化を追加する。progressive resizing (Howard, 2018)をベースにしつつ、正則化を動的に調整することで精度の低下を招くことなく学習を高速化することができる。

#2.EfficientNetの問題点
ここでは、EfficientNetの学習時のボトルネックを調査し、トレーニングを考慮したNASやスケーリングを行ったEfficientNetV2モデルを紹介する。
###2.1 EfficientNetについての論評
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/fbdc78e0-9694-4bb4-f07c-19eced24841d.png)
EfficientNetはFLOPsとパラメータ効率に最適化されたモデルであり、NASを活用して、精度とFLOPsのトレードオフがより良いベースラインのEfficientNet-B0モデルを構築した。このモデルを単純な複合スケーリングによってスケールアップし、モデルB1～B7を生成した。最近の研究では、学習速度や推論速度の大幅な向上が謳われているが、パラメータやFLOPsの効率性の点ではEfficientNetよりもはるかに劣っていることが多い。そのためパラメータ効率を維持しつつ、学習速度を向上させることを目的とする。EfficientNetの学習ボトルネックと、学習速度を向上させるためのいくつかの単純なテクニックを研究する。
###2.2 解像度の大きい画像の学習が遅い問題について
これまでの研究で指摘されていたように、EfficientNetへの入力画像サイズが大きい場合、メモリの使用量が多くなる。GPU/TPU上のメモリ量は上限があるため、より小さなバッチサイズでこれらのモデルを学習しなければならず学習を大幅に遅らせる。簡単な改善策であるFixResは、推論用よりも訓練用に小さい画像サイズを使用することでこれを避けている。画像サイズを小さくすると、計算量が少なくなり、大きなバッチサイズが可能になるため学習速度が最大で2.2倍向上する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/da1c91d3-1ca2-f6e7-73f2-f1b0a3c163a8.png)
また、(Touvron et al., 2020; Brock et al., 2021)で指摘されているように、学習用の画像サイズを小さくすることで精度も若干向上する。しかし(Touvron et al., 2019)とは異なり、学習後にどの層も微調整を行わない。
###2.3 depthwise convolutionsは浅い層では遅い問題について
EfficientNetのもう一つの学習ボトルネックは、広いdepthwise convolutionsである。通常の畳み込みよりもパラメータやFLOP数が少ないが、最新の高速化を十分に活用できないことがよくある。最近では、Fused-MBConvが提案された。これは、MBConvのdepthwise convolutionsとpointwise convolutionを通常のconv3x3に置き換えるものである。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/e73b6317-0f54-cf3e-5b99-19fa04b29ded.png)
この2つの構成ブロックを体系的に比較するために、EfficientNetB4のオリジナルのMBConvをFused-MBConvに徐々に置き換えていく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/df3a6638-4c6c-c18f-6792-e180188f4baf.png)
Fused-MBConvは初期のstage1〜3で適用すると、パラメータとFLOPsのオーバーヘッドが小さく学習速度を向上させることができるが、すべてのブロックをFused-MBConvに置き換えると（stage1〜7）、パラメータとFLOPsが大幅に増加し、同時に学習速度も低下している。MBConvとFused-MBConvという2つの構成ブロックの適切な組み合わせを見つけることは容易ではないため、NASを活用して最適な組み合わせを自動的に探索する。
###すべてのstageにおいて等しくスケールアップするのは最適ではない問題について
EfficientNetは、シンプルな複合型スケーリングルールを用いて、すべてのステージを均等にスケールアップしている。しかし、それぞれのステージは、学習速度やパラメータ効率に等しく貢献しているとは言えない。そのため非一様なスケーリング戦略を用いて、後のステージに徐々にレイヤーを追加していく。また、EfficientNetsは画像サイズを積極的にスケールアップするため、メモリ消費量が多く、学習速度が遅くなる。この問題に対処するため、スケーリングルールをわずかに変更し、最大画像サイズをより小さな値に制限した。
#3.EfficientNetV2の構造
###3.1 EfficientNetV2-Sの構造
EfficientNetの構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/59f1b8c1-52a8-6025-c499-aba91797c5dc.png)
[Tan, Mingxing, and Quoc V. Le. "EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks."](https://arxiv.org/abs/1905.11946)より引用

EfficientNetV2の構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/bb8a5d72-a9bd-2eae-2cc9-7cb9dea64854.png)
EfficientNetからの変更点は
(1) 浅い層にFused-MBConvを使用している
(2) MBConvの拡大比が小さい方がメモリアクセスのオーバーヘッドが小さくなる傾向があるため、小さい拡大比である
(3) より小さい3x3のカーネルサイズを用いており、カーネルサイズが小さいことで生じる受容野の減少を補うためにレイヤーが多い。
(4) 最後のstride1ステージを完全に削除(パラメータサイズとメモリアクセスのオーバーヘッドが大きいことが原因と考える)
###3.2 EfficientNetV2-M/Lの構造
EfficientNetV2-Sをスケールアップして、複合スケーリングを用いてEfficientNetV2-M/Lを得るが、いくつかの最適化を追加する。
(1)大きな画像サイズはメモリを多く消費し学習時のオーバーヘッドを引き起こすため、推論画像の最大サイズを480に
(2)実行時のオーバーヘッドをあまり増やさずにネットワークの容量を増やすために、後半のステージにレイヤーを徐々に追加
###3.3学習速度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/5b52f615-209e-5a78-3169-58e90ca41270.png)
すべてのモデルがProgressive Learningなしで固定画像サイズで学習された場合のものである。
EfficientNetは2つの曲線があるが、1つは元の推論サイズで学習されたもので、もう1つはNFNetと同じように約30%小さい画像サイズで学習されたものである。NFNetsが360エポックで訓練されているのを除いて、すべてのモデルは350エポックで訓練されているので、すべてのモデルが同じような訓練ステップ数になっている。
EfficientNetV2モデルの学習速度は、他の最新モデルよりかなり速いことがわかる。
#4 Progressve Learning
###4.1 動機
学習において、画像サイズが重要な役割を果たす。FixResに加え、ほかの多くの研究において学習中に動的に画像サイズを変更する。ただしこれらはしばしば精度を落とす。
そのため、この制度の低下はバランスの悪い正則化が原因ではないかと仮説した。つまり異なる画像サイズで学習するとき、正則化の強度を調節しなければならないと考えた。実際、大きなモデルでは過学習を防ぐため強い正規化を用いるのが普通である。
同じモデルであっても、小さい画像サイズではネットワークの容量が小さくなるため、弱い正則化が必要となる。逆に画像サイズが大きいほど、容量が大きくても計算量が多くなるため、過学習の危険性が高まる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/a339b1cf-7658-b8dc-3485-f0d29a376bdb.png)
###4.2 適応的な正則化によるProgressve Learning
早期のエポックでは、ネットワークが単純な表現を簡単に高速に学習できるように、画像サイズの小さい画像を小さい正則化で学習する。そしてだんだんと画像サイズを大きくするが、より強い正則化を追加していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/0201e4a6-305a-5aaa-acdf-df1422f8dcfd.png)
###4.3 アルゴリズム
| 文字 | 意味 |
|:-:|:-:|
| $N$  | 全体の学習ステップ数  |
| $M$ | ステップを分割した学習ステージ数($M$<$N$)  |
| $S_0$  | 初期の画像サイズ  |
| $S_i$  | ステージ$i$での画像サイズ  |
| $S_e$  | 目標の画像サイズ  |
| $\Phi_0=\\{\phi_0^k\\}$  | 初期における正則化強度  |
| $\Phi_i=\\{\phi_i^k\\}$  | ステージ$i$における正則化強度  |
| $\Phi_e=\\{\phi_e^k\\}$  | 最終的な正則化強度  |
($k$はドロップアウトなどの正則化率を表す)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/cfc51cb0-05e3-47fd-eb37-242272d8861b.png)
初期値・目標値を決めた後、単純に線形補間を用いて解像度や正則化強度を決めているだけである。
新しいステージのはじめは以前のステージのweightを引き継いでいる。
Transformerはposition embeddingなどが入力サイズに依存するが、CNNは画像サイズに依存しないため、簡単に継承することができる。
改良したProgressive Learningは、既存の正則化と概ね互換性がある。簡単にするため主に以下の3種類の正則化で調べる。

* Dropout :ネットワークレベルの正則化で、チャンネルをランダムにドロップすることで過学習を低減。ドロップアウト率γを調整する。
* RandAugment n: 画像ごとのデータ拡張で、強度$\epsilon$で調整可能。
* Mixup : イメージをまたぐデータ増強。 画像・ラベルの組($x_j$ , $y_j$ )を持つ2つの画像が与えられると、混合率$λ$で、$\tilde{x_i} = \lambda x_j + (1 - λ)x_i、\tilde{y_i} = λy_j + (1 - λ)y_i$と結合する。学習の際には混合率λを調整する。

#5 実験結果
ここでは実験の設定、ImageNetでの主な結果、CIFAR-10, CIFAR-100, Cars, Flowersでの転移学習の結果を紹介する。
###5.1 ImageNet ILSVRC2012
####設定
ImageNet ILSVRC2012は128万の学習画像と5万枚のテスト画像が1000のクラスで分類されている。
アーキテクチャ探索やハイパーパラメータの調整には、精度評価のために学習データから25,000枚（約2%）の画像を検証データとして分割した。また、early stoppingのためにも検証データを使用した。ImageNetの学習設定は、ほぼEfficientNetに従っている。

| 名称 | 詳細 |
|:-:|:-:|
| optimizer  | RMSProp(decay 0.9，momentum 0.9)  |
| Batch Norm  | momentum 0.99  |
| weight decay  |  1e-5 |
| epochs  | 350  |
| バッチサイズ  |  4096 |
| 学習率 | 0から0.256まで上昇し、その後2.4エポック毎に0.97ずつ減少  |
| 指数移動平均  | 減衰率0.9999  |
| 正則化  |  RandAugment, Mixup, Dropout, stochastic depth (残存確率0.8) |
|ステージ数| 4 |
|epochs/ステージ|約87|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/73a0035f-de3a-1803-81f2-847816609916.png)
すべてのモデルにおいて最小値は一定であるが、最大値は異なる。これは大きなモデルは一般的に過学習に対処するため、より多くの正則化を必要とするからである。学習時の最大画像サイズは推論時よりも約20%小さくしているが、学習後はどの層も微調整していない。
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/ddf29bb4-f0e9-918d-2baa-f39e3fc5f25a.png)
従来のCNNやTransformよりも大幅に高速で、優れた精度とパラメータ効率を達成している。特にEfficientNetV2-Mは、EfficientNet-B7と同等の精度でありながら、11倍高速に学習している。また、EfficientNetV2モデルは、精度と推論速度の両方においてすべてのRegNetおよびResNeStを大きく上回っている。

近年、Vision TransformersはImageNetの精度と学習速度において素晴らしい結果を残している。しかし、適切に設計されたCNNとProgressve Learningにより精度と学習効率の両方でVision Transformersを大きく上回ることができることを示した。特に、EfficientNetV2-Lは85.7%のTop-1精度を達成し、より大規模なImageNet21kデータセットで事前学習されたモデルであるViT-L/16(21k)を上回った。ただし、ViTはImageNet ILSVRC2012で十分に調整されていない。
DeiTsはViTsと同じアーキテクチャを使用しているが、正則化をより多く追加することで、より良い結果を得ている。

EfficientNetV2モデルは学習用に最適化されているが、学習速度が推論速度と相関することが多いため、推論にも適している。一般的に、このモデルはEfficientNetよりもパラメータ/FLOPsの効率がわずかに良いが、推論時間はEfficientNetsよりも最大で3倍速い。GPU向けに最適化された最近のResNeStと比較すると、EfficientNetV2-Mは0.6%の精度向上と2.8倍の推論速度を達成している。
###5.2 ImageNet21k
ImageNet21kには21,841クラス、約1300万枚の学習画像が含まれている。オリジナルのImageNet21kは学習/テストの分割がないため、ランダムに選んだ10万枚の画像をテストデータとし、残りを学習データとする。
####設定
ImageNet ILSVRC2012とほぼ同じ学習設定を再利用しているが、いくつかの変更点がある。

* 学習時間を短縮するために学習エポックを60または30に変更し、追加の調整なしに異なるステップに適応させるためにコサイン学習率減衰を使用している。
* 各画像には複数のラベルが存在するため、softmax lossを計算する前にラベルの合計が1になるように正規化している。
* ImageNet21kで事前学習した後、ILSVRC2012でコサイン学習率減衰を用いて15回のエポックを行い各モデルの微調整を行った。

####結果
表7は、21kでタグ付けされたモデルはImageNet21kで事前学習し、ImageNet ILSVRC2012で微調整した場合の性能比較である。
ViT-L/16(21k)と比較して、EfficientNetV2-L(21k)は2.5倍少ないパラメータと3.6倍少ないFLOP数で、Top-1の精度を1.5%向上（85.3% vs 86.8%）させ、学習と推論を6倍から7倍高速に実行している。

####見解
高精度領域では、単純にモデルサイズを大きくするよりも、データサイズを大きくする方が効果的である。Top-1の精度が85%を超えると過学習が激しくなるため、単純にモデルサイズを大きくするだけでは精度を向上させることは非常に困難である。しかし、ImageNet21Kの事前トレーニングを追加することで、精度を大幅に向上させることができる。

また、ImageNet21kは10倍以上のデータを持っているが、この学習アプローチでは32のTPUコアを使って2日以内にEfficientNetV2の事前学習を終えることができる（ViTでは数週間かかっていた）。これは、ImageNet上で大規模なモデルをトレーニングするよりも効果的である。

###5.1 転移学習
CIFAR-10, CIFAR-100, Flowers, Carsの4つのデータセットでモデルを評価する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/b9ffa657-197a-c195-81b8-d3f3b2857a81.png)
####設定
ここでは、ImageNet ILSVRC2012で学習したチェックポイントを使用する。 公正な比較のために、ここではImageNet21kの画像は使用しない。転移学習の設定は、ImageNetのトレーニングとほぼ同じである。変更点は

* バッチサイズ:512
* 初期学習率:0.001
* コサイン減衰を用いる

すべてのデータセットにおいて、各モデルを固定の10,000ステップで学習する。各モデルは非常に少ないステップで微調整されるため、weight decayを無効にし、単純なcutout DAを使用する。
####結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635267/69d28939-eb2b-0174-cf22-08f5294b12d2.png)
CIFAR-100では、EfficientNetV2-LはGPipe/EfficientNetsよりも0.6%、ViT/DeiTよりも1.5%高い精度を達成している。これらの結果は、EfficientNetV2がImageNet以外でも十分に汎用性があることを示している。

#6 まとめ
最適化された学習を考慮したNASとモデルのスケーリングにより最適化されたEfficientNetV2は、従来のモデルを大幅に上回る性能を発揮した。また同時に高速化とパラメータの効率化を実現している。
さらに学習を高速化するため、学習中に画像サイズと正則化を同時に増加させる、改良されたProgressve Learningを提案した。
幅広い実験により、EfficientNetV2はImageNetおよびCIFAR/Flowers/Carsにおいて強力な結果を達成した。EfficientNetや近年の研究と比較して、EfficientNetV2は最大6.8倍軽量でありながら、11倍の速度で学習を行うことができた。

#感想
最近のモデルは非常に多くのパラメータで多くの時間や計算資源を用いているなか、このモデルは小さいパラメータで高速に非常に高い精度を出しているのがとても驚いた。
特に提案されているProgressve Learningは画像認識以外にも物体検知などに応用できそうと感じた。
論文自体も非常に読みやすくおもしろいので一度読んでみてはいかがでしょうか？
(Ablation Studiesは需要があれば追加しようかな)

#参考
EfficientNetの解説記事: https://qiita.com/omiita/items/83643f78baabfa210ab1
EfficientNetの論文: [Tan, Mingxing, and Quoc V. Le. "EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks."](https://arxiv.org/abs/1905.11946)
EfficientNetV2の論文: [Tan, Mingxing, and Quoc V. Le. "EfficientNetV2: Smaller Models and Faster Training"](https://arxiv.org/abs/2104.00298)