【Deep Learningによる画風変換を試してみた】

はじめに

こんにちは、がんがんです。冬が近づき私の大学でもそろそろ研究室配属が決まっていきます。
今回は研究室紹介時に作成したDeep Learningに関するデモについての備忘録です。

なお、実験してみたのは画風変換です。

参考本

今回はこちらの本に載っている通りにとりあえず実験を進めていきました。

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

この本の販売とKerasの勉強本を探していた時期がちょうど重なり、即購入した一冊です。
最近はkears関連も多く出版されていますが、個人的には分かりやすいなと思います。私は主に辞書程度に使用してます。

また、Google colabのGPUを使ってみたかったため学習はGoogle Colabを使用しました。

参考記事

個人的に画風変換で好きな記事をまとめます。

Pythonで機械学習:画風転換(style sransfer) | Think it aloud


eeveetuna.hatenablog.com

qiita.com

elix-tech.github.io


ちなみに、GANの一種であるCycle GANを用いてフォートナイトのビジュアルをPUBGに変換するというものがあります。スタイル変換という意味ではおもしろい記事です。

ainow.ai

qiita.com

実験1

まずは参考本の通りに写経してみます。

躓いたところ

1. Google Colabでの画像の読み込み

本を参考にJupyter Notebookに書いたため、コードは問題なかったです。
ただ、画像の入力はGoogle Colabに合わせる必要があります。

そこで以下を参考にして解決しました。
Google Colabの知っておくべき使い方 – Google Colaboratoryのメリット・デメリットや基本操作のまとめ

また、Google Driveからの読み込みは以下を参考にしました。
Colab上のUbuntuに圧縮してアップロードするのがよいみたいですね。

Google Colaboratory内で画像やCSVファイルにアクセスするのが一苦労だった話 - Qiita

2.エラーが解決しない。。。

サンプルをそのまま写経したのですが以下のエラーが出てしまって解決しませんでした。
発表までの時間がなかったため、こちらの改善は一時断念…

実験2

実験1が成功しなかったため、今度はこちらを参考にしていきます。
こちらの記事では理論も非常にわかりやすく書いており、ベースにしているコードがKerasのExamplesです。
そのため、非常に理解しやすいコードでありがたい限りです。

elix-tech.github.io

結果として

first_layer.set_input(input_tensor, shape=(3, 3, img_width, img_height))の部分でエラーが起き、こちらも一時断念…

実験3

3度目の正直ということで以下を参考にしながら試してみました。というか、GitHubから落としてそのまま使用
gtech.hatenablog.com

こちらの記事で参照しているGitHubは以下になります。
GitHub - misgod/fast-neural-style-keras: This is a fast neural style transfer implement with Keras 2.

実行方法

GitHubページよりGitをダウンロードしてきます。今回はZIpをダウンロードし解凍しました。

GitHubページを参考にしながら以下のコマンドを入力すれば大丈夫です。

python3 transform.py -i images/content/101.jpg -s la_muse -b 0.1 -o out

躓いたところ

1. include_topのエラーが出た。

以下のエラーが出ました。

TypeError: _obtain_input_shape() got an unexpected keyword argument 'include_top'

調べてみると、Kerasのバージョン違いによるものでした。
teratail.com

実行結果

しっかりと結果が出て安心しました。
f:id:gangannikki:20181123153944p:plain
f:id:gangannikki:20181123153949p:plain

まとめ

いろいろ苦戦しましたが、なんとか画風変換を試すことが出来ました。
簡単に理論を理解しましたが、最適化などは難しいようです。

今後もいろんな技術を試して吸収していきたいです。