SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model sizeを読んだ

SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size を読んだメモ。

最近の畳み込みニューラルネットは巨大化する傾向があり、メモリ消費量が大きい。メモリ消費量を減らしたい、というのがこの論文の目的である。SqueezeNetでは、Convolutionレイヤーを、SqueezeレイヤーとExpandレイヤーの2つの組み合わせで置き換える。Squeezeレイヤーは1x1のConvolutionであり、出力チャネル数が少ない(16〜64程度)のが特徴である。Expandレイヤーは1x1 Convolutionと3x3 Convolutionを横に並べたものである。GoogLeNetのInceptionモジュールに近い。

Squeezeレイヤーによって3x3 Convolutionに与えるチャンネル数を減らす。また、3x3のみでなく、1x1も積極的に使っていく。この2つがSqueezeNetの工夫である。

実験では、AlexNetをアレンジして作ったSqueezeNetで性能を比較しているが、オリジナルのAlexNetに比べて1/50程度のパラメーター数になっているにもかかわらず、精度は落ちるどころかむしろ少し上がっている。

感想

論文中ではあまり主張されていないが、Sequeezeレイヤーをかませることで、計算量もかなり減っているはずである。GPU実装だとなんかメモリ転送がどうとか難しい問題があるかもしれない(詳しくないのでよくわからない)が、少なくともCPU実装なら数倍ぐらいは速くなるのではないか。

精度が落ちないというのが嬉しいところで、ResNetと組み合わせたらどうなんだろうとか、ちょっと気になる。GPUサーバーと1,2日の自由時間があればこれぐらいの実験は今なら簡単にできるけど、それがなかなか難しい。

自分から積極的に恥を晒していく理由もないのだが、この論文を読むまで、Convolutionのフィルターの枚数は出力チャンネル数と同じだと勘違いしていた。実際には、入力チャンネルと出力チャンネルの積がフィルターの枚数になる。(Chainerの実装を読んで、後者が正しいことを確認した。)一度わかった気になると、CNNの説明とか読み流しちゃうようになるので、なかなか勘違いを直すチャンスもなかったようだ。致命的な間違いを起こす前に気づけてよかった。

参考文献

このエントリーをはてなブックマークに追加

Latest articles