こんにちは、海行です。

私はtwitterで前々から今アツい3つの領域は

1.VR(とAR)
2.人工知能
3.仮想通貨(ブロックチェーン)

と言っていたんですが、人工知能については今まで全然着手してませんでした。
一応GoogleのCloud Vision APIを使ってDoge Cameraは作りましたが、今回はもう少し踏み込んで、国産のディープラーニング用フレームワークのChainerのインストールと、Chainer用プログラムのchainer-goghの実行テストまで行った結果の覚書を書きます。

ディープラーニングで実現したい目標


最初に私が人工知能(ディープラーニング)で実現したい目標をハッキリさせておきたいと思います。

それはズバリ、人工知能に漫画を描いてもらう事です!

漫画を描いた事がある人ならわかるかもしれませんが、漫画を描くのは物凄く時間がかかります。
しかも作画中は手は物凄く忙しく動いてるのですが脳みそはあまり使わないので暇をこいてる時間が大部分を占めてます。忙しいけどヒマな感じです。
人工知能が自動で漫画を描いてくれるまでいかなくても、作業の効率化に貢献してくれたら助かる人は多いと思いますし、何より私が助かります。
私も漫画は描くのは好きですが、中々収入に結びつかないし、忙しくて段々描く時間がとれなくなってきています。
別に自分の手で描く事に絶対的なこだわりは無いので、人工知能が私の代わりに漫画を描いてくれたら嬉しいです。

最終的な目標は漫画を描いてもらう事ですが、いきなりそこまで高度な事をするのは難しいと思うので、小目標としては人工知能に実用に耐える背景イラストを描いてもらいたいです。

それだけでも助かる人はいっぱいいると思います。
私は背景を描く事にあまり興味を持てないですが、背景は漫画やイラストにはどうしても必要なものですから。

と、言う訳で人工知能で達成する大目標は漫画を描いてもらう事で、小目標は実用的な背景イラストの生成です。

ちなみにChainerでイラストを生成する研究についてはすでに↓こちらの記事があります。

Chainerで顔イラストの自動生成

↓こちらにも写真をアニメにしてしまう話があります。

View story at Medium.com

まだちょっとその…実用レベルとはいかないみたいですが…

Chainerのインストール覚書


私の環境は64bitのwindows10です。

WindowsにChainerをインストールする手順は基本的に↓こちらの記事が分かりやすいので見ていただければよいのですが、いくつか補足があるので一応私の場合の流れを書いてみます。
Windows上にChainer v1.5+CUDA+cuDNNを一番簡単に入れれる方法

1.記事ではPython2.7を使う場合と3.4、3.5を使う場合についてそれぞれ書かれていますが、後でchainer-goghを使う際にPython3系だとプログラムエラーが起きるので、2.7をインストールします。AnacondaのPython2.7 windows 64-bit向けです。

2.Python2.7のために必要なMicrosoft Visual C++ Compiler for Python 2.7をインストールします。

3.CUDAのために必要なVisual Studio Community 2013をインストールします。
環境変数のPathにC:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\binを追加する必要があります。

4.CUDA Toolkit7.5をインストールします。
CUDAはChainerの計算をGPUで行うために必要となります。

5.cuDNNをインストールします。
v4は現時点では対応していないようなのでv3をインストールします。

6.Chainerをインストールします。
最新版は1.6.1ですが、CPUで計算するなら構いませんが私の場合はこれだとcuDNNでエラーが出てしまいました。
ですので

という感じで1.6.0をインストールしたらエラー出ませんでした。

これでChainerが使えるようになりました。

chainer-goghのテスト


今回chainerの導入を思い立ったのは↓こちらの記事を見たからです。
【Deep Learning 画風変換】ポケモンを大神の世界に連れて行ってみた – イーブイの遠洋漁業

イラストに他のイラストの画風を適用する!これはアツいです。
一気に目標の実用的背景の生成に接近できそうです。

早速試してみましょう。

GitHubのchainer-goghからクローンしましょう。
使い方の説明も書いていますので、特に迷わず使えると思います。

一点だけ、GPU番号って何だ?と思いましたが、普通にGPU1枚挿ししてるPCの場合は番号は0でOKなようです。
複数挿ししてる場合などに、一体どれがどれかはコマンドプロンプトでC:\Program Files\Nvidia Corporation\nvsmiに行って、nvidia-smi.exe -Lコマンドを打てば一覧が出てきます。

参考リンク:Windowsのリモートデスクトップ経由でCUDAを利用できますか

実行テストした結果は↓こちらです。
NINモデルを使って猫にゴッホのスタイルを適用してみました。

結果

イテレーションを5千回回すと終了ですが、CPUだと80分かかりましたがGPUだと6分ほどで済みました。
でもCPUとGPUで出力結果自体もなんか違ってますね。

ちなみにGPUだとNINモデル以外を使うとout of Memoryが発生します。
GPUのメモリが不足してるみたいです。
私のPCのZotac GTX660のメモリは2GBです。う~む
後でcuDNNをインストールしたらi2vモデルでは動かせるようになりました。
i2vはNINよりもクオリティが高いですがその分結構時間がかかりました。

今回のテストはこんな感じです。
さっそくさやかさんの画像にスタイル適用とかもしてみたんですが、グロいので画像掲載は見合わせます。

Chainerがベストなのか?


Chainer以外にもディープラーニングのフレームワークは色々あります。

参考リンク:ディープラーニングの有名ライブラリ5種を最短距離で試す半日コース(TensorFlow, Chainer, Caffe, DeepDream, 画風変換) – Over&Out その後

Chainerの対抗馬としてはGoogleのTensorFlowがあるみたいです。
TensorFlowは学習結果をAndroidアプリから利用できるのが便利そうです。

参考リンク:TensorFlowをアプリで使ってみる

ただ、速度ではChainerの方が上回ってるらしいのと、ごく一部のGPUしか対応してないらしいのが弱点のようです。

参考リンク:TensorFlow祭りに乗っかってみた

どちらも似たような感じではあるらしいので、お好みでどうぞという感じではないでしょうか。

その他の参考リンク


ディープラーニング最近の発展とビジネス応用への課題

Chainerチュートリアル -v1.5向け- ViEW2015

chainerのバージョンごとの違い(2016年1月19日現在) – studylog/北の雲

なんでもゴッホ風絵画に変換!?凄いぞディープラーニング(深層学習)技術 – NAVER まとめ

今後の展望


やはり次のステップとしては自分で学習モデルを作ってみる事でしょうか。
ディープラーニングのアルゴリズムの勉強もして、Chainerのプログラムを自分で書いてみる事もゆくゆくは必要になるでしょう。

中身を理解しない事には良くしていく事はできないですからね。

それにしてもあっさりGPUのout of Memoryが発生してしまったのは衝撃です。
GPUを買い替える必要がありますね…そもそもプレオーダーしてるOculus Rift CV1はGTX660では動作スペックを全然満たしてないのです。
しかし4月にGTXの次世代が発表されるというウワサもあります。

悩ましいですね…

余談


chainer-goghで利用できるIllustration2Vecモデルですが、デモに手元のMMDのさやかさん画像を突っ込んでみたら、見事にさやかさんだと認識しました。
ビックリしましたね。

タグリストを見てみたら100種類くらいのアニメタイトルのキャラを網羅して学習させているみたいでした。
このまま学習を続ければ、知らないキャラの画像から一発でキャラ名がわかるアプリとか作れそうですね。
もっと実用的な方面に目を向ければ、キノコの写真を撮影して食べれるかどうか判断したりできるのではないでしょうか。

さて、人工知能で背景イラストを生成するという目標について、そもそも現時点で写真をイラスト変換する技術はないのでしょうか?

私が知っている限り、写真から一番ホントに描いたっぽい画像を生成できているのはWaterlogueです。

参考リンク:写真が簡単に水彩画に!?話題のアプリ『waterlogue』作例画像まとめ

fladdictさんもwaterelogueのアルゴリズムについて考察されています。

warterlogueのアルゴリズム分析

fladdictさんはプログラムで絵画を生成するアプローチも実験されてます。

コンピューターに絵画を描かせる | fladdict

ディープラーニングに頼らず、機械に絵を描かせる | fladdict

自動お絵かきロボを作る(その2) | fladdict

かなり素敵な絵が生成できてますね。
fladdictさんは主題とそれ以外を区別できるべきだと書かれています。
川上量生さんの本でもジブリのアニメ背景は情報量のメリハリが上手いって話が出てきます。

参考リンク:【アニメ】『もののけ姫』にも活かされた“一流の技”とは? ヒット作を生み出す“ジブリ”の職人たち – ウレぴあ総研

クオリティの高い画像を高速に生成するには、人間のプログラムと人工知能のパワーの両面からのアプローチが必要になってきそうですね。

余談でした。