InceptionNet: Googleによる画像認識CNN

1 InceptionNet の概要

InceptionNet (Inception Network, 別名 GoogLeNet) [Szegedy et al., 2015] は,Googleの研究チームが考案した畳み込みニューラルネットワークのバックボーン向けアーキテクチャである.InceptionNet v1 のあとに,改善版であるv2, v3, v4 が順に発表された.

この記事では,それらの InceptionNet v1 から v4について,登場順に,それぞれの重要点にフォーカスするかたちで紹介していく.

1.1 中心アイデアと各ver.の要点

InceptionNet v1 の中心となるアイデアは,各畳み込み層を, Inceptionモジュール(2.1節)に近似・代替させたところにある. Inceptionブロックは,1 x 1 畳み込みによるチャンネル方向の次元削減と,4経路構成の複数畳み込みサイズによる並列化を用いている.これにより,表現力がありながらも同時に計算効率性も良いモジュールを,普通の畳み込み層の代わりとして用いることができる

InceptionNet v1は,「Inceptionブロックを基本単位としたCNN構造」により,以前のAlexNetよりも,大幅なパラメータ数削減による計算コスト削減をしながらも,深いネットワークにして表現力を向上させることに成功した(ISLVRC 2014で一位を獲得).バッチ正規化の論文では,バッチ正規化を追加したInception v2が提案されたが,v2には特に新規性はない.

次に,Inception v3 [Segedy et al., 2016b] では,幅と深さのバランスをよくした新Inceptionブロックが提案されたことで,より効率的かつ高精度なInceptionの設計に進化した(4節).また,ラベル平滑化が提案されたのも,Inception v3の研究の重要点である.

最後に,Inception v4の研究 [Szegedy et al., 2017] では,残差接続によるResNet化で,96層の構成にまでなった最終形の Inception-ResNet(v1, v2) が完成した(5節).

Inception-ResNetは,Inceptionブロックの効率性と,残差接続の大規模モデル最適化における利点を,同居させた強力なモデルである.その後は動画認識など,モデルの巨大さが必要な場面を中心に,広く使用されていった.

1.2 InceptionNet の名前の由来

Inceptionのネットワーク名は,当時の大ヒットSFアクション映画のインセプションから来ている(管理人も大好きな映画である).

映画の題名「インセプション(inception)」は「開始」という意味だが,とくに「inception of an idea(アイデアの開始,発想の芽生え)」という英語のフレーズからその題名は来ている.「のちに大きなアイデアに拡大して発展していくが,始めた最初の時点では小さいもの」を,inception of an ideaと英語では呼ぶ.映画インセプションの主人公達は,ターゲットに対して,こっそり明晰夢の中に入り込み,より深い層の夢へと入っていく.そしてターゲットにバレないように,夢の中で演技をして,深い潜在意識の階層まで入っていって『アイデアの植え付け』を行うことを企む,特集工作グループである.よって,映画の題名も『Inception (of a idea)』と名付けられた.

当時,超大ヒット映画として世界各国で流行したインセプションであるが,主人公(ディカプリオ)の言うセリフ “We need to go deeper” が,イメージマクロ画像と,ネットスラングとして英語圏では大流行した.そこで,InceptionNetの著者ら [Szegedy et al., 2015] は,この映画の「夢の階層を何層も下っていく」というストーリーを元になぞらえて,InceptionNet の論文名とネットワークを命名した .

当時,新たなCNN構造を研究しているトップ研究者たちは「CNNをより深い構造にすることで,画像認識精度を向上させる」競争を行っていた.そこで,映画インセプション中の「夢のまた夢(dream in a dream)を,何層も深くへ下っていく(go deeper)」という,明晰夢階層間の「階層的メタ構造」を,Network-in-Network 由来の「メタネットワーク構造 =Inceptionブロック」を活用したInceptionNetになぞらえて,その命名に用いた.従って,論文名も同様に “Going deeper with convolutions“となっているわけである.

1.3 記事の構成

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

  • 2節 Inception v1 (GoogleNet) [CVPR2015] : 初期バージョン.
  • 3節 Inception v2 (BN-Inception) [ICML2015]:バッチ正規化を導入
  • 4節 Inception v3 [CVPR2016]:Inceptionブロックの改善
  • 5節 Inception v4 と Inception-ResNet v1, v2 [AAAI 2017]:残差接続による改善
  • 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モジュール
(a) 多様なサイズ経路化 (b) 1×1 畳み込みによる次元削減の追加

InceptionNet を構成する基本的なブロック単位が,Inceptionモジュールである(図1).InceptionNetモジュールは,その内部で (1) 多様なサイズ経路化(図1-a,2.1.1節)と,(2) 各経路の次元削減による計量化 (図1-b, 2.1.2節)をおこなうことで,省パラメータながらも高い表現力を持つように意図したモジュールである.

2.1.1 複数サイズ経路に並列化

Inceptionモジュールの新規性は,(1) の モジュール内を並列に別の深さで分岐させることで,ブロックごとの表現力の向上を狙った点にある(図1-a).「1 x 1 , 3 x 3, 5 x 5 の畳み込み層 + 最大値プーリング層」の,表現サイズが異なる4つの経路をそれぞれ並行に実施したあと,それらの各結果の特徴マップを,チャンネル方向に1つの特徴マップへと結合する(図1-a).

この「多様なサイズ経路に並列化(※ これを「ワイド化」とも呼ぶ)」により,多様な畳み込みサイズの合成特徴として,各Inceptionモジュールが表現できる.

2.1.2 次元削減で軽量化

しかし,4並行パス構成の Inceptionモジュール(図1-a)のままだと,パラメータ数が多いので,何個も繋げていくとパラメータが大きくなりすぎて,深いネットワークとなり(その頃の学習技術では)うまく学習できない.

そこで,NiN(Network-in-Network)で提案された 1 x 1 畳み込み [Lin et al., 2014] を用いて,モジュール内の各空間位置の特徴の(チャンネル方向)次元削減を,3つの各経路の最初に導入し,チャンネル数を次元削減したのち畳み込み層を実施するようにした(図1-b).この図1-bの形が Inception v1では使用された.

これにより,Inceptionモジュールの計算軽量化が達成できた.同時期のVGGNetよりも,かなりパラメータ数が少ないながら,同等の精度をInception v1は達成した(※ ISLVRC2014では,Inception v1が エラー率6.6%で一位であり,VGGNetがエラー率7.3%で2位であった).

※ 1 x 1 畳み込みのあとにReLUを挿入すると,3 x 3 畳み込み + ReLUほどでもないが,非線形化も行えるので,効率的な表現力向上が行えるといえる(具体的には 1/9の計算コストで,表現力向上を妥協したと言える).

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

Network-in-Network (NIN) [Lin et al., 2014]で提案されていた,終盤の全結合層の代わりにもちいる グローバル平均値プーリングが,InceptionNet v1でも使用された.

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

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

深さ方向に合計22層の畳み込み層を導入すると,誤差逆伝播時に勾配が序盤の層まで伝わりにくい問題がでてしまう.そこでInceptionNet v1 は,補助識別器(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., 2016] では,InceptionNet v1 を再考した改善版としてInceptionNet v3 を提案した.InceptionNet 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.3節)が提案された.

4.1 因数分解によるパラメータ削減

Inception v3 は,普通の3 x 3 畳み込み層 6層 + 3 x 3プーリング層でまず畳み込んでおいた終盤の特徴マップ [35 x 35 x 288] を入力として,以下に述べる モジュールA とモジュールB(図2)および モジュールC(図3)を,順に使用するネットワークである.

3つのモジュールではどれも「畳み込み層の因数分解」を活用している.これにより,InceptionNet v3全体の,(1) 省パラメータ化 ,(2)性能向上,の2つが達成された.

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

まず,Inception v1のInceptionブロック(図1)で用いていた,(VGGNetと同じ発想で)[5 x 5]畳み込みの経路を,2層の[3 x 3] 畳み込みに分解してパラメータ削減をおこなう「モジュールA(図2-a)」が提案された.各畳み込みの前に,先に 1 x 1 畳み込み層でチャンネル方向次元削減を行っておくが,これはInception v1 と同じ工夫である(図1-b).

また,非対称な因数分解を用いた「モジュール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-b 青枠)で行うことを提案した.

Inception v1では,ブロック内の 1 x 1 畳み込みを用いてチャンネル方向に各空間位置の特徴は次元削減をしている.一方で,空間サイズの削減にはまだ問題点があり,以下2つの改善余地があった:

  • タイプ1 (図4-a 左図):Inceptionブロックより先にプーリングした場合であるが,真ん中の特徴マップがボトルネック化してしまい,表現力向上の妨げになってしまう問題があった.
  • またタイプ2(図4-a 右図):今度はInceptionブロックを先に配置すると,計算量が3倍に増大してしまう問題点があった.

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

4.3節 ラベル平滑化

ラベル平滑化
図5 ラベル平滑化

2015~2016年の研究である Inception v3 (やResNet)では,当時の最先端のCNNのVGGNet(16層と19層)より更に層を深くしていく研究であった.しかし,層を更に増やすと,当然ながら更にモデルのパラメータ数が増えるので,CNNの過学習の危険度が増してしまう問題があった.

Inception v3ではその対策の1つとして,softmax損失関数の正規化手法である,ラベル平滑化(Label Smoothing)が提案された.ラベル平滑化は,正解ラベル$y_k \in \{0,1\}$からSoftmaxで作る分布にノイズ分布を全クラスに少し加えて緩和することにより,平滑化された疑似ラベルをつくり,その疑似ラベルで学習することで正則化を達成する手法である.

5 Inception-v4 と Inception-ResNet

[Szegedy et al., 2017] では,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データセットに対して,同等の画像認識性能を示した.この論文以降,ResNet/ResNextと同様に,様々な画像系タスクのCNNバックボーンとして使われるようになった (特にInception-ResNet v2が,大規模モデルが必要な問題のCNNバックボーンに使われていった).

6まとめ

InceptionNetは,Googleの研究チームから提案された代表的CNNバックボーンである.効率的に多様な表現を作る「Inceptionモジュール」を考案し,InceptionNet v1 は,少ないパラメータ数のみで深いCNN(20層~45層程度)を学習できるようになった.

その再考版にあたるv3 が,主な(オリジナル性の高い)提案である.ResNet登場後には,残差接続も活用した v4が,最終形として提案された.

参考書籍

References

  • [He et al., 2016] 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., 2016] C.Szegedy, V. Vanhoucke,S. Ioffe, J. Shlens, and Z. Wojna. Rethinking the inception architecture for computer vision. In CVPR, 2016.
  • [Szegedy et al., 2017] Szegedy, C., Ioffe, S., Vanhoucke, V., Alemi, A.A.: Inception-v4, inception-resnet and the impact of residual connections on learning. In AAAI, 2017.

参照外部リンク

関連記事

↓ ためになった方は,記事をSNSでシェアをしてくださると,管理人の記事執筆モチベーションが上がります