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 の中心的なアイデアは、

  1. ベースラインとなる「小さめのネットワーク」(MobileNet系のアイデアをベースに、NASを活用して設計したもの)をまず作る
  2. 深さ(Depth)幅(Width)解像度(Resolution) を “同時に” スケールアップする “Compound Scaling” という一貫的な方法でスケーリングする
    という流れにあります。

これにより、“従来のモデルのようにバラバラに深さだけ増やす・幅だけ増やす・解像度をひたすら上げる、といったスケーリング” の問題点を解決。バランスよくネットワークを拡張でき、精度と効率の両方で大きく向上 するわけですね。

実際、論文中では、

  • ImageNet で高精度(トップ1精度 84.3%)かつ超軽量(パラメータ 66M)で推論も速い
  • CIFAR-100、Flowers などの転移先タスクでも、精度が既存SOTAを上回り、しかもパラメータ数を大幅削減
    という結果が提示され、研究コミュニティに大きなインパクトを与えました。

§論文の背景:モデルスケーリングの重要性

深層畳み込みニューラルネットワーク(ConvNet, CNN) の性能向上には、モデルを大きく(“スケールアップ”)していくことが一つの王道です。

  • ResNet シリーズ(ResNet-18/50/101/152…)
  • WideResNet(幅方向を広げる)
  • InceptionNasNet(より複雑な構造や拡張)

しかし、「スケーリング」と一口にいっても、深さ を増やすのか、 を増やすのか、入力画像の解像度 を上げるのか、といった手段はさまざま。さらに、それらを組み合わせる際に「どの比率で増やせばいいのか?」という問題があり、実はこれまで明確な指針が存在しなかったのが現状でした。

論文中でも、以下のような状況が指摘されています。

  • ひたすら 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” として位置づけており、

  1. 単一次元のスケーリング だけでは性能がすぐ飽和する (Observation1)
  2. 3つを組み合わせると性能がさらに上がる (Observation2)
    という提案が、EfficientNet の基盤の考え方として機能しているわけですね。

§課題・今後の展望:さらに大型モデルへ?

EfficientNet は非常に汎用的かつ効率的なモデルとして有名になりましたが、同時にいくつかの論点も考えられます。

  1. NAS(Neural Architecture Search)のコスト
  • そもそも、ベースライン(EfficientNet-B0)を発見するまでに、NAS のリソースを使っている点は留意が必要です。
  • ただし、一度小さめのベースラインを探してしまえば、Compound Scaling で大きなモデルを作れる利点も大きいですね。
  1. 超大規模モデルの登場
  • 近年、Vision Transformer 系や他の巨大ネットワーク(10億~1000億パラメータ超)も登場しつつあり、EfficientNet もさらなるバリエーションや改良版(EfficientNetV2 など)が研究されています。
  • 論文当時(2019~2020年頃)は SOTA でしたが、現在の大規模アーキテクチャ界隈でも、引き続き “Compound Scaling” の考え方は有効かもしれません。
  1. 推論最適化や特殊ハードウェア
  • 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の論文を余すことなく(可能な範囲で)まとめてみました。
個人的には、「きちんとバランスをとってモデルを大きくする」という発想はシンプルながら画期的で、以前からあった “Deep vs. Wide” の議論を一気に整理してくれた印象です。
皆さんもぜひ、実務や研究でモデル効率に困った際には、この EfficientNet と Compound Scaling のアイデアを参考にしてみてください。

最後までお読みいただき、ありがとうございました!


画像解析

Posted by yuzukaki-dialog