DeepStyleとUbuntuで作る、あなただけのニューラルペインティング
ニューラルネットワークは、画像の解釈、音声の理解、会話の翻訳など、実にさまざまなことができます。しかし、その能力はそれだけにとどまりません。なんと「絵を描く」ことまでできるのです。
近年発表された研究論文「A Neural Algorithm of Artistic Style(芸術様式の神経アルゴリズム)」は、その驚きのビジュアルサンプルとともに、ネット上で大きな話題を呼びました。この論文が提案しているのは、深層ニューラルネットワークを訓練することで「絵画のスタイル」と「画像の構造」を分離し、一方の画像のスタイルをもう一方の画像の構造へと融合させる技術です。要するに、巨大なニューラルネットワークを訓練すれば、写真をまるで有名画家が描いたかのような「ニューラルペインティング」へと変換できるということです。いわば「デジタル贋作」とでも言うべきものでしょう。
以下は論文に掲載されていたサンプルです。最初の画像がオリジナルで、その後に生成結果を示しています。各画像の右下には、スタイルの抽出元となった絵画がミニチュアで表示されています。
残念ながら、オリジナルの研究者たちはコードを公開していません。しかしここ数日のうちに、勇敢なプログラマーたちがその成果を見事に再現し、そのコードをオープンソースとしてインターネット上で公開してくれました。動かすのに必要なのはLinuxマシンと、ほんの少しの忍耐だけです。
今回は、その方法をステップごとに解説しながら、私自身の実行結果もいくつかご紹介します。以前お届けしたDeepDreamチュートリアルの続編のような位置づけです。やや複雑ですが、Linuxマシンさえあれば誰でも試せます。プログラミング経験は一切不要です。
ソフトウェアのセットアップ
まず最初に、急いでいない方やLinuxマシンをお持ちでない方への情報です。Twitterボットの「DeepForger」を使えば、DeepStyleを手軽に体験できます。画像とスタイル画像を送ると、しばらくして結果を返信してくれる仕組みです。ただし、より多くの画像を素早く処理したい場合や、出力を細かく制御したい場合は、この先のチュートリアルを読み進めてください。
まず、Ubuntu(筆者は14.04を使用)の最新版が入っていることを確認してください。ハードディスクには少なくとも数GBの空き容量が必要です。Windowsとのデュアルブートについては、当サイトの関連チュートリアルを参考にしてください。また、root権限が必要になるので、事前に確認しておきましょう。
基本ツールのインストール
これはオープンソースプロジェクトなので、まずGitをインストールしましょう。Gitはバージョン管理ソフトウェアのデファクトスタンダードであり、有名なオープンソースプロジェクトのほとんどがGitHub上でホストされています。
ターミナルを開いて、次のコマンドを実行します。
sudo apt-get install git
インストーラーの指示に従って進めてください。
次に、ソフトウェアを動かすために必要な基本ツールを整えていきます。
第一に、Luaをインストールします。このツールはLuaという言語で書かれています。次のコマンドを実行するだけでOKです。
sudo apt-get install lua5.2
第二に、Luarocksを入れます。これは他のツールのインストールを簡単にしてくれるパッケージ管理ツールです(Linuxの便利さが実感できるところですね)。次のコマンドを実行します。
sudo apt-get install luarocks
第三に、Luajitをインストールします。これはLua用のジャストインタイムコンパイラで、作業を少し楽にしてくれるものです。
sudo apt-get install luajit
ここまでは順調ですね。
フレームワークの導入
続いて、Torchをインストールします。Torchは科学計算・機械学習フレームワークで、このアプリケーションの背骨となる存在です。残念ながら、標準のUbuntuパッケージマネージャーであるapt-getではインストールできません。
幸い、公式がワンラインインストーラーを提供しています。ターミナルに戻って、次のコマンドを入力してください。
curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-all | bash
完了したら、次のように入力します。
luajit -ltorch
Torchのインターフェースが起動すれば、正しくインストールできています。確認が済んだら終了しておきましょう。
次はloadcaffeのインストールです。これはニューラルネットワーク専用のパッケージです。まず依存関係を次のコマンドで入れます。
sudo apt-get install libprotobuf-dev protobuf-compiler
その後、本体をインストールします。
sudo luarocks install loadcaffe
依存関係の最終チェック
最後に、トラブルを未然に防ぐため、いくつかのパッケージを先回りして更新しておきます。
まずimageパッケージを最新化します。
sudo luarocks install image
続いてnnパッケージも同様に更新します。
luarocks install nn
DeepStyleのインストール
さて、これでようやく本体をインストールする準備が整いました。ホームディレクトリに新しいフォルダを作り(mkdir DeepStyle)、そこへ移動します。
cd Deepstyle
そして、リポジトリをクローンします。
sudo git clone https://github.com/jcjohnson/neural-style.git
次にモデルのダウンロードです。コーヒーでも淹れて待ちましょう。かなり時間がかかります。ターミナルで次のコマンドを実行してください。
sudo sh models/download_models.sh
長くて大掛かりなダウンロードプロセスが始まります。権限エラーで失敗した場合は、chmodコマンドで該当フォルダに読み書き権限を与えてから再試行してみてください。
DeepStyleの使い方
準備完了です。使い方はとてもシンプルです。
ターミナルでDeepStyle/neural-styleディレクトリにいることを確認してください。次に、処理したい画像を用意します。インターネットからダウンロードするなりして、ファイルブラウザでDeepStyle/neural-styleフォルダにコピーしましょう。
あとはコマンドラインで個々の画像を処理できます。書式は非常にシンプルです。
th neural_style.lua -style_image YOURPAINTINGHERE.jpg -content_image YOURPHOTOHERE.jpg -gpu -1
(もちろん、大文字の部分は自分のファイル名に置き換えてください)
これでニューラルネットワークが動き始めます。処理には1時間ほどかかり、数分ごとに途中経過の画像が出力され、収束すると完了します。-gpu -1フラグは、GPUへのアクセスを無効にするためのものです。
筆者は何時間も格闘しましたが(OSを何度か壊しながら)、UbuntuとCUDAをNVIDIA GTX 970とうまく連携させることができませんでした。うまくいった方は、CUDAとcudann.torchをインストールすればGPUで高速化できます(GitHubリポジトリに詳細があります)。ダメでも問題ありません。CPUでも動きます。少し遅いだけです。
セットアップでつまずいたことがあれば、コメント欄で質問してください。できる限りサポートします。
実行結果
ここ数日で生成した画像をいくつか紹介します。出来栄えはまちまちですが、かなりのものばかりです。
こちらは友人ザックがイエローストーンへハイキングに行ったときの写真です。スタイル元はTheresa Padenによる抽象画で、まったく構造を持たない画像でシステムがどう動くのか試してみました。結果はなかなか興味深く、スタイル画像との類似性もはっきり見て取れます。
こちらは筆者の好きな画家の一人、チャールズ・デマス(Charles Demuth)の作品をスタイルに使ったものです。ちなみにデマスは『Team Fortress 2』のアートの主要な視覚的インスピレーション源でもあります。Wikimediaで見つけたジャージーシティの写真を入力したところ、結果は……まずまず良好です。デマス特有の角ばった表現は拾えませんでしたが、柔らかく質感のあるタッチとカラーパレットはしっかり再現されています。
こちらは、ありふれた花の写真から合成のオキーフ(Georgia O'Keeffe)を生み出そうとしたものです。率直に言って、 Spectacular(壮観)の一言です。美的にも筆者のお気に入りの一枚です。オキーフの豊かな色彩とフォルムが鮮明に浮かび上がり、花びらの重なる縁が背景の葉の輪郭へと変わり、花そのものは色へと溶けてほとんど抽象画のようになっています。
人間が描いたなら十分一級の絵と言えるでしょう。高解像度版を数日かけてレンダリングして、額装して飾りたくなるほどです。
ハロウィンの衣装を着た友人シャノンの写真を、ピカソの版画で処理したものです。興味深いことに、システムは彼女の顔の下半分を白く塗りました(ピカソ作品の配色配置と似ています)。偶然なのか意図的なのかは不明ですが、印象的な結果になっています。左側の髪も正しく識別され、スタイル画像の髪の色と線で描き直されています。帽子についても同様です。
この作品は、この手法の限界が見え始める例でもあります。もしピカソ本人がシャノンを描くなら、顔の構造を捨てて特徴を歪め、思い通りの効果を出したはずです。このシステムにはそうした高度な概念の理解がなく、暗く角ばった線やカラーパレットといった表面的な側面しか模倣できないのです。
シンプルな例です。エッフェル塔の写真と、ゴッホのもうひとつの《星月夜》です。元画像には雲がないにもかかわらず、雲をゴッホ調にうまく描写しています。昼の情景を夜へと変換するのも見事です。
ただ、なぜエッフェル塔の先端を炎の柱のように描いたのかは謎でした。かっこいいのですが、入力データからは正当化できません。ところがよく見ると、スタイル画像には水面の反射として13本もの長い黄色の縦線が含まれていました。少ない訓練データとしては非常に大きなクラスタです。この可哀想なネットワークは、「高コントラストの垂直エッジ=あの反射だ」と学習してしまったのでしょう。雲の中にも、余計な縦縞が薄っすらと見えます。
同じゴッホの絵ですが、今度は本物の星を描かせました。ワシ星雲の柱状部です。結果は気に入っています。ただ、やはり黄色の縦線への執着が見られます。柱のあらゆる垂直部分が、明るく揺れる黄色の線になってしまいました。また、訓練データに存在しなかった緑色を嫌って、青と黒で置き換えようとする様子もはっきり分かります。
技術的な考察
中には極めて説得力のある結果もありますが、この手法には明確な限界があります。構図がイマイチな画像もあれば、ピカソのような抽象的な画家との相性は悪いようです。ピカソは被写体を歪め、特徴を散らすことで知られています。アルゴリズムは角ばった線や衝突する色彩は捉えますが、依然として画像のピクセル値に支配されたままです。元素材から大きく逸脱するための理解力を持っていないのです。
しかし筆者がワクワクしているのは、こうした限界が本質的なものではないと思うからです。
今回使われているアプローチ――1枚の画像でネットワークを訓練し、別の画像を構築させる――は、根本的には一種のハックです。ネットワークに与えられるデータがあまりに少なすぎます。より発展したバージョンでは、多数の絵画や実際の写真の情報を持つネットワークを使えば、描こうとしている画像について豊富な文脈を得られるはずです。
スタイルの深い理解は、より広い文脈の中でしか成立しません。1枚の画像から導き出せるものではありません。システムにより広範なデータへのアクセスを与えるアーキテクチャを設計すれば、画像や、画家たちが現実世界の要素をどう表現するかについて、より「人間らしい」理解を導けるかもしれません。そんなネットワークなら、より抽象的で構図の優れた画像を生み出せるでしょう。そうなれば、この種のアルゴリズムはクールなおもちゃではなく、真に独創的なアートを生み出す手段へと変わっていくはずです。
それは、ある意味でとても奇妙な考えでもあります。
自分だけの画像を作る
期待外れの結果になった場合は、オプションをいろいろ調整してみると、より納得のいく結果が得られることがあります。全リストはGitHubにありますが、重要なものは以下の通りです。
- -content_weight -value: コンテンツ再構成項の重み。デフォルトは5e0。
- -style_weight -value: スタイル画像に与える重み。デフォルトは1e2。
- -style_scale -value: システムが解析する画像パッチのサイズ(大きくするとより抽象的になります)。デフォルトは1.0。
すべてが思い通りに動くようになったら、ぜひ一番面白い画像をコメント欄に投稿してください。皆さんがどんな作品を作るのか、本当に楽しみにしています。
画像クレジット:human brain painter via Shutterstock
-
火曜日のヒント:Plexサーバーで自分だけのSpotify環境を自作しよう
AppleがLalaを買収して終了させて以来、私はSpotifyなどのストリーミングサービスでその穴を埋めてきました。しかし、どこにも配信されていない(低音質のYouTube版を除けば)手持ちの楽曲がかなりあり、それらをすべてのデバイスで聴きたいと思っていました。そこで登場するのがPlexです。 Plexは、MacやNAS(ネットワーク接続ストレージ)をサーバーとして設定し、自分の音楽コレクションをiPhoneにストリーミングできるソフトウェアパッケージです。外出先からでも利用可能です。セットアップにはネットワークに関する基本的な知識が必要で、ルーターのポート開放方法を把握しておく必要があり
-
Product Creatorで独自のLinuxディストリビューションを作成する方法
今回は、再びKiwiについてお話しします。Kiwiはイメージングシステムであり、より大規模なopenSUSE Build Serviceの一部として組み込まれた、強力かつ多機能なイメージング/仮想化ソリューションです。自分のインストール環境、素のopenSUSE、あるいはその他のLinuxディストリビューションをベースに、あらゆる種類のOSイメージを作成できます。完全にカスタマイズ可能で、幅広いフォーマットで展開・配布できる点が魅力です。KiwiはXMLテンプレートを使用してこれらの処理を実現します。自動化やスクリプティングを好むパワーユーザー向けに設計されているためです。しかし、Kiwiには