要約
EfficientNetは、畳み込みニューラルネットワークを用いた画像認識モデルです。既存のConvNetに比べてモデルパラメータを1/8.4倍に削減しつつ、推論速度を6.1倍にしました。
アーキテクチャ
一般にネットワークを深くすると複雑な表現を捉えられ、幅(特徴量)を大きくすると細かい表現を捉えられます。また、解像度を高くすると扱える画像の情報が増えます。
本研究では、compound scaling method という、ネットワークの深さ・幅・解像度の大きさに同時に制約を加える手法で、バランスのとれたスケーリング(パラメータのサイズの調整)を可能にします。
compound scalingは以下の式に基づいて動作します。
ネットワーク各層の幅(特徴量)が2倍になると、4倍のパラメータが必要になります。
また、解像度は(H×W)なので2乗の制約となります。
よって、widthとresolutionのハイパーパラメータは2乗の制約とします。
Φはどれだけ大きなモデルにするかという人間が決定するパラメータで、その他ハイパーパラメータはグリッドサーチを用いて頑張って探索します。
深さ・幅・解像度を変化させたときのモデルは以下のようになります。
compound scalingを行うと、画像認識の際にモデルがどこに注目しているかを表すヒートマップの精度も向上しています。
コード
timm
というライブラリを用いるとEfficientNetを含めた大量の事前学習モデルを手軽に使うことができます。現在も続々とモデルが追加されています。
# コマンドで pip install timm
import timm
import torch
m = timm.create_model('efficientnet_b3', pretrained=True)
m.eval()
matrix = torch.rand(2, 3,224,224)
m(matrix).size() # (2, 1000)
m.forward_features(matrix).size() # (2, 1536, 7, 7)