style transfer

30
Style Transfer 概 2016 概 12 概 17 概 概概概 Style Transfer 概概概概概概概概概概概概概概概概概概概概概概概 概概概概 概概概概概概 .体 概概概概概概概概概概 概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概概 .. 1 / 16

Upload: zaburo

Post on 15-Apr-2017

99 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Style transfer

Style Transfer 概観2016 年 12 月 17 日

今回は Style Transfer に関する手法についていくつかの論文を紹介します.手法自体はシンプルですがとても面白いです.表紙スライドの背景にはスタイルとしてよく使われるゴッホの星月夜を使ってみました.

1 / 16

Page 2: Style transfer

Style Transfer とは

Gatys et al. 2016 より引用

ある画像にコンテンツ ( 内容 ) を損なわないように別の画像のスタイル ( 画風 ) を写す手法のこと.いわゆる画風変換Neural Network を使った Style Transfer が Gatys et al. 2016a で提案され(プレプリント版 Gatys et al. 2015 は 2015 年 8 月)その後続々と改良版が提案されている

Page 3: Style transfer

Gatys et al. 2016a で提案された手法の概要

コンテンツ画像

生成画像を,はじめ一様乱数で初期化し,勾配降下法でスタイルの損失とコンテンツの損失が小さくなるように変化させる

スタイルの損失

コンテンツの損失

生成画像

この線形和を最小化するように勾配降下法を行う

�⃗�← �⃗�−𝜆𝜕ℒtotal

𝜕�⃗�

ℒtotal=𝛼ℒstyle+𝛽ℒcontent

:学習率

スタイル画像

Page 4: Style transfer

Gatys et al. 2016a で提案された手法の概要

コンテンツ画像

スタイル画像

生成画像を,はじめ一様乱数で初期化し,勾配降下法でスタイルの損失とコンテンツの損失が小さくなるように変化させる

スタイルの損失

コンテンツの損失

生成画像

:学習率

この線形和を最小化するように勾配降下法を行う

�⃗�← �⃗�−𝜆𝜕ℒtotal

𝜕�⃗�

ℒtotal=𝛼ℒstyle+𝛽ℒcontent

Page 5: Style transfer

Gatys et al. 2016a で提案された手法の新しい点この損失関数 と を計算するのに訓練済み CNN を使う

conv53conv52conv51

conv 43conv 42conv 41

conv 22conv 21

Dense

Dense

conv12conv11pooling

conv 33conv 32conv 31

pooling

pooling

pooling

pooling & flatten

VGG 16 layers (Simonyan & Zisserman, 2014)

Dense

画像認識のコンペで優勝したモデル VGG を使う を入力した時の中間層 の出力の 番目のチャンネルの座標 の値を次で表す• コンテンツの損失• スタイルの損失次の Gram matrix を用いて

(は層の画素数などの違いを吸収する係数)

2 次元座標をの 1 文字で表す

Page 6: Style transfer

Gatys et al. 2016a で提案された手法の新しい点この損失関数 と を計算するのに訓練済み CNN を使う

conv53conv52conv51

conv 43conv 42conv 41

conv 22conv 21

Dense

Dense

conv12conv11pooling

conv 33conv 32conv 31

pooling

pooling

pooling

pooling & flatten

VGG 16 layers (Simonyan & Zisserman, 2014)

Dense

画像認識のコンペで優勝したモデル VGG を使う を入力した時の中間層 の出力の 番目のチャンネルの座標 の値を次で表す• コンテンツの損失• コンテンツの損失次の Gram matrix を用いて

(は層の画素数などの違いを吸収する係数)

2 次元座標をの 1 文字で表すGatys et al. 2016a では VGG19 が使われていますが VGG19 でも VGG16 結果があまり変わらず,以降の手法で VGG16 が使われているためVGG16 で例を書きました.

Page 7: Style transfer

コンテンツの損失について

conv53conv52conv51

conv 43conv 42conv 41

conv 22conv 21

Dense

Dense

conv12conv11pooling

conv 33conv 32conv 31

pooling

pooling

pooling

pooling & flatten

VGG 16 layers (Simonyan & Zisserman, 2014)

Dense

コンテンツの損失

画像を分類するように訓練された VGG では左図の下層に行けば行くほど分類に必要な情報が強調されるようになるそのため下層のみを使うことで色などのスタイルに依存しない損失を計算できる論文では特に言及されていないが,同じ座標を比較しているのでエッジなどの特徴的な部分は変換後も大きくはずれないはず( conv と pool で小さくなるので多少はずれうる)

Page 8: Style transfer

選ぶ層の深さによるコンテンツ表現の違い

Gatys et al. 2016a より引用

コンテンツの損失を計算するときに使う層として conv4_2 が選ばれているが,これは(おそらく)実験的に最もそれらしい画像が得られる層を選んでいるのだと思う(たぶん).左の図はコンテンツの損失に使う層によって結果として得られる図がどのように変化するか見たもので, conv4_2の方がそれっぽくなっていることがわかる.

Page 9: Style transfer

スタイルの損失について

conv53conv52conv51

conv 43conv 42conv 41

conv 22conv 21

Dense

Dense

conv12conv11pooling

conv 33conv 32conv 31

pooling

pooling

pooling

pooling & flatten

VGG 16 layers (Simonyan & Zisserman, 2014)

Dense

スタイルの損失

行列各要素は同じ層の各チャンネル間の相関を表す

コンテンツの損失と違って各層の出力を Gram matrixにしてから二乗誤差を計算しているのでどの場所に何があるかの配置は損失に関係してこない

Page 10: Style transfer

個人的おもしろポイントと問題点• 個人的おもしろポイント一般に損失関数と言えば,二乗誤差などの簡単な関数を使うが

CNN という非常に複雑な関数を損失関数として使ったのが面白い!転移学習とも違う学習済みモデルの使い方( Deep dream と似たような枠組みだが実用性が高い)• 問題点生成のために順伝播・逆伝播を繰り返すのでとにかく遅い!

1 枚の画像を生成するのにハイエンド GPU 使っても 10 秒以上かかるとのことGTX980Ti と Tensorflow を使って実験してみたところ

1000 イテレーションで数分くらいだった

Page 11: Style transfer

Gatys et al. 2016a で提案された手法の概要 ( 再掲 )

コンテンツ画像

生成画像を,はじめ一様乱数で初期化し,勾配降下法でスタイルの損失とコンテンツの損失が小さくなるように変化させる

スタイルの損失

コンテンツの損失

生成画像

この線形和を最小化するように勾配降下法を行う

�⃗�← �⃗�−𝜆𝜕ℒtotal

𝜕�⃗�

ℒtotal=𝛼ℒstyle+𝛽ℒcontent

:学習率

スタイル画像

Page 12: Style transfer

高速化するために…コンテンツ画像

生成画像

なんらかの関数

一様

入力

一様乱数 とコンテンツ画像 を入力し画風変換された画像を出力する変換を何らかの関数で近似したい!→ ここにも CNN を使う!

Page 13: Style transfer

Ulyanov et al. 2016a で提案された手法の概要コンテンツ画像

スタイル画像

ノイズとコンテンツ画像から画像を生成する CNN を学習する

生成画像

GeneratorNetwork VGG

Gatys et al. 2016a では学習はしていない一様

入力

画像を生成

損失とその勾配を計算

入力

入力 入力500 倍速い!

Page 14: Style transfer

Ulyanov et al. 2016a のネットワーク構造

図は Ulyanov et al. 2016a より引用

図は texture generation のタスクの場合.Style transfer の場合はまであって各にコンテンツ画像が concat されるGatys et al. 2016a では毎回 1 から生成していたのでスタイルの損失とコンテンツの損失の重み付けを画像ごとにできたが,この手法では学習時に設定した重み付けがテスト時にも使われ調節ができない→ 入力するノイズのスケールを調節することで調節できることを発見ResNet っぽいが逆に Upsampling で大きくなっていく

Page 15: Style transfer

Ulyanov et al. 2016a における重み付け

Ulyanov et al. 2016a より引用

ノイズのスケールを変化させたときの生成画像の変化スケールが小さい方がコンテンツ(枝にとまった鳥)が大きく残り,スケールが大きくなるとほぼスタイルだけになっている

Page 16: Style transfer

Johnson et al. 2016 で提案された手法の概要

図は Johnson et al. 2016 より引用

CNN は Downsampling→Residual blocks→Upsampling という構成になっているスタイルとコンテンツの重みの調整はおそらくできない(言及されていない)がGatys et al. 2016a のおよそ 1000倍の速度で画像を生成できる(実装によっては入力画像にノイズを入れて重みの調節をしているものも)この論文のおもしろポイントは同じネットワークを使って画像の高解像度化ができることを示していること→ 大きな CNN を使った損失関数は Style Transfer 以外でも利用できる

Page 17: Style transfer

Johnson et al. 2016 による高解像度化

Johnson et al. 2016 より引用

Page 18: Style transfer

Dumoulin et al. 2016 のアイディアこれまでの手法では 1 つのスタイルへの変換を 1 つの CNN で行っている→ 複数のスタイルへの変換を 1 つの CNN で行うことはできないのか?同じ画家の絵なら同じような筆遣いが見られる → ある程度共有できるはず!

Page 19: Style transfer

Dumoulin et al. 2016 における発見we found a very surprising fact about the role of normalization in style transfer networks: to model a style, it is sufficient to specialize scaling and shifting parameters after normalization to each specific style.

Dumoulin et al. 2016 より引用最近の CNN では一般に Batch Normalization というテクニックが使われている→ 伝播してきたミニバッチの中で各次元の平均を 0 に分散を 1 にするBatch Normalization をかけた後に適当な定数を指定しておいてこれをスケールしたりシフトしたりすることがあるがこのスケールやシフトのパラメータを学習させてスタイル毎に切り替えるだけで(他の畳み込み層などのパラメータは同じのままで)複数のスタイルに変換することができるということを発見したこの発見に基づき conditional instance normalization を提案した

Page 20: Style transfer

Conditional instance normalization

学習するスタイル数を,このバッチで使うスタイルの番号をとするConditional instance normalization ではチャンネル毎に学習対象となる次元ベクトルを用意しておき入力を正規化した後 でスケールし でシフトしたものを出力する

図は Dumoulin et al. 2016 より引用

Page 21: Style transfer

実行例(同じ画家の複数の絵から学習)10種類のモネの絵のスタイルを学習した結果の一部一つのネットワークで複数のスタイルを学習することができている

Dumoulin et al. 2016 より引用

Page 22: Style transfer

実行例(別の画家の複数の絵から学習)32種類の別々の画家による絵のスタイルを学習した結果の一部驚くべきことに大きく異なる画風もスケールとシフトの違いだけで学習できている

Dumoulin et al. 2016 より引用

Page 23: Style transfer

実行例( 32種類全部)

https://github.com/tensorflow/magenta/tree/master/magenta/models/image_stylizationのコードを用いて生成したもの

Github でコードと学習済みモデルが公開されているので簡単に試せる

Page 24: Style transfer

Dumoulin et al. 2016 による画風の合成学習された はスタイルの Embedding になっていると考えられ,凸結合でスタイルを合成することができる

Dumoulin et al. 2016 より引用

Page 25: Style transfer

Dumoulin et al. 2016 における新しいスタイルの追加畳み込み層などの重みは全てのスタイルで共有されているので,学習済みのネットワークに新しいスタイルを追加する場合にはネットワークの重みは固定したまま,新しい だけを学習することで少ない更新で学習することができる

5000 step 程度で 1 から学習させた場合の 40000 step に近い loss になっている図は Dumoulin et al. 2016 より引用

Page 26: Style transfer

Dumoulin et al. 2016 におけるスタイルのパラメータ数

Dumoulin et al. 2016 より引用

• ネットワークのパラメータ数• チャンネル数の合計• 1 スタイルのパラメータ数

非常に少ないパラメータが結果に大きな影響を与えているネットワーク構成が過剰なのか少ないパラメータで変換できるようにするのが難しいのか…このスタイル毎のパラメータを予測するような NN をつくれたら何の学習もなく画風変換することができるようになる(すごい)

Page 27: Style transfer

まとめ• Style Transfer に関する論文をいくつか紹介した

• プレプリントが出た 2015 年 8 月から 1 年ちょいで複数スタイルまで出る• すごい

• 時間の関係により紹介できなかったもの• Novak & Nikulin 2016

• 損失関数の工夫などで改善を行っている.職人芸• Gatys et al. 2016b

• 元画像の色を保持したまま画風変換を行う• 色の平均・分散を合わせる方法と輝度値だけ変換する方法

• Ruder et al. 2016• Style Transfer を動画に用いる手法を提案

• Ulyanov et al. 2016b• instance normalization で明度などの影響を除去

• Chen & Schmidt 2016• Patch-based な手法でスタイルとコンテンツの両方を入力とする   Feedforward Network を構築.任意のスタイルを適用できる

Page 28: Style transfer

Reference I

Page 29: Style transfer

Reference II

Page 30: Style transfer

Reference III絵の引用元• Vincent van Gogh - The Starry Night

https://commons.wikimedia.org/wiki/File:VanGogh-starry_night.jpg

• Claude Monet - Rouen Cathedral. Facade (Morning effect)

https://commons.wikimedia.org/wiki/File:Claude_Monet_-

_Rouen_Cathedral,_Facade_(Morning_effect).JPG

• Claude Monet - Poppy Field in Argenteuil

https://commons.wikimedia.org/wiki/File%3APoppy_Field_in_Argenteuil%2C_Claude_Monet.jpg

• Claude Monet - Plum Trees In Blossom At Vetheuil

https://www.wikiart.org/en/claude-monet/plum-trees-in-blossom-at-vetheuil

• Claude Monet - Les Nymphéas

https://commons.wikimedia.org/wiki/File:Claude_Monet_038.jpg