膨張畳み込み層 (Dilated Convolution)

記事を共有する:

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

膨張畳み込み層 (Dilated Convolution) とは,カーネルの走査位置を膨張させることにより,少数の層のみで,効率的に広い受容野を確保できる畳み込み層である [Yu and Koltun, 2016].また,DeepLabシリーズの研究チームは,独自にAtrous Convolutionと呼んでいた.拡張畳み込み層とも翻訳される

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

コンピュータビジョン向けの膨張畳み込み層は,当初DeepLabシリーズなどのセマンティックセグメンテーションむけの用途に登場した(2.2節).膨張畳み込み層は,古典的な画像処理操作である「膨張(Dilation)」の(2D)畳み込み層版である.すなわち,膨張畳み込みでは,カーネルサイズを少しだけ膨張させた上で,隙間の画素にはアクセスせずに無視して,カーネルのストライド幅も広くとった飛び飛びの位置で,畳み込みを行う.これにより,広い範囲で(疎に)畳み込むことができるので,少ない層数で効率的に「広範囲の受容野」から畳み込みを(疎に)行うことができる.

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で使用する利点

以前の画像Encoder-Decoderでは「Encoderでのサイズ縮小:プーリング層が担当 → Decoderでのサイズ拡大:転置畳み込み層が担当」という構成が普通であった.それが,プーリング層転置畳み込み層も取り除き,代わりに膨張畳み込み層のみで,画像の(空間的)EncodeとDecodeを担当することもできる.

転置畳込み層を,Decoder/Generator側で膨張畳み込み層として使用する場合,例えばdilated up-convolutionなどと呼ぶ

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

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

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

物体検出でも TridentNet [Li et al., 2019] など以降,効率的なマルチスケールでの画像特徴抽出に,膨張畳込み層が用いられる.しかし,個人的な注意点としては,「序盤層から,膨張率の高すぎる膨張畳込みを使いすぎると,低レベルで小範囲の特徴は,フィルタに学習できないことになる」という懸念である.たとえば,物体検出くらいの粒度でROI領域内全体の特徴ベクトルを用いる場合はよいものの,既に述べた密な推定系のタスクでは,小領域(たとえば3 x 3 や 5 x 5の範囲)向けの畳込みフィルタが学習できていないと,画素ごとの密な推定の精度が不安である.

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

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

物体検出タスクであれば,そのくらいの細かい情報が途中で消えても,領域全体を見るので問題ないと思うが,それでも「小さな物体」まで検出する場合には,小領域の情報もなるべく密に収集するようにしたい.一方,セマンティックセグメンテーション のような「密な推定」タスクや,密で「高画質な画像生成」などのタスクでは,この調整がかなり効いてくる.膨張率の高すぎるカーネルをうっかり設定してしまうと,小領域を無視しすぎてしまい知らないうちに精度低下を招いてるけど気づかない,ということになるので注意したいところだ.

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

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

疎なアクセスを行う膨張畳み込みは,密な画像の予測や生成には向かないと言われがちであったが,画像セマンティックセグメンテーションなどの密な予測問題や,画像対画像変換問題などの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.