AIで芸術的な写真をつくれるというコードがGitHubにあったので試してみた | そう備忘録

AIで芸術的な写真をつくれるというコードがGitHubにあったので試してみた

芸術的スタイル

素人(自分)が撮った写真が芸術的な写真に化けるのかを試してみた時の備忘録。

A Neural Algorithm of Artistic Style」という論文をkerasで実装したコードがGitHubにあがっていた。

上記は人類が芸術的な絵画を描くスキルを身に着けた様に、ニューラルネットワークをつかって人工的に芸術的な画像を生成するシステムに関する論文だ。

コンテンツ(ベースとなる画像)とスタイルとで複雑な相互作用を構成して芸術的な画像を生成するとの事。

keras(下記参照)で実装しており、しかもColaboratory(Google Colab)で動作する。

kerasとは

kerasはTensorFlow上などで動くニューラルネットワークライブラリ。

TensorFlowはそのまま使おうとすると煩雑なコーディングが必要なのでラッパーと呼ばれるライブラリーで覆って簡単に使えるようにしたモノとの理解。

Google Colabとは

Google Colabはブラウザ上で機械学習のプロジェクトを動かすことができる環境。

またJupyter Notebookをベースにしており、連続で12時間、無操作だと90分で切断されるが、無料で使用する事ができる。

ブラウザで実行できるので様々な環境で動作させられる。

GitHub

前置きが長くなったがGitHubはこちら

NVIDIAの社員のSomshubra Majumdarさんがアップしていた。

そしてGoogle Colabへのリンクはこちらになる。

実行

ランタイムのタイプ

上記のGoogle Colabのリンクをクリックすると下記の画面が表示されるのでランタイムー>ランタイムのタイプを変更をクリックする。

ランタイプを設定する

ハードウェアアクセラレータでGPUを選択して”保存”をクリックする。

ハードウェアアクセラレータでGPUを選択する

gitからのコピー

最初のセクションの実行ボタンをクリックしてcloneコマンドでGitHubから必要なファイルをコピーしてくる。

githubからのコピー

下記の警告メッセージが表示されるので”このまま実行”をクリックする。

このまま実行

pathの設定

実行結果でエラーが出ていない事を確認して次のセクションを実行する。

次のセクションを実行

ネットワークタイプ

このセクションを実行するとNETWORK変数に実行するPythonのプログラム名(INetwork.py)がセットされる。

NETWORK変数にPythonのプログラムの名

ヘルプ

このセクションは-hオプションで実行してパラメータの意味を表示(ヘルプ)しているだけ。

ヘルプの表示

パラメーターの初期値

このセクションを実行すると各パラメーターの初期値がセットされる。

パラメーターの初期値の設定

主なパラメーター

CONTENT_WEIGHT

ベースとなるコンテンツ(ここに自分の写真をセットする)のウェイト

この数値と下記のSTYLE_WEIGHTの数値の比率でどちらの影響がより強まるかが決まる

STYLE_WEIGHT

画家のスタイル(ここに画家、例えばゴッホの絵画の写真等をセットする)のウェイト

NUM_ITERATIONS

反復学習回数

この数値を大きくすると学習回数が増える

MODEL

CNNモデルの種類を指定する

vgg19とvgg16が指定できる

コンテンツ画像の指定

このセクションを実行して「ファイル選択」でベースとなる写真を指定する。

コンテンツ画像の指定

今回使用したのは以下の自分が水族館で撮ったカエルの写真だ。

特段、芸術的な写真では無い上にピントもあまり合っていない。

カエルの写真

ファイル名の変更

このセクションを実行すると読み込んだ画像のファイル名が変更される。

画像ファイル名の変更

コンテンツ画像の表示

このセクションを実行すると読み込んだコンテンツ画像が表示される。

先程読み込んだカエルの画像が表示された。

コンテンツ画像の表示

スタイル画像の選択

このセクションを実行して「ファイル選択」でスタイル画像を選択する。

スタイル画像は先程のGitHubのこちらのフォルダーからいくつかダウンロードしておいた。

スタイル画像の選択

今回は下記の葛飾北斎の神奈川沖浪裏を選択した。

葛飾北斎 神奈川沖浪裏

スタイル画像

同様にスタイル画像のファイル名の変更の変更を行い、次のセクションで画面に表示する。 

スタイル画像

ディレクトリの指定

このセクションを実行するとディレクトリが指定される。

ディレクトリの指定

画像の作成

いよいよ画像の生成。

このセクションを実行すると先程のパラメータでINetwork.pyを実行して画像を生成する。

NUM_ITERATIONSの数値次第だが10(回)の場合で数分の実行時間が掛かる。

画像の生成

画像の表示

このセクションを実行すると生成した画像を表示する。

生成した画像を表示する

画像のダウンロード

途中のセクションを飛ばしてDownload Ganerated Imageを実行すると生成された画像をダウンロードできる。

画像のダウンロード

今回生成されたカエルの画像。

元のなんてことの無いちょっとピンぼけのカエルが葛飾北斎風?の中々前衛的なカエルになった。

生成された画像

次にスタイルにムンクの叫びを指定した時に生成された画像がこちら。

こちらはあまりムンク感は出ていないかも知れない。

ムンクの叫びと生成

CONTENT_WEIGHTとSTYLE_WEIGHTの比率やNUM_ITERATIONSの値を変えるとまた違った結果が得られるので試してみて欲しい。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。