ジェネラティブアート x 機械学習

2019.10.03

今回は、ジェネラティブアートと機械学習をテーマにモックを作って行きたいと思います。
機械学習の手法の一つであるPix2Pix(GAN)を使って、アルゴリズムで生成した線描画に着色して、
テクスチャ感を加えた表現を実践してみたいと思います。

2019年現在も、機械学習技術(以下ML技術)の革新は目まぐるしく、日々新しい手法や調査結果に関する報告がなされています。
これらのML技術に関する研究は、手法に関する基礎研究に加えて、様々な分野で応用研究も進められています。

もちろん、アートや表現・演出といった分野でも、応用研究が進められています。

例えば、iPhone X以降のカメラアプリに搭載されているポートレート機能は、
スタジオで撮影したようなレタッチしてくれる機能ですが、ここにも高解像度化や人物認識といった処理にML技術が使われているようです。

また、ML Coreと呼ばれる学習モデルを計算するためのプロセッサを搭載したスマートフォンが普及し始めていたりと、ソフトウェアに止まらず、ハードウェアの環境整備も行われています。

今以上にML技術が身近になり、実現できる幅も広がっている最中であると言えます。

そこで今回は、表現・演出の手法の拡張を目指して、
ML 技術の手法であるPix2Pix(GAN)をジェネラティブアートのアルゴリズムの中に取り込み、
テクスチャを拡張する表現を作っていきたいと思います。
今回の取り組みを通して、ML技術の課題点やポテンシャルについて探っていきたいと思います。

 

GANとは?

今回はGANを使って生成画像への着色を試していきます。

GAN(Generative Adversarial Networks)敵対的生成ネットワークと訳されるディープニューラルネットワークの手法の一種で、画像生成や音声生成などで注目を集めた手法です。

GANの詳しい実装方法については、分かりやすい記事が既にありますのでそちらに譲りますが、GANの概要を簡単に説明します。

まず、生成器と識別器の2つの学習器があるイメージで、生成器は適当なノイズから画像を生成します。

そして、この生成した画像とあらかじめ用意した本物の画像を識別器に出題して、
本物か偽物か答えるという工程を繰り返していきます。

すると、一方は騙そうとして、もう一方は見抜こうとする工程を繰り返すことで、だんだんリアルなデータが生成できるようになるといった仕組みです。

 

驚くほどシンプルな構造でリアルなデータを作れるGANではありますが、計算が安定しない問題や収束性が悪い問題に対する理論面の研究と、画像の高解像度化、スタイル変換、音声生成、異常検出など様々な分野への応用研究が盛んに行われているようです。

例えば、Gooogleの音楽人工知能の研究プロジェクトであるMagentaプロジェクトでは、音生成にGANを使用したり

その他、GANに関する研究分野について全体を俯瞰されたい方はこちらの解説論文がとてもわかりやすかったです。

 

ジェネラティブアートと機械学習

機械学習は何らかのデータを学習する事で未知のデータが来た時に、予測することができるというものでした。
例えば、Sony CSLが発表したビートルズ風楽曲や、ウマをシマウマにできる手法など、目を疑うレベルのことが実現されたことは記憶に新しいと思います。

最近では、機械学習をサポートするツールやサービスが充実しつつあり、そこまで機械学習や深層学習の深い知識がなくても、機械学習を試して行くことができるようになってきました。

また、深層学習系を試したい場合は、高性能なコンピュータが必要でしたが、機械学習向けのクラウドコンピューティングの整備が進んでいるので、ネット環境さえあれば、お手元のPCスペックに依存することなく学習モデルを構築することができるようになっています。
頑張れば、スマホからでもできる!

 

前置きが長くなってしまいましたが、
今回はGANの一種であるPix2Pixという手法をジェネラティブアートに取り込んで、
演出手法を探って行きたいと思います。

はじめに

今回は、既存の学習モデルを利用してジェネラティブアートに着色を行なっていきます。
以下のステップで進めていきます。

  • 学習済みモデルのダウンロード
  • HTMLのコーディング
  • 画像描画(p5.jsコーディング)
  • 画像変換モデルによる着色

開発環境

ジェネラティブな描画周りを含め、筆者が使い慣れているp5.js というオープンソース のライブラリを使っていきます。
学習モデル構築フェーズでは、AWS SagemakerのJupyter NoteBookで行なっていきますが、今回は既存のライブラリーを試していきます。TensorFlowのJavaScriptバージョンのTensorFlow.jsを拡張したライブラリであるml5.jsを使ってみます。

 

学習済みモデルのダウンロード

既存の学習モデルをダウンロードして使わせていただきましょう。

以下の画像のように、modelsフォルダ以下に学習済モデルを格納しました。

HTML

ブラウザ表示のため、ライブラリーの読み込み・DOMの確保・スクリプトの読み込みを行います。

JavaScript

sketch.jsでは、輪郭画像の生成と画像変換を行なっていきます。p5.jsの使い方はこちらを参照してください。

 

実行

各ファイルの作成が終わったら、実行していきます。
実行には、ローカルサーバーが必要なので、サーバーを立てていきます。
任意の方法でローカルサーバーを立て、ブラウザに『http://localhost/』と入力してみてください。


Python3系がセットアップされている方はこちらでローカルサーバを立てることができます。

 

『edge2shoes』の学習モデルを無理やり使って、こんな画像を生成することができました。

小さめの四角いタイルから油絵のような質感に着色することができました。

タイルの目を大きめしてみると、以下のような画像が生成されました。
シンプルな四角形から思いも寄らない画像を生成することができました。

油絵のようなテクスチャを生成することができました。
設計者のロジックを超えた表現が可能になるという点も、機械学習を使った表現の可能性の一つになることを体験することができました。

次回は、タスクに沿ったモデルの学習をして、機械学習の表現への利用の可能性を探って行きたいと思います。