概要
ディープラーニングの画像認識モデルである SqueezeNet を解説し、Pytorch の実装例を紹介します。
SqueezeNet
SqueezeNet について、論文 SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE に基づいて解説します。 従来のモデルと比較し、パラメータ数が大幅に削減した (Squeeze) モデルとなっています。SqueezeNet では、次のテクニックで構築されています。
- 多くの畳み込み層のカーネルサイズを 1×1 にしました。
- 1×1 の畳み込みで数を削減してから、3×3 の畳み込み層に入力するようにしました。
- プーリング層を畳み込み層のできるだけ後ろに持っていくことで、表現力が低下しにくいようにしました。
Fire Module
Fire Module では、まず 1×1 の畳み込みでチャンネル数を削減し、1×1 及び 3×3 の畳み込みに入力します。 1×1 及び 3×3 の畳み込みではチャンネル数を拡張し、最後にチャンネル方向に結合したものが Fire Module の出力となります。
SqueezeNet v1.0、v1.1
論文に記載されているパラメータのモデルは SqueezeNet v1.0 になります。論文作者の Caffe 実装 には、SqueezeNet v1.1 も公開されています。パラメータ数が AlexNet の 1/50 にも関わらず、AlexNet より高い精度になっています。
Pytorch の実装
以下に Pytroch の実装例を紹介します。Pytorch では、以下の SqueezeNet が提供されています。実用上は torchvision.models の SqueezeNet を使用してください。
モデル名 | 関数名 | パラメータ数 | Top-1 エラー率 | Top-5 エラー率 |
---|---|---|---|---|
SqueezeNet 1.0 | squeezenet1_0() | 1248424 | 41.9 | 19.58 |
SqueezeNet 1.1 | squeezenet1_1() | 1235496 | 41.81 | 19.38 |
Fire Module を作成する
Fire Module を作成します。
In [ ]:
SqueezeNet を作成する
- 特徴抽出部分が v1.0 と v1.1 で異なっています。パラメータは forresti/SqueezeNet を参考にしています。
- Caffe 実装では、最後の畳み込み層だけ平均0、標準偏差0.01の正規分布で初期化しています。
In [1]:
コメント