CNNの中でもよく使われるアーキテクチャの一つであるGoogLeNet。GoogLeNetの層を構成するのがInceptionで、今までにv1からv4までの改良が行われていて、またresidual blockを導入したinception-resnetも提案されています。
Mediumの解説記事を参考に、基本となるGoogLeNet(V1)とKerasなどのフレームワークでもよく使われるV3を簡単にメモ。
A Simple Guide to the Versions of the Inception Network | by Bharath Raj | Towards Data Science
Inceptionのバージョンについて
Inception V4の論文では、以下のように定義されているので、ここでもそれを参照します。
- GoogLeNet(Inception V1)
- [CVPR2015] Going Deeper with Convolutions
- Inception V2
- [ICML2015] Batch normalization: Accelerating deep network training by reducing internal covariate shift
- GoogLeNetに対してBNを導入したもの
- Inception V3
- [CVPR 2016] Rethinking the Inception Architecture for Computer Vision
Inception V1
課題
- 注目する対象というのは、画像中で任意の場所に様々なサイズで存在
- 認識するためにフィルタサイズが重要になるが、適切に設定するのは難しい
- Deepなネットワークは過学習しやすく、計算量も大きい
V1のアイデア
- どれか一つのサイズを選ぶのではなく、同じ階層で色々なサイズのフィルタを同時に使う!
- ただし、このままだと計算量が大きいので、1x1でmap数を削減してから、3x3と5x5のフィルタを適用する
- Inception V1を9ブロック組み合わせたのがGoogLeNetで22層のアーキテクチャ
- Max Pooling + Convだと27層
- Deepなネットワークなので、勾配消失の問題が起こりやすい。そのため、中間層(4aと4d)に補助的な識別器を追加して、ロスを計算するようにする
# The total loss used by the inception net during training. total_loss = real_loss + 0.3 * aux_loss_1 + 0.3 * aux_loss_2
Inception V3
課題
- モデルサイズを大きくして精度向上をしつつ、パラメータ数削減による計算効率化を行う
- パラメータ数削減は、Mobile用途や超大規模データを扱うシナリオでは重要
V3のアイデア
- Factorization
- Auxiliary Classifiers
- 補助的な識別器は、学習初期にはロスが収束することにあまり寄与せず、学習後期になってようやく精度向上に寄与することがわかった
- 低層部を取り除いても最終精度はあまり変わらない
- 補助的な識別器は4ブロックのInception Bのあとに1つだけ
- Batch Normalizationを入れることで性能向上
- 補助的な識別器は、学習初期にはロスが収束することにあまり寄与せず、学習後期になってようやく精度向上に寄与することがわかった
- Efficient Grid Size Reduction
- d x d x kから(d/2) * (d/2) * 2kの特徴マップを得ようとする場合、2つのやり方がある
- 1 x 1 x 2kのconvolutionをしてから、poolingする→この場合だと、(d x d x k) * (1 x 1 x 2k) = 2 d2 k2が支配的なoperation
- 逆にpoolingをしてから、1 x 1 x 2kのconvolution→この場合、(d/2 x d/2 x k) * (1 x 1 x 2k) = 2 (d/2)2 k2が支配的なoperationで1/4の計算コスト
- 先にpoolingをした場合、計算コストは小さくなるが、Representational bottleneckとなって、表現力が低下してしまう
- d2 kに対して (d/2)2 k
- strideが2のconvolutionとpoolingを並列に行い、出力をchannel方向にconcatする
- d x d x kから(d/2) * (d/2) * 2kの特徴マップを得ようとする場合、2つのやり方がある
42層のモデルで、GoogLeNetに対して2.5倍程度の計算コストで、Top1 errorを5.6%ほど改善している。