Sansan Tech Blog

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

【Intern CV Report】Deep Network Interpolationを試す

f:id:S_aiueo321:20190404193803p:plain

こんにちは,DSOC R&Dグループ インターン生の内田です. 最近自宅にスタンディングデスクを導入したのを皮切りに,家具に無限にお金が溶けていっています. 季節と共に財布も寒くなってきています… 皆さんは暖かくしてください…

さて,今回は新しいスタンディングデスクで週末に遊んでいたDeep Network Interpolation[*1]について,超解像と絡めて紹介したいと思います.

Perception-Distortion Tradeoff

Perception-Distortion Tradeoff[*2]とは,超解像における知覚的品質とMSE(Mean Squared Error)やSSIM(Structural Similarity)のようなメトリックの間に存在するトレードオフのことを指します.

一般的なメトリックは,比較対象と完全に一致する場合に最大 or 最小となるように設計されているおり,これらを最適化してやれば知覚的品質は向上していくという直感を抱きます. しかし,この直感は当たらないことが経験的に知られており,具体的には 過去の連載 で述べたように,メトリックが優位であるにも関わらずGANを用いたモデルに比べてテクスチャの情報が失われるという現象が見られます.

f:id:S_aiueo321:20190417160935p:plain
出力画像の比較(SRResNetはMSE,SRGANはGANを用いて最適化)

このような現象に対し,Baluらは下図のようなPerception-Distortion Tradeoffが存在していることを理論的に示しました. また最適化の際,Adversarial lossの係数を調整することでトレードオフのLower boundを横断できることが示されました.

f:id:S_aiueo321:20191114140315p:plain
Perception-Distortion Tradeoff([2]から引用)

Blauの発表スライド*3のTake-home messagesには次のような言葉があります.

The "optimal algorithm" is application dependent.

つまり,「『自然さ』と『正確さ』のバランスはタスク毎に調整してね」ということです. 医療画像では正確さが重要なので係数を低く設定し,フォトアルバムの画像では自然であることが重要なので係数を高く設定するみたいな感じです.

Deep Network Interpolation

先で述べたように,最適なアルゴリズムは応用依存であり,最適なアルゴリズムを定めるにはAdversarial lossの係数をチューニングする必要があります. ただでさえ学習が不安定で時間もかかるGANの学習を,タスク毎に係数をなめていくのはなかなか気が重い話です*4

CVPR2019で提案されたDeep Network Interpolation (DNI) は,そんな気の進まないチューニングを簡易的に行える手法です. 以下では,DNIについて解説・デモを行います.デモにはPyTorchを用い,コードは下記に置いてあります. github.com

手法

DNIは,複数の学習済みモデルをパラメータ空間上で線形補間することで,出力画像を連続的に変化させる手法です. 具体的には,最適化対象の異なる2つのネットワーク  G_A G_B (構造は共通)のパラメータ \theta_A \theta_Bを次のように補間します*5. $$ \theta_{interp} = \alpha \theta_A + (1-\alpha) \theta_B $$ ここで  \alpha \in [0, 1] です.  \theta_{interp} をパラメータに持つネットワーク G_{interp}の出力画像は, \alphaの値によって G_A から  G_Bの出力へと連続的に変化します. 超解像においては, G_A G_Bにそれぞれ知覚的品質志向のモデルとメトリック志向のモデルを用意しておくことで,簡易的にPerception-Distortion Tradeoffを横断して動作点を定めることができます.

条件

DNIが利用できる条件は次のようになっています.

  1. ネットワーク構造が共通していること.
  2.  G_A G_Bが解くタスクに関連性があり,共通の重みからファインチューニングできること.

前者は対応するパラメータが両方のモデルに存在していなければならないためです. 後者については,以下で図を交えて見ていきます.

モデルをスクラッチで学習する場合,初期値はランダムなので各フィルタの担当する役割もランダムに振り分けられることになります. 対してファインチューニングを行う場合,大体役割が決まった状態からのスタートになるので,程度の違いはあれど似たようなフィルタが同じ位置で獲得できます. Denoisingを学習したモデルのフィルタを可視化した例を,次に示します.

f:id:S_aiueo321:20191114153942p:plain
フィルタの可視化([1]から引用)

図中のN20 run1N20 run2はそれぞれ同じノイズレベルをスクラッチで学習したモデルです. a-ec-fのような似たフィルタが学習されていますが,位置が異なっており単純な補間を行うことはできません. N60 fine-tunedN20 run1を初期値として異なるノイズレベルを学習したモデルであり,同じ位置に似たフィルタが学習されることがわかります. この性質を利用してN20 run1N60 fine-tunedを補間すると,中間ノイズレベルを実際に学習したフィルタと近いフィルタが得られます.

f:id:S_aiueo321:20191114155813p:plain
学習したフィルタと補間したフィルタの比較([1]から引用)
図中のグラフは,各フィルタとN20のフィルタとの相関係数的なものを示しており,学習で得られるフィルタとDNIで得られるフィルタが近いことを示しています.

デモ

今回はopen-mmlab/MMSRが提供する学習済みモデルを利用して,DNIによるPerception-Distortion Tradeoffの横断をやってみます. 以下では,知覚的品質志向のモデルをRRDB_ESRGAN,メトリック志向のモデルをRRDB_PSNRと呼称します.

github.com

DNIをPyTorchで書くと次のようになります. PyTorchの重みはOrderedDictで格納されていているため,netAnetBを補間して新しいOrderedDictを返してやればDNIの処理は終了です.

def interpolate_network(netA, netB, alpha):
    net_interp = OrderedDict()
    for k in netA.keys():
        v_A, v_B = netA[k], netB[k]
        net_interp[k.replace('module.', '')] = alpha * v_A + (1 - alpha) * v_B
    return net_interp

netARRDB_ESRGANnetBRRDB_PSNRとして,alphaを0.1刻みで0から1まで変化させた結果を次のGIF画像で示します. alphaが増えるにつれてテクスチャの情報が増えていきますが,それと同時にRMSEが上昇していくのが確認できます.

f:id:S_aiueo321:20191114162435g:plain
DNIによる出力画像の変化(画像はSet14[*6] baboon)

GIFの上部に表示されている指標をプロットした結果を次に示します. RMSEはDistortion,NIQEはPerceptionに相当*7し,両者ともに低いほうが良い指標になります. 結果を見るといい感じにPerception-Distortion Tradeoffを横断できる結果となりました.

f:id:S_aiueo321:20191114163904p:plain
DNIによる指標の変化

まとめ

今回はPerception-Distortion Tradeoffを簡易的に横断する手法としてDeep Network Interpolationを紹介しました. 学習済みモデルを利用したデモで実際にトレードオフを横断できることを確認しました.

個人の所感として,弊社で取り扱う名刺データにおいてはテクスチャ情報はさほど重要とならないため,超解像タスクとしてDNIを使う必要はないと考えています. 一方でDNIは様々な画像生成タスクに応用可能なため,例えば名刺のホワイトニング処理では,名刺のベースカラーなどによって処理の強さを調整するケースなども考えられるため,うまく使える部分を模索中です.



buildersbox.corp-sansan.com

buildersbox.corp-sansan.com

*1:Wang, Xintao, et al. "Deep network interpolation for continuous imagery effect transition." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019.

*2:Blau, Yochai, and Tomer Michaeli. "The perception-distortion tradeoff." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

*3:https://www.youtube.com/watch?v=3Oetx8DCUCA

*4:個人の意見です.

*5:係数の和を1とすれば3つ以上でも構いません

*6:Zeyde, Roman, Michael Elad, and Matan Protter. "On single image scale-up using sparse-representations." International conference on curves and surfaces. Springer, Berlin, Heidelberg, 2010.

*7:NIQEなどの知覚的指標は,画像単体での品質を図るもので画像復元問題には適さず,さらに微分可能でないため直接的に誤差関数として用いることはできません.

© Sansan, Inc.