転置畳み込み(Transposed Convolution, Deconolution)

1. 転置畳み込み層(Transposed Convolution)とは [概要]

転置畳み込み(Transposed Convolution)は,2D畳み込み層と反対の操作を行う層である [Long et al., 2014].(順)畳込み層の逆操作であるので,各論文ではDeconvolution(逆畳み込み)とも呼ばれる.FCN型の画像画像Encoder-Decoder内のDecoderや,深層生成モデルの画像Generatorなどにおいて,特徴マップの空間サイズ拡大(アップサンプリング)を,効率的に行う用途で転置畳み込み層が用いられる.

この記事では,転置畳み込み層の処理を,まずは天下り的に先に紹介する(2.1節).転置畳み込みの別実装方法である,上昇畳み込み(up-convolution)についても述べる(2.2節).その後,あらためて,転置畳み込みの登場の前後の経緯(3.1,3.3節)を紹介する.それにより,なぜ転置畳み込み層を使うかの理由である「効率化」(3.2節)についての理解を,転置畳み込みの使われどころ(3.3節)とともに深めておきたい.

転置畳み込みでは,畳み込み層(基本型)と逆の操作を行う(2節,図1).これにより「(1)カーネルサイズに沿った空間サイズのアップサンプリング」と「(2)空間畳み込み処理」の2つを,同時に効率的に実行できる.画素ごとに補間値を算出する必要のあるバイリニア補間でのアップサンプリングと比べるて,転置畳み込み層では,学習可能なアップサンプリング層であるので,軽量な畳み込み計算で済ませることができ効率が良い.

画像Encoder-Decoderでは,Encoderに配置したプーリング層(ダウンサンプリング担当)と同じ個数・同じタイミングだけ,Decoderに転置畳み込み層(アップサンプリング担当)を配置し,Decoderで入力画像のサイズまで復元していくことになる.

2. 転置畳み込みの処理

2.1 転置畳み込み:畳み込みの逆操作

転置畳み込み(Transposed Convolution, deconvolution)
図1 転置畳み込み(Transposed Convolution, Deconvolution)

転置畳み込み(逆畳み込み)の処理を,「通常の畳み込みの反対の操作(= deconvolution)」の視点で紹介していく(図1).図1を,逆に右から左に見てもらうと,通常の2D畳込み層の操作(一般型)になっていることがわかると思う.つまりは,話は単純で,畳込みの逆のこと行うだけである(だからde-convolutionとも呼ぶ).

転置畳み込みの演算(図1 右向き方向)は,畳み込み(図1 左向き方向)の逆の操作を行う.すなわち,各注目点の入力 [1 x 1]の値 $v$をもとに,strideの幅で各位置で [k x k]のカーネルの重みによって,[k x k]サイズに拡大された出力を各点で得る.そして,該当位置に $v \times k_(i,j)$の値を足し合わせていく($k_{(i,j)}$はカーネル内の,座標$(i,j)$における値).

図1の例のように,例えばstride = 2 カーネルサイズ [2 x 2] で転置畳み込み層を挿入しておくと,出力画像は縦も横 stride = 2倍の[4 x 4]になる.

これは,画像CNN Encoder中で,プーリングを[2 x 2],stride = 2で行う「ダウンサンプリング」と,「反対の」アップサンプリング操作を(DecoderやGeneratorで)担当できることに相当している.

2.1.1 「転置」という呼び方の由来

層間の行列操作の目線で考えると,(順)畳み込み層では,$\bm{x}^{(l+1)} = \bm{W} \bm{x}^{(l)} $という演算である.それが,転置畳み込み層では,その逆操作を実施するので,順畳み込みの重み行列を転置したものを用いて$\bm{x}^{(l+1)} = \bm{W}^\mathsf{T} \bm{x}^{(l)}$という演算を行うことに対応している.

このように,元の重み行列の転置行列を用いる演算に(ニューラルネットワーク的にも)相当するので,「転置」畳み込み層と呼ばれるようになった.ただし,個人的には「deconvolution」のほうが,「畳込みの逆操作であること」が理解しやすい呼び名であるので好きである.

※ Kevin Patrick Murphy氏の新しいテキスト前編(Introduction)(14.2.2節)では,参照しているTowards Data Scienceの記事等を根拠に,「deconvolutionは,古典的なブラー除去などの画像処理で,逆フィルタリングとして用いられる際の名称であり,転置畳み込みをdeconvolution と呼ぶのは正確ではない」というスタンスを取っている.一方で,この記事での私は,deconvolution (layer)を,素直にconovolution layerの逆操作と見なし,deconvolution = transposed convolutionと考えた方が,「畳み込みの逆操作であることが『de-』という名前からすぐ理解できるので,Transposed- よりもわかり良い名前である(=Transposed Convolutionという名前は微妙に分かりづらい)」という立場で説明した.

2.2 上昇畳み込み:「サイズ拡大→ 畳み込み」による別実装.

上昇畳込み(up convolution)
図2 上昇畳込み(up convolution)

転置畳み込みと等価な計算を,以下の「上昇畳み込み(up convolution)」とよばれる2ステップ計算でも実装できる(図2):

  1. 入力値を,それぞれカーネルサイズだけ周辺に配置して,元画像を先に拡大する(※ 補間ではないことに注意.入力値をコピーして周辺に拡大しているだけ)
  2. 拡大された画像を用いて,順畳み込みを行う.

2.1節の原義(=畳み込みの反対)通りの実装をイメージしにくい人は,この「上昇畳み込み」の実装の方が,わかりやすいかもしれない.

3 登場の前後の経緯と,使用目的・役割の整理

3.1 登場前夜の様子

FCNやU-Netなどが登場する以前の,初期のセマンティックセグメンテーション向けの画像Encoder-Decoderでは,Encoderのプーリング層と同じ数だけアップサンプリング層 (画像補間により空間サイズを拡大する層)を配置し,画像サイズを戻していくことをしていた.例えば,転置畳み込み層が登場する前の研究成果であるSegNetでは,Decoder側ではアップサンプリング層を用いて空間方向にバイリニア線形補間している.

3.2 登場:「効率的な空間サイズ拡大」という役割として

そんな中,FCN(Fully Convolutional Networks) [Long et al., 2015] は,セマンティックセグメンテーション向けの画像Encoder-Decoder内のDecoderにおいて,アップサンプリング層の代わりに,転置畳み込み層を学習することを提案した.(論文中3.3節を参照のこと).

3.1節の「バイリニア線形補間によるアップサンプリング」は,画素ごとに補間値を算出する必要があるため,出力サイズが大きくなるほど,計算コストが増してしまうデメリットがあった.それを「転置畳み込み層によるアップサンプリング」に替えると,軽量な畳み込み演算での画像サイズアップサンプリングが行えるようになった (計算コストの具体的な議論については,FCN元論文 [Long et al., 2015] 中の提案部「3.3節」の主張を参照のこと).

3.3 その後の使用されどころ

FCNやU-Netなどの画像Encoder-Decoder構造は,各種の画像変換問題や人物姿勢推定などの問題にも使用されていった.よって,それらの中でも,画像Encoder-Decodと共に,転置畳み込み層が標準的に使用されていくこととなった.

たとえばU-Netでは,各ピラミッドレベルのDecoderにおいて,次のピラミッドレベルに空間サイズを広げる最に,転置畳み込み層を毎回使用している.

またFCNやU-Netと同時期(2015年頃)に同時研究としてarxiv上に登場しはじめた「CNNベースの深層生成モデルの,画像Generator(もといDecoder)」においても,初期手法のイス生成 [Dosovitskiy]や DCGAN [Radford et al., 2015] などで転置畳み込みが使用されて以降,よく転置畳み込み層が使用されていった.また,pix2pixでU-Net構造が採用されたことで,画像対画像変換でもよく使われていく.

一方で,膨張畳込み(dilated convolution)変形可能畳込み(deformable convolution)などが登場して以降は,それらもアップサンプリング機能も持つために,転置畳み込みの出番がへっていきつつある.特に,セマンティックセグメンテーションなどの密な推定タスクでは,転置畳み込みの代わりに膨張(収縮)畳込み層にアップサンプリングの役割を担当させることが多くなっていった.

4. まとめ

この記事では,学習可能な「アップサンプリングかつ補間操作」を効率に行うことができる「転置畳込み層」について紹介した.

図1で示したとおり,(順)畳込みの反対の操作をしている単純な仕組みであるが,バイリニア線形補間より計算資源的にも有利なアップサンプリングができるので,効率的な「学習可能アップサンプリング層」として使用できる(2節).

また,その効率性ゆえFCNタイプの,画像Encoder-Decoderや,画像の深層生成モデルのGenerator(=Decoder)で,転置畳み込み層によるアップサンプリング層がよく使われることになったことを紹介した(3節).しかし,その後,他の学習可能な畳込み層(膨張畳込みや変形可能畳込み)が登場すると,それらが代わりにアップサンプリング層の役割を担当するようにもなっていった.

関連記事

関連書籍

References

  • [Dosovitskiy et al., 2015] Dosovitskiy, Alexey, Springenberg, Jost Tobias, and Brox, Thomas. Learning to generate chairs with convolutional neural networks. arXiv preprint arXiv:1411.5928, 2014.
  • [Long et al., 2015] Long, J., Shelhamer, E.; Darrell, T. “Fully convolutional networks for semantic segmentation. In CVPR, 2015
  • [Radford et al., 2015] Alec Radford, Luke Metz, and Soumith Chintala. Unsupervised representation learning with deepconvolutional generative adversarial networks. arXiv preprint arXiv:1511.06434, 2015.
  • Stanford University, CS231n – Deep Learning for Computer Vision : Lecture 11: Detection and Segmentation , Fei-Fei Li & Justin Johnson & Serena Yeung.

参照外部リンク