Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

【Intern CV Report】超解像の歴史探訪 -2016年編-

f:id:s_yuka:20190318153645p:plain

こんにちは,DSOC R&Dグループ インターン生の内田です. 前回の記事が割合好評とのことで,この度めでたく連載を持つことになりました. 記事を読んでいただいた方や記事のレビューをしていただいた方に感謝申し上げます. これからも読んでいただける記事を書けるように頑張っていきます!

buildersbox.corp-sansan.com

さて,前回はPyTorchを用いてSRCNN[*1][*2]を実装してみました. SRCNNの発表は2014年であり,かなり古めのネットワークと言えます. 今回は,2016年に発表されたモデルを対象に,SRCNNをどのようなアプローチで改善していったかについてまとめたいと思います.

【再訪】SRCNN

SRCNNは3層の畳み込みニューラルネットワーク(CNN)であり,少ない計算量で超解像を行うことができます. 辞書ベースの手法が主流であった中で,CNNを導入したSRCNNは大きなインパクトを与えました. とはいえ,実はSRCNNもスパースコーディングから着想を得た手法であり,3層の畳み込みはそれぞれ ①パッチ抽出と低解像度空間におけるスパース表現,②獲得した表現の高解像度空間に対する非線形写像, ③高解像度画像の再構成 と見なせると論文中で述べられています.

f:id:S_aiueo321:20190312155556p:plain
CNNとスパースコーディングの関係性([1]より引用)

従来手法を踏襲しつつ新しいアプローチを提案する素晴らしい研究ですが,ネットワークサイズや学習時間からは,安定した学習に対する知見が少なかったという背景も見て取れます. SRCNN発表後,深層学習を応用した研究は加速度的に広まっていき,多層化や学習の高速化などの知見も多く溜まっていきました. 2016年頃には,それらの知見が超解像の分野に還元され始め,研究をまた次のステージへと推し進めていくこととなりました.

深層超解像モデルの発展(-2016)

ここでは,2016年発表の Very Deep Super Resolution (VDSR)[*3], Fast Super-Resolution Convolutional Neural Networks (FSRCNN)[*4], Efficient Sub-Pixel Convolutional Neural Network (ESPCN)[*5] という3つのモデルを紹介します.それぞれどのような改善・工夫を行ったかをSRCNNと比較しながら述べていきます.

VDSR

VDSRは,SRCNNを多層化したモデルと言われており,事前拡大した入力画像に20層の畳み込みを適用します. 元来,深いモデルは学習が難しいとされ,途中で勾配が爆発/消失するという問題がありました. 特に,学習率を高く設定すると勾配爆発が起きやすく,誤差関数の収束までに多くの時間を要していました.

f:id:S_aiueo321:20190312163201p:plain
VDSRの構造([3]より引用)

VDSRでは,多層化による勾配の問題を,Residual構造と勾配クリッピングを導入して解決しています. Residual構造とは,畳み込んだ特徴と入力を足し合わせて出力する構造で,先の図でも入力画像を最後に足し合わせて出力画像とします. 超解像の入出力画像は,対応画素同士が近い値を取るため,中間特徴マップの絶対値は小さくなります. 特徴マップの絶対値と勾配の大きさには相関があるため,大きな学習率を設定しても勾配爆発を抑えることができます. また,勾配クリッピングとは,勾配値が閾値を超えた場合に値を修正する方法で,これも勾配爆発/消失を抑えるはたらきを持ちます.

VDSRは,これらの工夫により,SRCNNに比べて104 倍の学習率を設定しても安定した学習が可能となりました. その結果,SRCNNで約3日間かかっていた学習が,畳み込み層が20層に増えたにも関わらず,約4時間に短縮されました. メトリックとしても,SRCNNに比べてPSNRが0.5-1.0[dB]ほどの向上があったと報告されています.

FSRCNN

FSRCNNは,SRCNNの著者がSRCNNの高速化を目指して改良を加えたモデルです. SRCNNが事前拡大した画像に畳み込みを適用するのに対し,FSRCNNは低解像度画像に直接畳み込みを適用した後にDeconvolutionを用いて拡大します(下図). Deconvolutionの詳細は後述します. 超解像分野では,前者の方法をPre-upsampling SRといい,後者の方法をPost-upsampling SRといいます.

f:id:S_aiueo321:20190313105442p:plain
SRCNN(図中上)とFSRCNN(図中下)の比較([4]より引用)

Pre-upsampling SRでは,補間画素にも畳み込みを適用するため,近傍画素の情報を取り込むにはカーネルサイズを大きくしなくてはなりません. さらに,倍率が大きくなると畳み込み演算の大半が補間画素に対する演算となり,無駄が多くなります. Post-upsampling SRを採用すると,畳み込み演算の対象は全て真の画素であるため無駄な演算を減らすことができ,カーネルサイズも小さくできます. 論文では,Post-upsampling SRを採用することで8.7倍の高速化が可能になったと述べられています. また,カーネルサイズの大きいレイヤを複数のカーネルサイズの小さいレイヤで置き換えることにより,計算量の削減も行なっています.

それ以外の細かな工夫を通して,全体として40倍の高速化を達成し,PSNRではx2とx3の倍率で従来方法を上回ったと報告しています.

ESPCN

ESPCNは,FSRCNNと同じようにPost-upsampling SRを採用したネットワークですが,拡大にDeconvolutionではなくSubpixel Convolutionを用います.

Deconvolutionはその名前から畳み込みの逆演算と思われがちですが,内部的には通常の畳み込みと変わりません.一度マップを拡大してから畳み込むことで拡大したマップを得る方法です. 下図はDeconvolutionの演算過程を示していて,青が入力画素,緑が出力画素,空白は0や近傍の値で埋められた画素を表しています.

f:id:S_aiueo321:20190313114559p:plain
Deconvolutionの演算過程([*6]より引用)
Deconvolutionはよく使われる手法ですが,いくつかデメリットがあります. まず一つ目は,畳み込みに関与する入力画素数が位置によって異なることで,出力マップにCheckerboard Artifactという格子状の模様が出てきてしまいます. 二つ目は,補間画素に対する無駄な演算による速度低下です(FSRCNNで同じような議論してました).

Subpixel Convolutionでは,下図のように拡大前のマップに直接畳み込みを適用(左から3->4番目)した後,再配置(左から4->5番目)を行なって拡大します.

f:id:S_aiueo321:20190313114035p:plain
ESPCNの構造([5]より引用)
以下では図に従い,倍率 r=3として説明します. 画像は2次元情報ですので,画像サイズを 3倍に拡大した場合,画素数は 3 ^2 = 9倍になります. 畳み込みによって画素数を増加させる場合,中間的にマップ数を出力マップ数の 9倍にします. 最後に 9枚の中間マップを,図中の色に対応するように 3 \times 3のグリッド内に再配置して拡大します. Subpixel Convolutionを用いることで,畳み込みに関与する入力画素数が均一となり,Checkerboard Artifactを抑えて綺麗に画像を復元できると報告されています[*7]. また,FSRCNNと同様に補間画素への演算が減るため,SRCNNから10倍ほど高速化されるとも報告されています.

まとめ

長くなってしまいましたが,今回は2016年に発表された超解像モデルについてまとめました. 各モデルのポイントを一言でまとめると,

  • VDSR: Residual構造による学習の安定化と高速化
  • FSRCNN: Post-upsamplingによる高速化
  • ESPCN: Subpixel ConvolutionによるArtifactの低減

という感じになります.これらは,最新の論文でも登場する基本的なテクニックとなっています. 超解像に限らず,ベースラインからの時系列をじっくり追っていると,どういう改善が見られたのか,ベースラインと改善手法との間に界隈でどんな動きがあったのかを体系的に理解できるのでオススメです! 次回は2017以降をまとめられるといいかと思います(締め切りギリギリにならないように…).

*1:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang. "Learning a Deep Convolutional Network for Image Super-Resolution", Proc. of European Conference on Computer Vision (ECCV), 2014

*2:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang. Image Super-Resolution Using Deep Convolutional Networks, IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI), 2015

*3:Jiwon Kim, Jung Kwon Lee and Kyoung Mu Lee, "Accurate Image Super-Resolution Using Very Deep Convolutional Networks", Proc. of IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016.

*4:Chao Dong, Chen Change Loy, Xiaoou Tang. Accelerating the Super-Resolution Convolutional Neural Network, Proc. of European Conference on Computer Vision (ECCV), 2016

*5:Shi, Wenzhe, et al. "Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network." Proc. of IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016.

*6:Dumoulin, Vincent, and Francesco Visin. "A guide to convolution arithmetic for deep learning." arXiv preprint arXiv:1603.07285 (2016).

*7:Aitken, Andrew, et al. "Checkerboard artifact free sub-pixel convolution: A note on sub-pixel convolution, resize convolution and convolution resize." arXiv preprint arXiv:1707.02937 (2017).

© Sansan, Inc.