DenseNet: ブロック内で全層間をスキップ接続するCNN

記事を共有する:

1. DenseNet とは [概要]

DenseNet とは,サブブロック間の各層を密に全てスキップ接続した「Denseブロック」を主要部品に用いる,画像認識向け用CNNバックボーン設計である [Huang et al., 2017].DenseNetはResNet [He et al., 2016a] の正当進化版である.ResNetの「残差接続で直列CNNを構築」という路線はそのままに,「残差接続を極端に増やす」という簡単なアイデアだけで,効率でコンパクトでありつつ,大規模な多層CNNモデルへ発展させることができた. DenseNetは,CVPR2017のベストペーパーを受賞した研究である.

この記事では,DenseNetの仕組みと,DenseNet著者が主張した「ResNetに対するDenseNetの利点(比較)」について主に紹介する.特に,2節で「直列型CNNにおける,スキップ接続を用いたブロック構造の発展 (VGGNet→ResNet→DenseNetの3段活用)」 というすっきりとした視点を読者に提供することで,ResNetからDenseNetへの変遷の見通しが良くなるようにしたい(2節).

まずは,以下に,著者によるCVPRでの口答発表の動画を埋め込んでおく:

動画1 DenseNetの口答発表

DeseNetは,ResNetの残差接続・残差ブロックの「隣のブロックまでスキップする」という発想を,素直に「Denseに全てのブロックにへスキップ接続する」ブロック構造へと進展させたものである.具体的には,残差ブロックをサブブロックとみなし,N個(N=6~48)ごとに,更に大きな「Denseブロック」としてまとめる.そして,Denseブロック内では,全ての残差ブロック間でスキップ接続するようにした(2節でResNetとDenseNetを比較).

この「Denseブロックを主部品とする構成」により,各Denseブロック内では勾配損失なく一気に各層へ逆伝搬される.これにより,勾配消失問題を回避しやすく,畳み込み層数が200層程度のDenseNetでも,Denseなスキップ接続群により,(ResNet系のCNNよりも) 効率的に学習できるようになった.

ImageNetに対する画像識別性能は,ResNet (ILSVRC 2015)の「エラー率3.5%程度」以降は既に飽和しているのだが,より大規模なCNNバックボーンを効率的な計算で組めるようになるDenseNetのような提案は,その後さらに学習するモデルとラベル(=データセット)の大規模化が進んでいく我々の業界にとって,重要な進歩であった.

ちなみに,DenseNetと同時期に登場した,人物姿勢推定向けのFCNバックボーンの「Stacked Hourglassネットワーク [Newell et al., 2016]」においても,Denseネット同様に,残差ブロックを発展させる発想の研究により,スキップ接続を多用した「Hourglassブロック」を提案した.Denseブロックの方が構造はシンプルだが,Hourglassブロックの方は「U-NetFPN形の構造で,ブロック内に毎回大きいボトルネックを形成する」というメリットはある.(※ DenseNet-B(3.1.2節)でも,1 × 1 畳み込みで,小さいボトルネックは使用する)

1.1 DenseNet の構造 [概要]

DenseNet の構造
図1. DenseNet の構造

DenseNetの基本構造は,直列型CNN内に,Denseブロックを3~4個挟んだ直列構成である(図1-a).「Denseブロック(図1-b,)」を用いて,DenseNetはResNet路線のCNNを素直に発展させたことで,ImageNet画像認識を性能・効率の両面において改善した.

Denseブロックは,密に(=Dense),全ての畳み込み層間をスキップ接続,各特徴マップを「チャンネル方向に」結合する(図1-b).これより,ResNetブロックの最後の加算とは違い,特徴マップ同士が混じることなく再利用できる(U-Net のスキップ接続と同様に).そして,スキップ接続後は,1 × 1 畳み込みを通じて,既定数のkチャンネルへと,チャンネル数削減を行う.これにより「チャンネル方向の結合」で再利用性を高めながらも,(ボトルネックにより)kチャンネルに表現量は制限でき,高度な表現力を保ちながら高速に学習できるようになった.

DenseNetは,層数の合計として,121層(80万パラメータ),169層(140万パラメータ),201層(200万パラメータ),264層(340万パラメータ)の4種類が,デフォルトの構成として提案された.これらはそれぞれ,ResNet の34層, 50層, 101層, 152層のモデルと比較して,パラメータ数が半分ほど少ない軽量モデルであるにも関わらず,認識精度を向上することができた.

1.2 DenseNetの特徴

著者らが論文中のabstractにまとめている通りであるが,ベースラインであるResNet(前年度のISLVRCの覇者)[He et al., 2016a] と比べると,DenseNetの「Denseブロックを用いたバックボーン設計」には,主に以下の利点がある:

  • 勾配消失問題を緩和:ResNetよりも,更に深いCNNにできる.
  • 特徴マップの伝搬を強化:Denseブロックの,層間が全てスキップ接続されているのが理由.
  • 特徴マップの再利用を促進:序盤・中盤の特徴も,Denseブロックの最後まで,直接ショートカットされてチャンネル方向に結合されるので.
  • 効率的にパラメータ数を削減:1001層の (pre-activation) ResNet [He et al., 2016b] のパラメータ数「10.0 Million」と比べて,DenseNet-BC は同程度以上の精度ながらも,パラメータ数を大幅に削減 (論文中 Figure 4を参照)

1.2.1 精度向上は少しであったが

初期は,毎年ISLVRCで大幅な進捗があった「ImageNetに対するエラー率向上」は,前年のResNetや,DenseNet(2016)の頃には飽和した.ResNet(3.5%), ResNext (3.0%)と比べてDenseNet(2.0%)は,既に殆ど誤識別しておらず,DenseNetはエラー率だけで見ると1%しか更新できていない.

しかし,次の年のILSVRC2017勝者のSE-Netによる「Channel-wise アテンション処理」の活用から始まった「CNNでの空間方向-チャンネル方向のアテンション機構の活用」は,これ以降,Fine-grainedな画像認識や,(モデル規模がより大きい)Long-tailed な問題などに効いてくることになっていく.また,物体認識よりも複雑なタスクである「物体検出・セグメンテーション」をはじめとした様々な画像認識タスクにおいて,DenseNet・SE-Netの提案した「スキップ接続の活用による軽量モデルながら大規模化」や「CNN画像特徴マップ向けのアテンション」の発展が,精度向上・大規模かつ軽量モデル化に貢献していく.

そもそも,このあと Trasnformerが登場し,SE-NetやCBAMのような「Self-Attention(自己アテンション)の活用」が,画像を入力とする各予測タスクで,標準的に使われるようになる(※ 著者も,この当時の画像空間アテンションは,人物Re-ID・人物追跡で研究した内容である).

1.3 記事の構成

2説以降は,以下の構成でDenseNetを構成する.

  • 2節 DenseNetまでの3段階
  • 3節 Denseブロック
  • 3節 DenseNet の詳細
  • 4節 実験結果とDenseNetの利点
  • 5節 実験
  • 6節 DenseNetのまとめ

2. DenseNet までの3段階の歴史

VGGNet→ResNet→DenseNet の発展
図2. VGGNet → ResNet → DenseNet の発展

次の3節で全体像を述べる準備として,この2節では,DenseNetの構成部品「Denseブロック」について,紹介し定式化を行う.

ResNetや,FCNU-Netのような「スキップ接続を活用したCNN」が登場する前のCNNでは,スキップ接続による分岐は用いず,単純に各層を直列接続するのが標準的な設計であった.

2.1 初期の直列型CNN [復習1]

初期の VGGNetなど「古典的なLeNetスタイルのCNN」では(図2-a),各$l$番目の層では,合成関数 $H^{(l)}$ (畳み込み層 + 活性化関数 +バッチ正規化を組み合わせたもの)を用いて,前の層の特徴マップ表現$\bm{x}^{(l-1)}$を,次の層の表現$\bm{x}^{(l)}$ へと変化させていた:

\[
\bm{x}^{(l)} = H^{(l)}(\bm{x}^{l-1})\tag{2.1}
\]

この式(2.1)を直列に繰り返していくが,VGGnet [Simonyan and Zisserman, 2015] の頃には,そのうち数層を「ブロック(もしくはモジュール)」$H^{(l)}$の塊とみなして,そのパターン化したブロック$H^{(l)}$を直列に数回繰り返す「直列ブロック型のCNN設計」が標準となってきていた.

(※ただしVGGNetの論文自体では,blcok・moduleという呼びかたは登場しない.InceptionやResNetでブロックの繰り返しという考え方が明示的に使用されたのち,「そうすると,VGGNetもブロックの繰り返し構造だったね」という後付けの解釈である).

2.2 ResNetでの残差接続 [復習2]

ResNetでは,それぞれのブロック$H^{(l)}$に残差接続を追加し,各ブロックの「残差ブロック化」を行った(図2-b).

残差ブロック中では,残差接続により,経路が2分岐されている.残差接続側ではない経路でのみ「畳み込み,活性化」の$H^{(l)}(\bm{x}^{l-1},\bm{x})$を行い,逆に,残差接続側は,そのまま加工なしに全層の表現$\bm{x}^{l-1}$を次のブロックへと受け渡す:

\[\bm{x}^{(l)} = H^{(l)}(\bm{x}^{l-1},\bm{x}) + \bm{x}^{l-1}\tag{2.2}
\]

2.3 DenseNet のアイデア:密な全入力層とのスキップ接続

さて本題のDenseNetのアイデアは,「残差(サブ)ブロック」N個を「Denseブロック」にまとめて,更にサブブロック間の特徴マップ間を,お互い全てスキップ接続接続で結合した,というものである(図2-c):

\[\bm{x}^{(l+1)} = H^{(l)}([\bm{x}^{l-1},\bm{x}^{l-2},…,\bm{x}^{0}]) + \bm{x}^{l}\tag{2.3}
\]

ResNetの残差ブロック内では,スキップ接続は1つだけであったが,Denseブロックでは,ブロック内の$L$個の層に全てスキップ接続させるところが異なる.また,それにより(残差)サブブロック × L個で,1つのDenseブロックを形成するところも,異なる(詳しい定式化は,次の3節で行う).

以上2.1~2.3が,残差ブロック構造の発展という観点からみたDenseNetまでの3段階的な発展である.

3. Denseブロック: DenseNet の主部品

DenseNetの「Denseブロック」
図3. DenseNetの「Denseブロック」:
ブロック内の,各サブブロック間が,全てお互いスキップ接続されている.

2節で「ブロックの直列接続CNN」の視点で,VGGNet,ResNetから発展した方向性の概要は理解しやすくなったと思う.よって,3節では,そのDenseブロックについて,中身の構成と利点をもう少し具体的に見ていきたい.

3.1 ブロック内での「密なスキップ接続」

Denseブロックの内部(図3 青枠で囲まれた,サブブロック5個)では,Denseブロック内で先行する全ての層(0番目 ~ l-1番目)の出力特徴マップとのあいだで,全てスキップ接続する(図3).そして,スキップされてきたそれらの先行する特徴マップを,「チャンネル方向に結合」したものを,式(2.3)のように,畳み込みの入力に用いる.

2.2節(図2-b)と2.3節(図2-c)で見たように,ブロック内前半の層の特徴マップを,スキップ接続して,「加工せずにそのまま」特徴マップの奥のチャンネルに「結合」で追加する.これにより,(サブブロック内で)特徴の再利用性が得られるのも利点である.ResNetはスキップ後に加算(+)の計算をするが(図2-b),Denseブロックでは結合するだけなので(図2-c),(順・逆伝搬ともに)計算効率も良くなるメリットが生まれる.

ResNetの残差ブロックは2分岐ブロックなので,残差ブロックの連続では,一気に遠い層まで勾配を逆伝搬できるわけではない.言い換えると,DenseNetは逆伝搬でも直接微分を遠い層へ送りやすいので,ResNetよりも学習計算スピードで,有利な面があるといえる.

3.2 各サブブロックの合成関数Hの構成

3.2.1 Pre-Activation 型の使用

Denseブロック内の,各サブブロックでスキップ接続しない側で用いられる合成関数$H^{(l)}(\cdot)$には,「ResNetのIdentity Mapping 経路の有効性を,実験で示す研究」 [He et al., 2016b] で提案されて,残差ブロック向けに性能のよかった,Pre-activation(活性化先行)型の合成関数「バッチ正規化ReLU畳み込み層」の構成による,以下の2ブロックから構成されている(図2-c,図3).

具体的には,2ブロックを,1 × 1 畳み込みと 3 × 3 畳み込み層で構成する:

  • バッチ正規化 – ReLU – 1 × 1 畳み込み層 (Pre-activation型のボトルネック合成関数)
  • バッチ正規化 – ReLU – 3 × 3 畳み込み層 (Pre-activation型の合成関数)

3.2.2 ボトルネック層の使用

毎回の合成関数の1つ目で,毎回 1 × 1 畳み込みを用いているのは,ボトルネック化が目的である.毎回のサブブロック処理時に,先行層から「スキップ接続 + チャンネル方向結合」で,出力のチャンネル数が大きく増えてしまうので,そのままだと,サブブロックごとに,計算コスト(=特徴マップ数)が増大していく.

そこで,1 × 1 畳み込みで ,毎回 kチャンネルまでチャンネル数を削減するようにしてある.これにより,その後のサブブロックでも,kチャンネルの計算だけで済むようになり,DenseNet全体の「計算量のコンパクトさ」を保てる.

4. DenseNet のアーキテクチャ

3節で,抽象的なDenseブロックの詳細説明が終わった.4節では,そのDenseブロックを用いて,実際に提案されたDenseNetの詳細設計について,より具体的にみていきたい.

4.1 二種類のDenseブロック

既に図1で示したように,デフォルトのDenseNet設計では,Denseブロックを4つ使用し,その間を「 1 × 1 畳み込み層 + 2 × 2 平均プーリング」で繋ぐというのが基本構成である(図1).DenseNetの論文中では,このDenseブロック同士の層を「移行層(Transition Layer)」と名付けている.

そして,Inception以降のCNNバックボーンと同様に,終盤層で特徴マップの空間サイズが 7 × 7 に到達したら,グローバル平均プーリングとSoftmax層で,出力を行う.

4.2 4種類のデフォルト設計

DenseNetは,「層数 × ( kの値)」の組み合わせにより,以下の4つの基本構成 (DenseNet-121, 169, 201, 161層)が,ImageNet向けのCNNバックボーンとして提案され,その性能実験が行われた :

DenseNet-121層(k=32)DenseNet-169層(k=32)DenseNet-201層(k=32)DenseNet-161層(k = 48)
ブロック1 (サブ× 6)
ブロック2 (サブ× 12)
ブロック3 (サブ× 24)
ブロック4 (サブ× 16)
ブロック1 (サブ× 6)
ブロック2 (サブ× 12)
ブロック3 (サブ× 32)
ブロック4 (サブ× 32)
ブロック1 (サブ× 6)
ブロック2 (サブ× 12)
ブロック3 (サブ× 48)
ブロック4 (サブ× 32)
ブロック1 (サブ× 6)
ブロック2 (サブ× 12)
ブロック3 (サブ× 36)
ブロック4 (サブ× 24)

ここで,(Dense)ブロック中の,各サブ(ブロック)の構成は,3.2.1節の [「BNReLUConv」× 2回 ] である(Pre-Activationブロック).

ちなみに,著者の論文データベースソフト上でキーワード検索すると,その後の各研究では,DenseNet-121,DenseNet-161,DenseNet-201の3つが,およそ満遍なく登場しており,DenseNet-169だけは,やや使用機会が少ない結果であった (あくまで私の保持している論文の中での頻度であることに注意).

5. 実験

以下のような4つのバリエーションでDenseNetを構築することで,アブレーション実験(5.1)と,ImageNetむけの大規模モデル実験(5.2)が行われた:

  • DenseNet:アブレーション用の,ボトルネック不使用モデル.サブブロックでも,移行層でも,チャンネル数削減は行わない.
  • DenseNet-B:各サブブロックで,ボトルネック層(1 × 1畳み込み層)を使用してチャンネル数をkに毎回圧縮.(BottleNeckのB)
  • DenseNet-BC:提案する完全体.各サブブロックでのボトルネック使用に加えて,移行層においても,ボトルネック層(1 × 1畳み込み層)を使用し,チャンネル数を毎回kに圧縮(CompressionのC).

5.1 CIFARでの実験

以下の6通りのネットワーク構成で,画像サイズが[32 x 32]の,CIFAR-100 データセット[Krizhevsky and Hinton, 2009 ]と,The Street View House Numbers (SVHN) に対して認識精度を算出し,これにより認識精度・モデル効率性の両面で,過去のCNNとの比較およびアブレーションが行われた.

モデルk深さLパラメータ数
DenseNet12401.0M
DenseNet121007.0M
DenseNet2410027.2M
DenseNet-BC121000.8M
DenseNet-BC2425015.3M
DenseNet-BC4019025.6M
表1 CIFAR-100での実験におけるモデル設定

上記のDenseNetおよびDenseNet-BCの予測精度はともに,ResNetやResNet [pre-activation付き] の双方や 10クラス識別・全100クラス識別と同等の高精度であった(詳しい精度値はDenseNet論文のTable 2を見ていただきたい).

また, DenseNetよりも,DenseNet-BCの「ボトルネックありの完全体」のほうが精度が良い.論文中Figure 4のキャプションにも記述されているように,DenseNet-BCはResNetの約1/3のパラメータ数で,CIFAR-10クラスにおいて同精度を達成することができた.

5.2 ResNet-1001 (事前活性化)との比較

DenseNet-BCにより,4.2節の4種のDenseNetをImageNetで学習してテストする実験が,行われた.

ResNet-34層, 50層, 101層, 152層の4種と,DenseNet-121(k=32), 169(k=32), 201(k=32), 161(k=48)がそれぞれ対として比較した際に,どれも計算FLOPsモデルサイズの面で,DenseNetのほうが大幅に軽量モデルながらも,ImageNetのテストデータセットで高精度をマークした.

こうして,ResNetの改善として,DenseNetは軽量モデル・計算効率と認識精度の両面で上回ることを実験でも示された.

6. DenseNet まとめ

ResNetの進化版として,スキップ接続を極端に増やしたCNNバックボーンである.DenseNetを紹介した.

「Denseブロック」は,(ResNetでいう残差ブロックに相当する)サブブロックをN個つなげたブロックで,サブロック間は全てスキップ接続後にチャンネル方向結合するだけという簡単なアイデアである.たったこれだけのアイデアだがResNetの軽量モデル化に成功し,より大規模な総数の深い(最大201層)のモデルを組むことことに成功した.

6.1 提案後,どこで使われているか使われていないか

DenseNetは良いモデルなのだが,期待されていたほどは,画像物体認識以外の他タスクのバックボーンには使われてこなかった状況ではある.ResNet自体やその発展モデル(ResNext やInception-ResNetなど)を,他のタスク(物体検出やアクション認識など)のバックボーンに用いることが,DenseNet登場以前に流行ってResNet系を使った研究だらけになっていた.よって,それと比較するために,その後も引き続きResNet・ResNextなどをバックボーンに使いつづける論文が継続し,DenseNetが入る隙があまり生まれなかったことが主な理由である.

あと,翌年にSE-Netが登場して,画像タスクでも(自己)アテンションが流行し出すが,それに伴い「SEアテンション+ResNet」がDenseNetより優先されていった上に,画像アテンション自体の発展が期待されるようになっっていったのもDenseNetがそれほど広まらなかった理由である.逆に,軽量化CNNモデル界隈(MobileNetやEfficientNet)では,DenseNetはコンパクトなモデルなので,よく引きあいに出され比較されることともなった.

関連書籍

References

  • [He et al., 2016a] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016
  • [He et al., 2016b] K. He, X. Zhang, S. Ren, and J. Sun. Identity mappings in deep residual networks. In ECCV, 2016.
  • [Huang et al., 2017] Gao Huang,Zhuang Liu,Laurens Van Der Maaten, and Kilian Q. Weinberger. Densely connected convolutional net- works. In CVPR, 2017. 
  • [Krizhevsky and Hinton, 2009 ] A. Krizhevsky and G. Hinton. Learning multiple layers of features from tiny images. Tech Report, 2009
  • [Newell et al., 2016] A. Newell, K. Yang, and J. Deng. Stacked hourglass networks for human pose estimation. In ECCV, 2016.
  • [Simonyan and Zisserman, 2015] Simonyan K, Zisserman A “Very deep convolutional networks for large-scale image recognition” In ICLR, 2015.

参照外部リンク

関連コード

pytorch

paper with code