29
ReNom User Group #3 ReNomによる Neural Style Transfer 2017/11/08 後藤 昂彦

ReNomによるNeural Style Transfer

Embed Size (px)

Citation preview

Page 1: ReNomによるNeural Style Transfer

ReNom User Group #3

ReNomによるNeural Style Transfer

2017/11/08

後藤 昂彦

Page 2: ReNomによるNeural Style Transfer

自己紹介

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

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

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

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

Page 3: ReNomによるNeural Style Transfer

今日話すこと

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

Neural Style Transferとは?

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

ReNomによる実装例

実行結果2

Page 4: ReNomによるNeural Style Transfer

Neural Style Transferとは?

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

活用例

3

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

↑モバイルアプリ「Prisma」

#ProjectPuppetron →(Adobe Max 2017 Sneaks)

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

Page 5: ReNomによるNeural Style Transfer

アルゴリズム

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

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

4

StyleRepresentation

ContentRepresentation C

S

Page 6: ReNomによるNeural Style Transfer

アルゴリズム

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

5

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 7: ReNomによるNeural Style Transfer

アルゴリズム

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

6

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 8: ReNomによるNeural Style Transfer

アルゴリズム

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

7

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

Page 9: ReNomによるNeural Style Transfer

アルゴリズム

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

8

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

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

Page 10: ReNomによるNeural Style Transfer

アルゴリズム

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

9

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

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

Page 11: ReNomによるNeural Style Transfer

アルゴリズム

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

10

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

“猫”

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

Page 12: ReNomによるNeural Style Transfer

アルゴリズム

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

11

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 13: ReNomによるNeural Style Transfer

アルゴリズム

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

12

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 14: ReNomによるNeural Style Transfer

アルゴリズム

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

13

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 15: ReNomによるNeural Style Transfer

アルゴリズム

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

14

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

Page 16: ReNomによるNeural Style Transfer

アルゴリズム

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

15

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

Page 17: ReNomによるNeural Style Transfer

アルゴリズム

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

16

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

Page 18: ReNomによるNeural Style Transfer

アルゴリズム

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

17

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

Page 19: ReNomによるNeural Style Transfer

アルゴリズム

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

18

Layer1

Layer2

Layer3

Layer4

Layer5

VGG-16

勾配降下法

Page 20: ReNomによるNeural Style Transfer

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におまかせ

Page 21: ReNomによるNeural Style Transfer

実行結果

20

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

Page 22: ReNomによるNeural Style Transfer

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

21

Page 23: ReNomによるNeural Style Transfer

その他の結果(1/2)

22

Page 24: ReNomによるNeural Style Transfer

その他の結果(2/2)

23

Page 25: ReNomによるNeural Style Transfer

まとめ

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

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

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

24

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

Page 26: ReNomによるNeural Style Transfer

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

Page 27: ReNomによるNeural Style Transfer

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

Page 28: ReNomによるNeural Style Transfer

おまけ

特許出願されてるっぽい

出願人は論文著者ら

ヨーロッパに国際出願

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

27

Page 29: ReNomによるNeural Style Transfer

28

Thank you!