EfficientNet徹底解説:Compound Scalingで深さ・幅・解像度を一挙に最適化!軽量高精度CNNの世界
こんにちは、ゆずかきです。
ここからは、「EfficientNet」 という、ディープラーニングの世界では今なお注目を集める深層畳み込みネットワークのモデルスケーリング技術について、網羅的に解説していきたいと思います。
今回取り上げる「EfficientNet」は、Google Research, Brain Team の Mingxing Tan 氏と Quoc V. Le 氏が提唱したモデル(論文 “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks”)であり、
「ネットワークの深さ、幅、解像度 を効率よく拡張(スケーリング)する」
というコンセプトのもとに開発されました。
その結果として、当時の既存最先端CNN(例えば ResNet や NASNet など)を上回る高精度を、はるかに少ないパラメータ数・FLOPS で達成したという、非常にインパクトの大きな研究です。
今回のブログ記事では、この論文にあるエッセンスを、中級者~上級者のディープラーニング研究・実務者の方でも十分に満足いただけるよう、かなり細かく・網羅的にまとめていきます(可能な限り論文の全貌を紹介しつつ、具体的に解説していきます)。長文になりますので、読み物としてじっくりご覧ください。
§本記事の構成
- はじめに: EfficientNetとは?
- 論文の背景:モデルスケーリングの重要性
- EfficientNetの肝「Compound Scaling」徹底解説
- ネットワークアーキテクチャとベースラインEfficientNet-B0
- 主要な実験結果と考察
- 転移学習における威力:各種ベンチマークの結果
- なぜ強い? 他のスケーリング手法との比較
- 課題・今後の展望:さらに大型モデルへ?
- まとめ
それでは順を追って進めていきましょう。
§はじめに: EfficientNetとは?
論文の正式名称は、
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
著者は Mingxing Tan と Quoc V. Le(Google Research, Brain Team)のメンバーです。arXiv(arXiv:1905.11946)には 2019 年に初版が投稿され、その後もv5まで改訂が重ねられ、2020年9月にもアップデートされています。
EfficientNet の中心的なアイデアは、
- ベースラインとなる「小さめのネットワーク」(MobileNet系のアイデアをベースに、NASを活用して設計したもの)をまず作る
- 深さ(Depth)・幅(Width)・解像度(Resolution) を “同時に” スケールアップする “Compound Scaling” という一貫的な方法でスケーリングする
という流れにあります。
これにより、“従来のモデルのようにバラバラに深さだけ増やす・幅だけ増やす・解像度をひたすら上げる、といったスケーリング” の問題点を解決。バランスよくネットワークを拡張でき、精度と効率の両方で大きく向上 するわけですね。
実際、論文中では、
- ImageNet で高精度(トップ1精度 84.3%)かつ超軽量(パラメータ 66M)で推論も速い
- CIFAR-100、Flowers などの転移先タスクでも、精度が既存SOTAを上回り、しかもパラメータ数を大幅削減
という結果が提示され、研究コミュニティに大きなインパクトを与えました。
§論文の背景:モデルスケーリングの重要性
深層畳み込みニューラルネットワーク(ConvNet, CNN) の性能向上には、モデルを大きく(“スケールアップ”)していくことが一つの王道です。
- ResNet シリーズ(ResNet-18/50/101/152…)
- WideResNet(幅方向を広げる)
- Inception や NasNet(より複雑な構造や拡張)
しかし、「スケーリング」と一口にいっても、深さ を増やすのか、幅 を増やすのか、入力画像の解像度 を上げるのか、といった手段はさまざま。さらに、それらを組み合わせる際に「どの比率で増やせばいいのか?」という問題があり、実はこれまで明確な指針が存在しなかったのが現状でした。
論文中でも、以下のような状況が指摘されています。
- ひたすら Depth を増やしていくと、勾配消失などで性能向上が頭打ちに(“極端に深い” ResNet-1000 層版等の例)
- 幅(Width)を大きくするだけだと、高次の特徴をつかみにくく、思ったほど性能が伸びない
- 画像の Resolution を上げれば局所特徴をより多く捉えられるが、それだけでは高次の特徴を十分に捉えきれず、計算コストも急増
これらを踏まえ、論文の著者らは、「ネットワークの深さ・幅・解像度のバランス をしっかりととることが重要だろう」という仮説を立て、“Compound Scaling” という手法を提案しました。
§EfficientNetの肝「Compound Scaling」徹底解説
単一次元のみのスケーリングは限界がある
EfficientNetの基盤となる発想は、Depth / Width / Resolution のいずれか一方向のみスケールアップする手法では、ある程度のところで性能が伸び悩む という点です。論文中の図3あたりでも示されるように、「深さを増やし続けても精度向上が鈍化」「幅を増やしても頭打ち」「解像度だけ上げても効果が薄れる」現象を確認できます。
3つを同時に増やす――Compound Scaling
では、この3つをどう拡張すればいいか? そこで出てくるのが、
“Compound Coefficient” を使って Depth/Width/Resolution を均等に増やす
というアイデアです。
具体的には次のように、α, β, γ という3つの係数 を設定して、
- Depth を αϕ倍
- Width を βϕ倍
- Resolution を γϕ 倍
のようにスケーリングすることで、均衡を保ちつつ拡張していく という仕組みです。(ϕ は、追加で使えるリソース量を示す単一パラメータ)
論文ではさらに、理論上「FLOPS(計算量)が α×β2×γ2 に比例するから、制約式を入れて…」といった形で、モデルサイズやFLOPSを統制しながら最適化 できるよう工夫しています。これが論文内で “Compound Scaling” と呼ばれている手法です。
要するに、「深さだけ」「幅だけ」「解像度だけ」ではなく、それらを同時かつ一定比率でスケールアップする ことで、モデルが大きくなってもバランスが崩れにくく、効率よく精度を向上させることが可能となるのです。
§ネットワークアーキテクチャとベースラインEfficientNet-B0
さて、Compound Scaling のための「土台(ベースライン)」として何を使うかという点も重要です。論文では、
まず MobileNet系 のアイデア(Depthwise Separable Convolutionなど)をベースに、Neural Architecture Search(NAS) を用いて得られた小規模ネットワークを設計 → それをコンパウンドスケーリングで拡張
という二段構えを取っています。
EfficientNet-B0
NASで得られた小さめのモデルを EfficientNet-B0 と呼び、その構造がMBConvブロック(MobileNetV2でおなじみのインバーテッドボトルネック+Squeeze-and-Excitation追加)を中心に構成されているのも特徴です。
- MBConv(Inverted residual + SE)
- 「k3x3」や「k5x5」のカーネルサイズ
- ステージごとにチャンネル数を徐々に増加
- ステージ間で解像度を 2 倍ずつダウンサンプリング
- 最後に Conv1x1 + Pool + FC
論文中の Table1 あたりに具体的なネットワーク構造が示されていますね。
EfficientNet-B1~B7 へスケーリング
この B0 を土台に、先ほどの Compound Scaling に基づいて、
- B1(深さや幅や解像度を少しアップ)
- B2
- B3 …
- B7(けっこう大型)
と段階的にスケーリングして得られるモデル群が EfficientNet ファミリーです。実際、 - B0 が約 5.3M パラメータ & 0.39B FLOPS
- B7 になると約 66M パラメータ & 37B FLOPS
という具合に伸びていきます。
それでも、同等精度の他モデルと比べると桁違いに軽い というのが EfficientNet の強みになります。
§主要な実験結果と考察
ImageNet
論文で最もインパクトがあったのが、ImageNet(ILSVRC 2012)での比較結果。
- トップ1精度:ResNet-152 (77.8%)、SENet (82.7%)、NASNet-A (82.7%) などなど、既存の有名モデルを上回り、最終的に EfficientNet-B7 が 84.3% を達成
- さらに、同精度帯のモデルと比べて、パラメータ数がおよそ 8.4倍 以上小さい (GPipe 84.3%が 557M Params に対し、B7 は 66M)
- FLOPS や推論速度の面でも優れている(CPU 上のシングルスレッド推論で 6.1倍速い等の記載)
表やグラフを見ると、パラメータ vs. 精度、FLOPS vs. 精度の両軸で、EfficientNet 系列がぐんと上のほうに位置していることがわかります。
なぜそんなに軽いのか?
論文の主張としては、
- NAS で構造を厳密に最適化した小型ベースライン(B0)を用い
- Compound Scaling で無駄なくバランスをとりながら拡張する
という 2 段構えにより、「精度と効率のトレードオフが最適化されている」から、とのこと。
このあたりは、論文の図 4 や図 7 (Class Activation Map) なども興味深いです。Compound Scaling だと、同じ FLOPS でも「入力画像全体にバランスよく注意を払ったCAMが得られる」と分析しています。
§転移学習における威力:各種ベンチマークの結果
EfficientNet は ImageNet だけでなく、転移学習 先でも高い性能を示しました(論文Table5など)。
- CIFAR-10, CIFAR-100
- Birdsnap, Flowers, StanfordCars, FGVCAircraft, Oxford-IIITPets, Food-101
などの人気データセットに対して、ImageNet でプリトレーニングしたモデルを Fine-tuning する形で実験しています。
結果として、5/8 データセットでSOTA精度を更新、かつ、パラメータ数を平均 9.6倍 以上 削減 という驚異的な実績を出しています。
特に、当時 “GPipe” (Google Brain チームが開発した超巨大モデル) などと比べても、EfficientNet-B7 がほぼ同等 or それ以上の精度を出しながら パラメータは1桁少ない という報告。
§なぜ強い? 他のスケーリング手法との比較
論文では、同じベースラインから「深さだけ拡張」「幅だけ拡張」「解像度だけ拡張」「Compound Scaling(3つ全部)」の 4 通りを比較する実験も掲載されています。
- 「深さのみ増やす」:浅い問題なら精度はすぐに向上するが、大幅に増やしていくと精度向上が頭打ち
- 「幅のみ増やす」:細かな特徴は拾いやすくなるが、高次特徴が不十分
- 「解像度のみ上げる」:高解像度ならより多くのピクセル情報を得られるが、拡張コスト(FLOPS上昇)が大きい割に精度が伸びにくい
一方、
“Depth × Width × Resolution” の3方向をきちんとバランスして拡張する
と、同じ FLOPS でより高い精度 を実現しやすくなることが、実験によって明らかにされています。
このことを、論文では “Observation 1” と “Observation 2” として位置づけており、
- 単一次元のスケーリング だけでは性能がすぐ飽和する (Observation1)
- 3つを組み合わせると性能がさらに上がる (Observation2)
という提案が、EfficientNet の基盤の考え方として機能しているわけですね。
§課題・今後の展望:さらに大型モデルへ?
EfficientNet は非常に汎用的かつ効率的なモデルとして有名になりましたが、同時にいくつかの論点も考えられます。
- NAS(Neural Architecture Search)のコスト
- そもそも、ベースライン(EfficientNet-B0)を発見するまでに、NAS のリソースを使っている点は留意が必要です。
- ただし、一度小さめのベースラインを探してしまえば、Compound Scaling で大きなモデルを作れる利点も大きいですね。
- 超大規模モデルの登場
- 近年、Vision Transformer 系や他の巨大ネットワーク(10億~1000億パラメータ超)も登場しつつあり、EfficientNet もさらなるバリエーションや改良版(EfficientNetV2 など)が研究されています。
- 論文当時(2019~2020年頃)は SOTA でしたが、現在の大規模アーキテクチャ界隈でも、引き続き “Compound Scaling” の考え方は有効かもしれません。
- 推論最適化や特殊ハードウェア
- EfficientNet は CPU 上での推論速度に関してはかなり効率的とされていますが、GPU や TPU、あるいは Edge デバイス上での実装など、ハードウェアによって実行性能は変動します。
- 実際にプロダクションに載せる場合は、Quantization や Pruning なども併用するケースが多いはずです。
§まとめ
本記事では、論文 “EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks” を丁寧かつ網羅的に概観してきました。
- モデルスケーリング において、「深さだけ/幅だけ/解像度だけ」を一方向で増やすのは非効率。3つを同時に拡張すべき というのが本論文の最大のポイント
- そのための具体的手法が、Compound Scaling。α,β,γ の係数を用いて3方向をバランス良く拡張し、かつFLOPSの制約もうまくコントロールする
- ベースラインとして、NAS で得られた “小さな効率的ネットワーク”(EfficientNet-B0)を用いる
- B0 から B1, B2, … B7 へと順次スケールアップし、ImageNet や CIFAR、Flowers などで大幅な精度向上&軽量化 を示した
EfficientNet は既に“古典的”な感もある一方、今でも実務や研究で使われる汎用ネットワークの筆頭候補 となっています。特に、モバイルや組み込み環境での高精度かつ省メモリ なモデルが求められる場合、非常に有用なオプションと言えるでしょう。
ぜひ一度、最新のフレームワーク(TensorFlow, PyTorch, etc.)で実装を試してみると面白いですよ!
🔑この記事のポイントまとめ
- EfficientNet:深さ・幅・解像度を同時にスケーリングする “Compound Scaling” によって高精度を達成
- NAS で得た小型モデル(B0) をベースに段階的に拡張 (B1~B7)
- ImageNetで 84.3%(トップ1)を達成(既存モデルよりも大幅に軽量)
- 転移学習でもSOTAレベルの精度・パラメータ削減
- 現代の超大規模モデル研究でも、均等にスケーリングする という考え方は今なお有効
§参考文献(論文リンク)
- EfficientNet: httpss://arxiv.org/abs/1905.11946
- GitHub: httpss://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
- 公式実装(TensorFlow): httpss://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
以上、EfficientNetの論文を余すことなく(可能な範囲で)まとめてみました。
個人的には、「きちんとバランスをとってモデルを大きくする」という発想はシンプルながら画期的で、以前からあった “Deep vs. Wide” の議論を一気に整理してくれた印象です。
皆さんもぜひ、実務や研究でモデル効率に困った際には、この EfficientNet と Compound Scaling のアイデアを参考にしてみてください。
最後までお読みいただき、ありがとうございました!
ディスカッション
コメント一覧
まだ、コメントがありません