膨張畳み込み(Dilated Convolution)

1. 膨張畳み込み(Dilated Convolution)とは [概要]

膨張畳み込み層(Dilated Convolution) とは,カーネルを膨張させた畳み込み層である [Yu and Koltun, 2016].膨張畳み込み層は,古典的な.すなわち,カーネルサイズを膨張させた上で,隙間はアクセスせずに無視し,カーネルのストライド幅も広くとって畳込む.これにより,カーネルを移動させた各位置において,広い範囲で(疎に)畳み込むので,少ない層数で,効率的に広範囲の受容野から畳み込みを(疎に)行うことができる.

この記事では,膨張畳み込みの処理と用途の紹介(2節)および,その使われどころと利点の整理を行う(3節).

親記事:畳み込み層(convolution layer)とその発展型

2. 膨張畳み込みの処理・用途

2.1 膨張畳み込みの処理

膨張畳み込み(Dilated Convolution))
図1 膨張畳み込み(Dilated Convolution)

図1は,膨張畳み込みを,その膨張の割合である膨張率(dilatation rate, dilation factor)の値を変えて図示したものである.このように,膨張畳み込みでは,カーネルも膨らんでいるので,スライディングウィンドウ走査はストライド1で密に走査することは行わず,2~4ストライド程度でスキップした位置で畳み込む.

この「スキップ操作 + カーネルの膨張」の組み合わせにより,受容野の範囲を拡大させることができ,なおかつ,効率的に広範囲のコンテキストを取り入れることができる.よって,膨張畳み込み層は,「少ない層数で,広範囲のコンテキストを畳み込むことができる」利点を持つ.一方で,膨張後のカーネル値は,アクセスする座標(図1のオレンジ色の画素)の間にある畳み込ないので,つまり捨てられる領域を無視している.よって,通常の畳み込み層よりも疎な特徴のフィルタリング処理にはなると言える(3節で,これらの利点・注意点についてより詳しく論じる).

2.2 膨張畳み込みの用途

画像のセマンティックセグメンテーション 向けの,画像Encoder-Decoderで使用されることが提案されたのち,Encoder-DecoderFCNで学習する「密な推定タスク」において,2D膨張畳み込みがよく使用される(ちなみに DeepLabシリーズでは「2Dピラミッド膨張プーリング」も提案された.3.4節).近年のCNNやFCNでは,計算速度のリアルタイム性が重視されるので,計算効率性も高いうえに認識性能も高い各種タスク向けのネットワークを設計する上で,膨張畳み込みが重宝されるようになったわけである.

逆に,密な画像生成(StyleGANなど)のGeneratorでは,畳み込み層は膨張はさせず,普通の(密なカーネルの)畳み込み層のまま使用することが多い.これら画像生成ネットワークでは,計算効率性をそれほど求めないのもあるが,それ以上に「高画質画像の生成のために,全ての画素の情報を網羅していきたい」ので,膨張やスキップ幅のおおきなストライド処理をさせたくないからである.同じことは,画像対画像ネットワークを,画像復元系のタスク(Inpaintingにボケ除去や超解像など)で用いる場合も言える.

また画像認識・生成以外でも,WaveNetなどの「(生の)音響波形生成モデル」において,1D(時間方向の)膨張畳み込みが用いられて以降,ASR(音声認識)など音声系タスクにおいても,1D膨張畳込みがよく用いられる.

3. 登場までの経緯をもとに,利点・注意点の整理

3.1 登場の経緯

ResNet登場以前の「2014~2015年頃」は,VGGNet-16層をCNNバックボーンに用いるのが標準的であった.しかし,セマンティックセグメンテーション問題をこの設計で学習させようとすると,画素ごとのクラス識別にはより広いコンテキストが必要となるが,当時はこれ以上層を深くできず,畳み込み層の総数は同じままで,受容野を広げる工夫が必要であった.

そこで, [Yu et al., 2016] は,実時間計算向けのウェーブレット分解の目的などで提案されたいたatrousアルゴリズムをもとに「膨張畳み込み層」を提案した.また,同時研究であるDeepLab v1でも,膨張畳み込み層の使用が提案された (DeepLabチームは,当初「atrous convolution」とも読んでいたが,のちにビジョン業界としては「dilated convolution」の呼びかたに統一される)

また,DeepMind の WaveNet [Oord et al., 2016] でも,1D膨張畳み込み層が用いられた.これをきっかけに,音響系列データ界隈の変換・生成問題(ボコーダやTTSなど)においても,1D膨張畳み込み層が使用されていく.

3.2 Encoder-Decoder,膨張畳み込み層に差し替える利点

膨張畳み込み層は,「ダウンサンプリング」と「アップサンプリング」の両方の役割を内部的に担当できる層でもある.また,大きめの膨張率と大きめのストライド幅で2D膨張畳込み層を使うことで,プーリング層による「ダウンサンプリング」や,転置畳み込み層による「アップサンプリング」を,共に双膨張畳み込み層だけに担当させることもできる.

以前のEncoder-Decoderでは「Encoderでのサイズ縮小:プーリング層が担当 → Decoderでのサイズ拡大:転置畳み込み層が担当」であった.それが,プーリング層も転置畳み込み層も取り除き,膨張畳み込みのみで,画像の(空間的)EncodeとDecodeを担当することもできる.(転置畳込み層を,Decoder Generator側で膨張畳み込み層として使用する場合,例えばdilated up-convolutionなどと呼ぶ)

ただ,膨張畳み込みにしたほうが,必ずしもよいわけではないことには注意である.膨張畳み込み層が登場した当時の「20層くらいまでしか組めなかったResNet以前のCNN(2014~2015)」では,膨張畳み込みの受容野拡大は有利であったのだが,残差接続でネットワークをかなり深くできるようになった2015以降では,(層の数は100~150層程度と深いが)ResNetでなら,膨張畳み込み層を使用しないでも,普通の畳込み層を大量に用いることで,広い受容野のコンテキストは十分得られるわけである.

3.3 注意点:低レベル特徴の取りこぼし

物体検出でも TridentNet[Li et al., 2019] など以降,,効率的なマルチスケールでの画像特徴抽出に,膨張畳込み層が用いられる.しかし,個人的な注意点としては,「序盤層から,膨張率の高すぎる膨張畳込みを使いすぎると,低レベルで小範囲の特徴は,フィルタに学習できないことになる」という懸念である.

たとえば,物体検出くらいの粒度でROI領域内全体の特徴ベクトルを用いる場合はよいものの,既に述べた密な推定系のタスクでは,小領域(たとえば3 x 3 や 5 x 5の範囲)向けの畳込みフィルタが学習できていないと,画素ごとの密な推定の精度が不安である.

つまりは特徴マップの更新において,「疎 < 中 < 密 」の要素と,「小領域 < 中領域 < 大領域 」の要素が,それぞれどの程度なのかを意識するのが,膨張畳込みでは重要となる.畳込み層やプーリング層では「ストライド幅」でこれらの度合いを意識するが,膨張畳み層を導入すると,膨張率で,それら「疎密」と「受容野の大小」を調整することになると考えると良い.つまりは,「CNN全体で良い画像特徴ピラミッドが形成できているかどうか」と,この「膨張畳み込みカーネルの疎密度合い」は,関連しているものの,別要素もあるので,注意したい.

例えば,初期層で「空間サイズ [3×3],膨張率 = 3 (図1 右側)」の転置畳込み層を,CNN序盤すぐに2層用いることを考える.すると図3 のオレンジの部分以外の画素は,まったく情報として加味されないフィルタリングになる.よって,細い1~2画素のエッジやテクスチャは無視されてしまう.

物体検出タスクであれば,これくらい細かい情報が消えてても領域全体を見るので問題ないと思うが,それでも「小さな物体」まで検出する場合には,小領域の情報もなるべく密に収集するようにしたいものである(※ 近年の物体検出の研究では,エッジ処理を見越して「更に高FPSを達成できる高速処理」を提案することが大きな主眼でもある.よって,ベンチマークを構成する「中サイズ物体」さえ高精度に検出できれば性能はそこそこよくなるので,あとは効率計算性重視の側面があることには注意).

セマンティックセグメンテーション のような「密な推定」や,密で「高画質な画像生成」などのタスクでは,この調整がかなり効いてくる話である.よって,膨張率の高すぎるカーネルをうっかり設定してしまうと,小領域を無視しすぎてしまい知らないうちに精度低下を招いてるけど気づかない,ということになるので注意したい.

もう少し一般化して述べておくと,「(小領域だけに限らず)はたして自分の学習しておきたい解像度のフィルタが,小中大のスケールで,それぞれきちんと拾えているか」を気を付けてネットワーク設計することが(畳み込み層では)大切である.

3.4 ピラミッドプーリングでの膨張の使用

膨張畳み込み層でコンテキスト拡大はできるのだが,PSPNetで提案されたピラミッド式のグローバル平均プーリングのように,プーリング層側で対処することも可能である.DeepLab v3でも,ASPPモジュールにて,ピラミッドプーリングの提案があった [Chen et al.,2016].

疎なアクセスを行う膨張畳み込みは,密な画像の予測や生成には向かないと言われがちであったが,画像セマンティックセグメンテーションなどの「密な予測(Dense Prediction)」問題や,画像対画像変換問題などの,Encoder-Decoderを用いる各種画像問題において,膨張畳み込みは活用されることとなる(畳み込み層で用いるか,終盤のグローバル平均プーリングの中で用いるかは,狙いどころ次第である).

関連記事

関連書籍

References

  • [Chen et al., 2016] Chen, L.C., Zhu, Y., Papandreou, G., Schroff, F., Adam, H.: Encoder-decoder with atrous separable convolution for semantic image segmentation. In: arXiv preprint arXiv:1802.02611 (2018)
  • [Li et al., 2019] Li, Y., Chen, Y., Wang, N. and Zhang, Z.,”Scale-aware trident networks for object detection.” In CVPR 2019.
  • [Yu and Koltun, 2016] Fisher Yu and Vladlen Koltun, “Multi-scale context aggregation by dilated convolutions,” in International Conference on Learning Representations, 2016, pp. 1–10.