【畳み込み/CNN】Dilated convolution, Transposed convolution

AI/データサイエンス

過去の記事では、畳み込み(Convolution)とは何かについて、また特殊な畳み込みの手法としてPointwise convolutionとDepthwise convolutionを説明しました。前回記事は以下を参照ください。

【畳み込み/CNN】畳み込み(Convolution)とは何か
前回はCNN(畳み込みニューラルネットワーク)が必要とされる背景として、DNNのデメリットを解説しました。今回は、そもそも畳み込みとは何なのかを解説します。

【畳み込み/CNN】Pointwise convolution, Depthwise convolution
今回は、通常の畳み込みとは異なる、特殊な畳み込みとして、Pointwise convolutionとDepthwise convolutionについて説明します。

今回も特殊な畳み込みの手法として、Dilated convolutionとTransposed convolutionを紹介します。

スポンサーリンク

Dilated convolution

Dilateは”拡張する“と言う意味です。Dilated convolutionは通常の畳み込みとは異なり、畳み込みによって元画像を”縮小”ではなく”拡張”します

以下は、3×3のフィルタで拡大率(dilation rate)が2.0及び3.0のdilated convolutionを示しています。

拡大率2.0の場合であれば、3×3のフィルタが5×5の領域に適用されることになりますが、フィルタのパラメータ数自体は変わらず、9個のままとなります。これは計算量を増やすことなく受容野を拡大できるという大きな利点があります。以下に具体例として、7×7のサイズの元画像に3×3フィルターを適用した場合の、通常のconvolutionとdilated convolutionの結果の違いを示します。

これを見ると直感的に理解できるように、3×3=9個のパラメータを使うだけで、5×5のフィルターを使ったのと同じだけの広範なエリアの情報を要約することができています。そのため、この畳み込みは特に大きな受容野の情報を要約する必要があるタスク、たとえばセマンティックセグメンテーションなどにおいて有用です。セグメンテーションのタスクについては今後記事を掲載しますので、お待ちください。

スポンサーリンク

Transposed Convolution

Transposeは”転置する“と言う意味です。Transposed convolutionは他にも”deconvolution“または”upconvolution“、”fractionally strided convolution”などとも呼ばれ、一言で言えば畳み込み処理の逆を行います。通常の畳み込みは7×7のサイズの元画像に3×3フィルターを適用して5×5の出力を得るように、基本的に画像を小さく(Down Sampling)するために使われますが、Transposed Convolutionは入力画像のサイズを大きく(Up Sampling)するために使われます。

以下では、3×3の入力を、カーネルサイズ3×3のフィルターを使ったTransposed ConvolutionでUp Samplingする具体例を示します。

Transposed Convolutionの手順は以下です。

  • カーネルサイズ(ここでは3×3)、ストライド、パディングを指定
  • 入力の各セルの間にストライド分の間隔を空ける
  • 周囲に(Kernel size – padding数 – 1)分の余白を作る
  • 通常通り畳み込みの演算をする

まずストライド1,パディング1の例を示します。3×3の入力から5×5の出力に、解像度を増やすUp Samplingができていますね。

次にストライド2,パディング0の例を示します。3×3の入力から9×9に解像度を増やすUp Samplingです。通常の畳み込みではパディング数は大きいほど出力のサイズも大きくなりますが、Transposed Convolution の場合はパディング0の方が出力が大きくなるところが直感と反して理解しにくいと思いますので、注意しましょう。

この操作はGANなど生成モデルやFCNなどセマンティックセグメンテーションに代表されるような、言語モデルのエンコーダデコーダモデルのように一度入力を低次元に圧縮したあと再度出力を生成する、つまりUp Samplingが必要な場合に使われます。

コメント

タイトルとURLをコピーしました