【AI】名画で川越を変換する。A Neural Algorithm of Artistic Style概論
最終更新日: 2018/05/04 4:14pm
こんにちは。経理の小高です。
GWに入りました。今年は良い天気でよかったです。
さて、先日のブログ「【AI】線画に自動着色。 PAINTSCHAINERが面白い」で、AIエキスポに出展していたPAINTSCHAINERをご紹介しました。
このサービスに触発されたのと、年度が変わって「何か新しいことをやらなくちゃな」ということもあって、昨年途中でストップしていたAI(Deep Learning ディープラーニング)をやることにしました。
昨年(2017年)は、夏前から弊社サービスの「統合ITプラットフォーム オクトパス(平成29年度 川越市KOEDO E-PRO認定製品)」の開発の追い込み、KOEDO E-PRO認定申請などで、トレンドのフォローアップが途中になってしまいました(言い訳です)。
さて。
は、言わずもがなの「時の鐘」。川越のシンボルです。ここからディープラーニングを再スタートします。
上の画像は、時の鐘の写真(下)と
図:時の鐘(弊社撮影)
ゴッホの有名な「星月夜」を合成したものです。
ゴッホ 星月夜(1889年) Wikimedia Commons (VanGogh-starry night.jpg)
これを実現しているのは、2016年にドイツのGatysらによって提案されたアルゴリズムです。周辺リサーチが不十分のため、間違いがあったらご連絡ください。
Image Style Transfer Using Convolutional Neural Networks, Gatsy L.A et al [2016]
arXivに同じ著者の「A Neural Algorithm of Artistic Style(2015年)」というプレプリントありますが、アウトラインだけとなっていますので、実装には十分ではありません。
ちなみに、arXiv(アーカイブと読みます。Xはエックスではなくてギリシャ文字のカイ)は数学やコンピュータ科学などの論文や予稿(プレプリント)を掲載するサイトです。ひと昔前まで、論文は雑誌に投稿したあと複数名の査読者の査読を経て掲載されるのが通例でした。最近では、まずインターネットに投稿して、ネットから得られるレビューに回答する過程で改定するというやり方が増えてるようです。「誰が1番か」という競争が激しくなっているのかもしれません。ですので、arXivに掲載されている論文は「予稿」という位置づけなのですが、arXivには過去に「ポアンカレ予想」を証明した大論文が掲載されたこともあります。
話がそれました。このアルゴリズムは、「一般物体認識の学習済みモデル(VGGモデル)」をつかって、
- 写真からは「何が写っているか(コンテンツ)」を抽出する。具体的には、高次の畳み込み層のフィーチャーマップから再現する。
- スタイル画像(ゴッホ)からは「スタイル」を抽出する。具体的にはフィーチャーマップ内のばらつき(の層間での重み付き和)で表現する。
これらをもとに損失関数を定義して、最適化問題に帰着させ、写真のコンテンツをスタイル内に写しこむことを試みます。
上の「スタイル」とは何かについては、Gatsyらは「曖昧(数量化できない)」であることを認めた上で以下のように述べています。
- ブラシストローク、カラーマップ、支配的なフォームや形、構成、対象の選択。おそらく、これらのすべてのミックスかそれ以上のもの。
- この手法では、生成された画像がスタイル画像に似ていて、コンテンツ画像にあるオブジェクトや景色が映し出されていれば成功。
アルゴリズムのフローは、論文中のFig2(下)で説明されています。
上図の左がスタイルを抽出するプロセス(下から上)、右がコンテンツ(写真の対象物)を抽出するプロセス、真ん中がこれらを合成するプロセスです。左右から真ん中に伸びる矢印は損失関数の要素を意味しています。Deep Nueral Netが出てくると「学習をするもの」と早合点してしまいますが、このアルゴリズムには学習プロセスがありません。
この真ん中のプロセスは普通の最適化問題になりますので、勾配降下法で最適解を見つけます(上図に1次のニュートン法であることが示されています)。
このアルゴリズムをわかりやすく説明するために、もう1つの例を示します。下は、私が先日自宅近くで撮影したカキツバタです。
図:カキツバタ(弊社撮影)
このスタイルに、ゴッホの有名なアイリスを選びます。
ゴッホ アイリス(1889年) Wikimedia Commons Irises-Vincent_van_Gogh.jpg
その結果は以下のようになりました。この結果はGatyらの主張を裏付けるものと言えそうです。
図:ゴッホのアイリスのスタイルをつかったカキツバタ
つまり、
- 学習済みVGGはカキツバタの写真から「カキツバタの花」を認識している。
- ゴッホの色使いや筆の動きが「カキツバタの花」に転移されている。
ということがはっきりとわかるかと思います。葉っぱも認識できてますね。
ゴッホのアイリスは「ドイツアヤメ」という品種です。ほっそりしたカキツバタが、肉厚で青いドイツアヤメ風になったのは驚きでした。
「白いアヤメを使ったらどうなるのか」興味がわきましたので、会社のそばの畑で撮影してきました。ゴッホのアイリスと同じドイツアヤメの白が見つかりました。
図:白いアヤメ(弊社撮影)
これをゴッホのアイリスでスタイルすると下のようになりました。
図:ゴッホのアイリスをスタイルにした白いアヤメ
これは完全にゴッホのアイリスだ!、という仕上がりに驚きです。青の縁取りや葉の様子なんかすごいです。
さて、このアルゴリズムが素敵なのは、PAINTSCHAINERのPreferred NetworksさんがGitHubにChainerでの実装を公開してくれているから、といっても過言ではありません。
chainer-gogh (https://github.com/mattya/chainer-gogh)
このプログラムはChainer1系(Chainerは既にV5がでているのですね)で動かすことができます。
同じ環境をオクトパスが使っています。
Gatsyらのアルゴリズムには2つのハイパーパラメータ(推定で決定しないパラメータのこと。このアルゴリズムには、コンテンツとスタイルのどちらに重きを置くかを決める係数とニュートン法の学習係数の2つハイパーパラメータ)がありますが、製作者の方がデフォルトを定義してくれていますので、試しに実行するには気にしなくても動きます。
ソースコードを参照すると、生成する画像をリンク(重み)にもたせてChainerに推定させるように、使い方が工夫されているのがわかります。これは絵画の生成プロセスが勾配降下法であることによるからと推測します。Chainer(V1)から得られるものは「重み」ですので、「重みを画像に差し替える」という便法が用いられます。単純なニューラルネットにおいて、入力と重みは形式的に可換です。オリジナル論文では、L-BFGS(未調査)というアルゴリズムが最もよく機能した、とされています。
先に掲載した画像はすべてこのプログラムをお借りして作成したものですので、アルゴリズムは十分に機能していると思われます。(ただし、繰り返しの検証の中では、画像に穴が開くといった、収束がうまくいかないケースやパターンがありますので、検討の余地はあろうかと思います)
(論文にありますが)画像はピクセルワイズに(ホワイトノイズから)作成しますから、画像の生成速度は解像度に制約されます。ちなみに、手元にあるGPU(GeForce GTX1080i)の載った機械で600px四方を作成するのに15分程度かかりました。(i5の機械でCPUで実行した場合、15倍ほど時間がかかりました)
pfnさんのサンプルプログラムは、生成される途中の画像を保存するようにプログラミングされています。これを繋げて動画したものが下になります。ノイズから次第に時の鐘が現れてきます。30倍速くらいの早送り動画になっています。
以下は、川越一番街商店街にそびえる埼玉りそな銀行川越支店。私の一番すきな建物です。
この写真をゴッホの星月夜で変換したものは以下です。
さて、次回からは川越の風景をいろいろな名画のスタイルで変換してみようと思います。
←「ホームページの制作実績を更新しました」前の記事へ 次の記事へ「イー・レンジャーのかわら版 26号(2018年5月号)AIのお話です」→