ReNomによるNeural Style Transfer

Preview:

Citation preview

ReNom User Group #3

ReNomによるNeural Style Transfer

2017/11/08

後藤 昂彦

自己紹介

名前後藤 昂彦(ごとう あきひこ)

仕事特許庁 審査第四部 電子商取引検索技術,データベース等の特許審査を担当非エンジニア

ReNom歴 1ヶ月 2年半ぶりにコード書いた

※本内容は組織の意見を代表するものではありません1

今日話すこと

Neural Style TransferをReNomで実装してみた

Neural Style Transferとは?

アルゴリズムをざっくり説明

ReNomによる実装例

実行結果2

Neural Style Transferとは?

DNNを使ったStyle Transfer(画風変換) Gatys et al., 2016.画像を”名画っぽく”変換してくれる

活用例

3

コンテンツ画像 スタイル画像

↑モバイルアプリ「Prisma」

#ProjectPuppetron →(Adobe Max 2017 Sneaks)

服のデザイン →(Ganesan et al., 2017)

アルゴリズム

コンテンツとスタイルの分離

画素を変数とする最適化問題として定式化

4

StyleRepresentation

ContentRepresentation C

S

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

5

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

6

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

7

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

8

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

画像を入力したときの中間層の出力に着目

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

9

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

画像を入力したときの中間層の出力に着目

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

10

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

画像を入力したときの中間層の出力に着目

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

11

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

12

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

13

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

14

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

15

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

16

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

17

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

アルゴリズム

学習済みCNNの特徴空間を利用 Content表現:高レイヤーの特徴マップ出力 Style表現:レイヤー内の特徴マップ間の相関

18

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

ReNomによる実装(骨子)

19

model = VGG16()model.load("./weights_vgg16.h5")model.set_prevent_update(True)

x = rm.Variable(p.copy())

for i in range(epoch):features_x = model(x)

loss = 0. # Style loss.for layer in ["layer1", "layer2", "layer3", "layer4", "layer5"]:

gram_x = gram_mat(features_x[layer])loss += w * rm.mean_squared_error(gram_x, gram_a[layer])¥

/ (2. * (channels*height*width)**2)# Content loss.layer = "layer4"loss += lam * rm.mean_squared_error(features_x[layer], features_p[layer])

# Updateloss.grad().update(optimizer)

①モデルの定義・学習済みの重みを読み込み・モデルの重みは更新しない

②生成画像をVariable型で初期化

③モデルの順伝播計算(各レイヤーの特徴マップ出力を取得)

④Style lossの計算

⑤Content lossの計算

⑥勾配計算して画素をUpdate

lossさえ定義できればあとはReNomにおまかせ

実行結果

20

GPU:ONepoch:2000生成時間:11分49秒

画像生成の様子(epoch 0 → 50)

21

その他の結果(1/2)

22

その他の結果(2/2)

23

まとめ

Neural Style TransferをReNomで実装したネットワークの重みではなく画素を更新する枠組み

コードは割とシンプル lossさえ定義できればあとはgrad().update()でOK

入力画像やパラメタにもよるが,比較的きれいな画像を生成できた

24

ReNomチュートリアルに項目があるので,興味のある方は試してみてください!・・・GPUないと数時間かかるけど・・・

References(1/2) Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “Image

style transfer using convolutional neural networks.” CVPR 2016.

Simonyan, K. and Zisserman, A. “Very Deep Convolutional Networks for Large-Scale Image Recognition”, arXiv:1409.1556

Prisma [https://prisma-ai.com/]

#ProjectPuppetron: Adobe MAX 2017 (Sneak Peeks) | Adobe Creative Cloud [https://www.youtube.com/watch?v=UYZMyV6bqKo]

Ganesan, Ashwinkumar, and Tim Oates. "Fashioning with Networks: Neural Style Transfer to Design Clothes." arXiv:1707.09899, 2017

25

References(2/2) “The Starry Night” , Vincent van Gogh, 1889.

“Portrait of Mademoiselle Irene Cahen d’Anvers”by Pierre-Auguste Renoir, 1880.

“The Great Wave off Kanagawa”by Katsushika Hokusai, 1847.

“Blue Painting” by Wassily Kandinsky, 1924.

Images from Pixabay [https://pixabay.com/]

26

おまけ

特許出願されてるっぽい

出願人は論文著者ら

ヨーロッパに国際出願

最終結果は出ていない模様

27

28

Thank you!