キカベン
機械学習でより便利な世の中へ
G検定対策
お問い合わせ
   

EfficientNet: 複合スケールによる効率的な画像分類器

thumb image

EfficientNetは2019年のICML(International Conference on Machine Learning)で登場した画像分類モデルです。Neural Architecture Search(NAS)の研究で有名なQuoc V. Leのチームが開発しました。

その名が示すように、効率的に(ネットワークのパラメータを無駄に増やすことなく)ネットワークを段階的にスケールアップし正解率を上げていったモデル群になっています。

1. EfficientNetが目指した効率の良さとは🔝

これまでの画像分類モデルの研究では、以下のような工夫をして正解率を増やそうとしていました。

  • 層を増やす、ネットワークを深くする(例:ResNet)
  • 層を増やさずチャンネルを増やす、幅を広げる(例:MobileNet)
  • 入力画像を大きくする、高解像にする(例:物体検出モデル)

これらの工夫はひとつずつ独立に試され、それなりに効果をあげてきた。しかし、限界もあった。

ネットワークを深くしていくとやがて正解率の向上はゆったりとなる。他の工夫にしても同じ現象が起きた。

そこで、Quoc V. Leのチームは上記3つの変更をバランスよく同時に行ってみてはどうかと考え、ResNetやMobileNetをベースに実験してみたら正解率がぐんと良くなるのがわかった。

さらに、バランスよくスケールさせるための専用のネットワークをNASを使って自動的にデザインしたのがEfficientNet-B0です。EfficientNet-B0を段階的にスケールさせたのがEfficientNet-B1からEfficientNet-B7になります。

下図を見るとわかるように、パラメータの数を無駄に増やすことなく(つまり効率的に)高い正解率を出すことに成功しています。

画像元:論文 図1

縦軸がImageNetでの正解率で、横軸がパラメータ(重さ)の数。赤い線がEfficientNetのB0からB7を表す。よって、他のどのネットワークよりもパラメータ数が少なく(効率良く)てより良い成績を出しているのが分かります。

これがEfficientNetが目指した効率の良さです。

EfficientNetはKaggleなどで転移学習のベースとしてよく使われるそうです。

また、後にEfficientNetをバックボーンにした物体検出器EfficientDetも開発されます。YOLOv4の論文で比較されるなど近年における代表的な物体検出モデルになっています。

2. 深さ、幅、解像度を複合的にスケール🔝

2.1. 深さ(Depth)🔝

深さとはネットワークにある層の数で特に畳み込み層の数が多いほど、より抽象的で豊かな特徴量の抽出が可能となります。よって、汎化性能もよくなりやすいと考えられました。

ただし、層の数を増やしていくと正解率の向上がだんだん弱くなっていきます。また、勾配消失の問題も起こりやすくなり訓練が難しくなります。

そこでResNetではスキップ結合で勾配消失を緩和しました。これによって、ResNet-18からResNet-200まで深さをスケールすることで速さと正解率のバランスを調整できるようになっています。

しかし、ResNetでさえ深さを増やしても正解率が期待したほど上がらず効率がよくないことが知られていました。

YOLOv3を開発したJoseph Redmonも「ResNetは層が多すぎて効率が良くない」と言っています。

下図ではEfficientNet-B0で深さ(d)だけを増やし実験した結果です。正解率の伸びが鈍くなっていくのが示されています。

画像元:論文 図3(中央)

FLOPS(floating point operations per second)は浮動小数点数を使う計算の数です。深さを増やすとFLOPSが増えるけど正解率はあまり変わらなくなっています。

2.2. 幅(Width)🔝

この論文で言う「幅」とは畳み込みで出力されるチャンネルの数のことです。幅を広くすれば色々な特徴を捉えることができ闇雲に深さを増やすよりかは訓練も上手くいきやすいと考えられました。

ただし、ネットワークが浅すぎるといくら幅があってもより抽象的な特徴を捉えるのが難しくなる傾向がありました。

画像元:論文 図3(左)

上図はEfficientNet-B0の幅(w)だけを増やして実験した結果です。ここでも正解率が伸び悩んでいくのが見えます。

2.3. 解像度(Resolution)🔝

解像度はピクセル数です。縦x横で計算します。

画像サイズが大きく高い解像度であれば、細かい特徴を捉えることができるますが、これにも限界があります。

画像元:論文 図3(右)

上図ではEfficientNet-B0の解像度(r)だけを高くして実験したものです。正解率の伸びが鈍くなっていくのがわかります。

2.4. 同時にスケール🔝

深さ、幅、解像度を別々に増やしても大きなモデルの正解率はそれほど伸びません。

高解像度の画像では広範囲の特徴を捉えるためにより深いネットワークが必要です。また、細かい特徴を捉えるために幅(チャンネル数)を増やす必要もあるでしょう。

つまり、深さ、幅、解像度を同時にスケールする方が効果があると考えられました。

下図ではこれを証明するための実験結果を表しています。

画像元:論文 図4
  • 青はEfficientNet-B0(18層、解像度は224×224)
  • 緑は深さ(d)を2倍したもの
  • 黄は解像度(r)を1.3倍にしたもの
  • 赤は深さ(d)を2倍、解像度(r)を1.3倍にしたもの(36層、解像度は299×299)
  • 上記の状態から始めて幅(w)を徐々に大きくしていきFLOPSを増やしています

要するに3つとも増やしたものが一番効率よく正解率を上げているのが分かります。

あとは、どのようにバランスを保つのかだけが問題になります。バランスが良くないと別々にスケールしているのと同じ非効率の問題が生じうるからです。

CNNでは畳み込みにおけるFLOPSが計算量の多くを占めることを考慮して、Quoc V. Leは以下の手法によるバランスを考えました。

$\begin{align*}\text{深さ:}\ d &= \alpha^\phi \\\text{幅:}\ w &= \beta^\phi \\\text{解像度:}\ r &= \gamma^\phi \\\text{ただし}\ &\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \\\ &\alpha \ge 1,\ \beta \ge 1,\ \gamma \ge 1 \end{align*}$

$\phi$が1だとベースのネットワークのままになります。$\phi$を増やしていくことで同時に深さ、幅、解像度を増やします。

深さを2倍にするとFLOPSが2倍になりますが、幅(チャンネル数)を2倍にするとFLOPSが4倍になります。これは、ネットワーク全ての畳み込みでチャンネル数を2倍にすると各層における入力チャンネル数と出力チャンネル数が両方とも2倍になるためです。

解像度に関しては縦横両方を2倍にすれば面積が4倍になるので同じようにFLOPSが4倍になります。

よって、$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$と言う制限を設けることで$\phi$を一つ増やすごとにFLOPSが2倍ずつ増えるようにしました。

2.5. MobileNetとResNetで実験🔝

MobileNetとResNetで実験した結果が以下の表になります。

画像元:論文 表3

太字の行は複合スケールを行った場合。$d=1.4, w=1.2, r=1.3$で$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$が保たれています。

他のケースでは深さだけ、幅だけ、解像度だけなどのになり効率の悪さが分かります。

3. EfficientNet🔝

3.1. EfficientNet-B0🔝

スケールをする際にネットワーク内で使われる関数や構造は変わらないので、ベースとなるネットワークがスケールするのにより適したものである方が都合が良くなります。

よって以下の最適化条件のもとにNASを使ってベースとなるネットワークを探索しました。

$\text{ACC}(m) \times \left[ \frac{\text{FLOPS}(m)}{T} \right]^w$

  • $\text{ACC}(m)$はモデルの正解率
  • $\text{FLOPS}(m)$はモデルのFLOPS
  • $T$はターゲットのFLOPS
  • $w=-0.07$はハイパーパラメータで、正解率とFLOPSのバランスをとる

この条件は正解率が高くて、FLOPSが少ないほど値が大きくなります。

よって、この条件を最大化するネットワークを探すのがNASの目的となります。

これによってベースとなるEfficientNet-B0が生まれました。

画像元:論文 表1

MBConvとはMobileNetV2で導入されたmobile inverted bottleneckのことです。

論文によるとMnasNetに似ているがFLOPS数が多くなっているとのことです。

MnasNetはQuoc V. Leのチームが以前NASで開発したモデルです。

このEfficientNet-B0を複合スケールで段階的に大きなネットワークへと発展させていきます。

3.2. EfficientNet-B1からB7🔝

まず、EfficientNet-B0を$\phi=1$でスケールする際に最適な$\alpha, \beta, \gamma$をグリッドサーチで探します。

結果は以下になりました。

$\begin{align*}\alpha = 1.2 \\\beta = 1.1 \\\gamma=1.15\end{align*}$

この値を使って$\phi$を増やしていけば、EfficientNet-B1からB7が出来上がります。

論文によると、モデルを大きくするごとにグリッドサーチをやり直した方がより最適なものが見つかる可能性があるが、大きいモデルではコスト(時間)がかかりすぎるので上記の方法をとったそうです。

数ではImageNetにおける正解率とFLOPSの関係を示しています。

画像元:論文 図8

下図はダメおしで他のネットワークが如何に非効率かを示しています。

画像元:論文 表2

表の一番右側にRatio-to-EfficientNetとあります。これはEfficientNetのモデルと比べて同等の正解率のあるモデルが何倍ものFLOPSを必要としていることを証明しています。

FLOPSが少なければ訓練も比較的に速くなります。これまた効率的ですね。

こうやってみると他のモデルは不要なのではとさえ思えてきます。

3.3. 転移学習の効率🔝

ImageNetで訓練されたモデルを他のデータセット用に転移学習した際の正解率をまとめたのが下表になります。

画像元:論文 表5

多くの場合で他のモデルよりもより高い正解率を上げており、パラメータがの数も大幅に縮小されています。

下図はデータセットごとに正解率とパラメータ数を図にしたものです。赤がEfficientNetのB0からB7です。

画像元:論文 図6

結論として、転移学習で良い成績を出せるし、パラメータが少なく訓練も速くなるということです。

Kaggleでよく使われているというのも頷けます。

3.4. 映像化による効果の確認🔝

最後に、この論文では「複合スケールが効果的である」を映像化して確かめています。赤はより活性化している部分を示しています。

画像元:論文 図7

1番左が入力画像で1番右が複合スケールを使った際の活性化状態です。画像の特徴に反応しているのがよく分かります。

その他はベースのモデルと深さや幅や解像度を別々にスケールしたものですが、特徴を捉えきれていません。

4. 参照🔝

4.1. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks🔝

Mingxing TanQuoc V. Le

https://arxiv.org/abs/1905.11946

4.2. MobileNetV2: Inverted Residuals and Linear Bottlenecks🔝

Mark SandlerAndrew HowardMenglong ZhuAndrey ZhmoginovLiang-Chieh Chen

https://arxiv.org/abs/1801.04381

4.3. MnasNet: Platform-Aware Neural Architecture Search for Mobile🔝

Mingxing TanBo ChenRuoming PangVijay VasudevanMark SandlerAndrew HowardQuoc V. Le

https://arxiv.org/abs/1807.11626



コメントを残す

メールアドレスは公開されません。