InceptionNet: Googleによる画像認識CNN

1 InceptionNet の概要

InceptionNet (Inception Network, 別名 GoogLeNet) [Szegedy et al., 2015] は,Googleの研究チームが考案した畳み込みニューラルネットワークの初期のバックボーンの1つである.InceptionNet v1 のあとに,改善版であるv2, v3, v4 が順に発表された.この記事では,InceptionNet v1 から v4までについて簡潔に紹介する.

InceptionNet の基本的な戦略としては,1 x 1 畳み込み層 [Lin et al., 2014] を活用して次元削減する代わりに,各ブロックの幅やネットワーク全体の深さを増やすことで,計算効率化しながら「幅増加+深さ増加」で精度向上を狙った.そこで,著者らは畳み込み層をInceptionブロックに代替させて,ブロックを9回直列に連結させるInceptionNetを提案した.

このCNN構造により,以前のAlexNetなどのCNNよりも,計算コスト削減をしながら合計畳み込み層数を深くすることに成功し,画像認識精度の向上を達成した.

1.1 InceptionNet の名前の由来

Inceptionのネットワーク名は,当時の大ヒットSFアクション映画「インセプション」から来ている.著者らは,当時流行していたイメージマクロ中の主人公のセリフ “We need to go deeper” と,Network-in-network [Lin et al., 2014] から論文名のアイデアを取った[Szegedy et al., 2015].

当時は,トップ研究者たちにより「CNNをより深い構造にすることで精度を向上させる」競争が行われていた.そこで,映画インセプションの「夢のまたその夢(dream in a dream)を,何層も深く(deeper)下っていく」という明晰夢間の階層的メタ構造を,Network-in-Network 由来の「メタネットワーク構造」を利用したInceptionNetの喩えとして用いたということである.これにより,論文名も”Going deeper with convolutions”となっている.

1.2 記事の構成

以降の2節以降では,以下の各バージョンを順番に紹介する:

  • 2節 Inception v1 (GoogleNet) [CVPR2015] : 初期バージョン.2位のVGGNetをおさえて,ILSVRC 2014 1位.
  • 3節 Inception v2 (BN-Inception) [ICML2015]:バッチ正規化を導入
  • 4節 Inception v3 [CVPR2016]:因数分解による改善
  • 5節 Inception v4 と Inception-ResNet v1, v2 [ICLR workshop 2016]:残差接続による改善
  • 6節 まとめ

2 Inception v1 (GoogleNet)

InceptionNet v1のネットワーク構造は,「AlexNet的なCNNにおいて,畳み込み層の代わりにInceptionブロックを用いた」ネットワーク構造になっている:

  • conv1: 畳み込み層 – [7 x 7]カーネル, stride=2
  • pool1: 最大値プーリング – [3 x 3]カーネル, stride=2
  • conv2: 畳み込み層 – [3 x 3]カーネル, stride=2
  • pool2: 最大値プーリング – [3 x 3]カーネル, stride=2
  • 3a: Inceptionブロック
  • 3b: Inceptionブロック
  • pool3: 最大値プーリング – [3 x 3]カーネル, stride=2
  • 4a: Inceptionブロック
  • 4b: Inceptionブロック
  • 4c: Inceptionブロック
  • 4d: Inceptionブロック
  • 4e: Inceptionブロック
  • pool4: 最大値プーリング – [3 x 3]カーネル, stride=2
  • 5a: Inceptionブロック
  • 5b: Inceptionブロック
  • pool5: グローバル平均値プーリング – [7 x 7]カーネル, stride=1
  • linear6: 全結合層:1024 x 1020
  • softmax: 1000クラス確率分布

2.1 Inceptionモジュール: ワイド化と次元削減

InceptionNet v1 の Inceptionブロック
図1 InceptionNet v1 の Inceptionブロック

InceptionNet を構成する基本的なブロックがInceptionモジュールである(図1).Network-in-Network(NIN) [Lin et al., 2014]のように,並列化した畳み込み層 + プーリング層群から構成される「サブネットワークCNN」である.

InceptionNetブロック内の (1)幅の増強 (図1-a) と,(2) 次元削減 (図2-a)により,InceptionNet全体を深くすることが可能となった.

Inceptionモジュールは,ネットワーク全体を深くするためのブロック構造である.その肝となるのは,深さ方向の畳み込み数を増やす代わりに,モジュール内で並列分岐させることで,表現力の向上を狙った点にある.1×1 , 3×3, 5×5 の畳み込み層と最大値プーリング層それぞれ並行に実施したあと,それら4つのパスの結果をチャンネル方向に1つの特徴マップに結合する(図1-a).この「ワイド化」により,3つのカーネルサイズにより豊富な領域サイズの情報で畳み込めるようになることで,認識精度の向上が見込める.

しかし,4並行パス構成のInceptionブロックは,パラメータ数が多い.従って,何個も繋げていくとパラメータが大きくなりすぎて問題であるし,深いネットワークを構成できない.そこで,NINの 1 x 1 畳み込み [Lin et al., 2014]による各空間位置の特徴の(チャンネル方向)次元削減を,3つの並行パスに導入することにより,Inceptionモジュールの計算軽量化が達成できた (図1-b).

2.2 グローバル平均値プーリング

Network-in-Network(NIN) [Lin et al., 2014]で提案されていた グローバル平均値プーリングの仕組みが,InceptionNet でも使用された.

これにより,識別器層の全結合層部分へ使っていた層間重みパラメータが全て不必要となり,モデルのパラメータ数を大きく減らすことができた.

2.3 補助識別器: 序盤層への逆伝播の安定化

深さ方向に合計22層の畳み込み層を導入すると,誤差逆伝播時に勾配が序盤の層まで伝わりにくい問題がでてしまう.そこでInceptionNetは,補助識別器(Auxiliary Classifier)を用いた学習を提案した.中間層で(AlexNet終盤と同じような構造の)識別器ブランチを2回追加する.そして,追加した補助識別器ブランチの最後の出力でも,ラベルを学習させて交差エントロピー損失を取るようにする.

これにより,中間部分にも損失を逆伝播できるので,中間あたりの場所で,大きめの勾配を逆伝播に加えることができる.補助損失のおかげで,深い大規模構造のInceptionNetでも,勾配消失を避けて序盤の層まで勾配を伝播させることができ,深いCNNでも,安定して学習を収束できるようになった(補助識別器ブランチは学習だけに用い,テスト時には使用しない).

補助識別器を追加して学習を安定化させるこのアイデアは,ACGAN(Auxiliary Classifier GAN) [Odena et al., 2017] などでも応用されている.

3 Inception v2

バッチ正規化の論文 [Ioffe and Szegedy, 2015] は,InceptionNetと同じGoogleの同じ著者人から発表された研究である.

そのバッチ正規化の論文中で,バッチ正規化を導入したInceptionであるInception v2 が実験されており,これをInceptionNetのversion 2と呼ぶ.のちの研究ではBN-Inceptionとよく呼ばれる.

4 InceptionNet v3

[Szegedy et al., 2016b] では,InceptionNet v1 を再考した改善版としてInception v3 を提案した.Inception v3では「因数分解を活用した新InceptionブロックA~C(4.1節)」と「効率的な空間サイズ削減ブロック(4.2節)」を主に導入することで,画像認識性能とモデル効率性を向上させた.Inception v1よりも幅と深さのバランスが取れたネットワーク構造に進化している.

InceptionNet v3 の(補助識別器ブランチ以外の)ネットワーク構成は,以下のようになっている:

  • 初期の畳み込み+プーリング層
  • InceptionモジュールA (図2-a)
  • 空間サイズ削減ブロック (図4-b)
  • InceptionモジュールB (図2-b)
  • 空間サイズ削減ブロック (図4-b)
  • Inceptionモジュール (図3)
  • 識別層

また,2個目の空間サイズ削減ブロックから,補助識別器ブランチを分岐させることで,深いネットワークでも誤差逆伝播を行いやすくしている.

4.1 畳み込み層の因数分解によるパラメータ削減

Inception v3では,普通の3 x 3 畳み込み層6層 + 3×3プーリング層でまず畳み込んでおいた終盤の特徴マップ 35 x 35 x 288 を入力として,今から述べる InceptionモジュールA (図2-a),モジュールB(図2-b), モジュールC (図3)を順に用いる.3つのモジュールでは全て,「畳み込みそうの因数分解」を活用した,CNN全体の省パラメータ化と性能向上の両立が実現されている.

 InceptionNet v3の InceptionモジュールAとB.
図2 InceptionNet v3の (a) InceptionモジュールA と (b) InceptionモジュールB.

まず,Inception v1のInceptionブロック(図1)で用いていた,5 x 5 畳み込みのパスを,3 x 3 畳み込み2層に分解するブロックAが提案された(図2-a).3 x 3 2つに分解することで,元の5 x 5 畳み込み層の視覚野を保持したまま,パラメータ数を削減することができる (VGGNetと同じ発想).各畳み込みの前に 1 x 1 畳み込み層で次元削減しておくのは,Inception v1 と同じである(図1-b).

また,VGGNetライクな5×5 -> 3×3 への因数分解だけでなく,非対称な因数分解を用いたモジュールBが提案された(図2-b). 元のn x n 畳み込みを,受容野が等価な n x 1 と1 x n の2層に因数分解して分担させることで,計算コストを抑える.

図3 InceptionNet v3の InceptionモジュールC:赤線で囲まれた組み合わせが,高次元表現を促進.

さらに,モジュール終盤でパスを分岐させることで,各パス最後を高次元特徴化する「モジュールC」も提案された(図3).高次元化することで,各パスでは,もつれほどきがより促進された(畳み込み)特徴が得られる(論文中2節の原則2).これにより,収束性も向上して学習も速くなる.

4.2 効果的な空間サイズ削減

InceptionNet v3のダウンサイズモジュール
図4 Inception v3の「空間サイズ削減ブロック」.(a) 従来の空間サイズ削減の2タイプ.(b) 改善版の空間サイズ削減.左図は空間サイズ観点で表示したもので,右図は各操作の観点で表示したもの.

Inception v3では,効率的な空間サイズの削減を,効率化したブロックを用いて行うことを提案した(図4).

Inception v1では,ブロック内の 1 x 1 畳み込みを用いてチャンネル方向に各空間位置の特徴は次元削減をしている.一方で,空間サイズの削減にはまだ問題点があり,改善余地があった(図4-a).タイプ1 (図4-a 左図)では,Inceptionブロックより先にプーリングした場合であるが,真ん中の特徴マップがボトルネック化してしまい,表現力向上の妨げになってしまう問題があった.またタイプ2(図4-a 右図)のように,今度はInceptionブロックを先に配置すると,計算量が3倍に増大してしまう問題点があった.

そこで,Inception v3では,改善版の空間サイズ削減ブロックを提案して使用した (図4-b).この改善版により,空間サイズを削減しながらもフィルタ数は増やせる.これにより,計算コストは低いまま,ボトルネック表現も回避することができる空間サイズ削減行えるようになった.

5 Inception-v4 と Inception-ResNet

[Szegedy et al., 2016b]のワークショップ論文では,InceptionNet v3のバージョンアップとして更に大規模ネットワーク化した「InceptionNet v4」と,ResNet [He et al., 2016]の残差接続をInceptionNet v3のInceptionブロックに組み合わせた「Inception-ResNet」の v1, v2が,新たなCNN構造として提案された.

まず, [Szegedy et al., 2016b]で提案されたCNN構造は,以下の3種類である:

  • Inception v4: Inception v3 の序盤を「stem(幹)」と名付けた2分岐ブロックへ差し替え.
  • Inception-ResNet v1: 残差接続ありのInceptionブロックを導入.
  • Inception-ResNet v2: Inception-ResNet v1 を更に深く,幅を広くさせた.また,Inceptionブロックも少し小さめの規模にし,比較するためInception v4と計算オーダーを揃えたモデルになっている.

Inception v4 とInception-ResNet v2は ISLVRC 2012データセットに対して,同等の画像認識性能を示した.

この論文[Szegedy et al., 2016b]以降,ResNet/ResNextと同様に,様々な画像系タスクのCNNバックボーンとして使われるようになった(特にInception-ResNet v2がバックボーンに使われる).

6まとめ

InceptionNetは,Googleの研究チームから提案された代表的CNNバックボーンである.サブネットワーク内で複数の異なるサイズの畳み込みカーネルで,効率的に多様な表現を作る「Inceptionブロック」を考案した.Inceptionブロックを複数重ねたInceptionNetは,少ないパラメータ数のみで深いCNN(20層~45層程度)を学習できるようになった.

元提案である v1 とその再考版のv3が主な提案であり,ResNet登場後には残差ブロックを活用したv4も提案された.

References

  • [He et al., 2016a] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016
  • [Ioffe and Szegedy, 2015] S. Ioffe and C. Szegedy, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift” In ICML , 2015.
  • [Lin et al., 2014] M. Lin, Q. Chen, and S. Yan. Network in network. In ICLR, 2014.
  • [Odena et al., 2017] A. Odena, C. Olah, and J. Shlens. Conditional image synthesis with auxiliary classifier gans. In ICML, 2017.
  • [Szegedy et al., 2015] Szegedy C, Liu W, Jia Y et al. Going deeper with convolutions. In CVPR 2015.
  • [Szegedy et al., 2016a] C.Szegedy, V. Vanhoucke,S. Ioffe, J. Shlens, and Z. Wojna. Rethinking the inception architecture for computer vision. In CVPR, 2016.
  • [Szegedy et al., 2016b] C. Szegedy, S. Ioffe, and V. Vanhoucke. Inception-v4, inception-resnet and the impact of residual connections on learning. In ICLR Workshop, 2016.

参照外部リンク

関連記事