« ドンキの2万円PCをカスタマイズする | トップページ | SONYからスマホサイズのプロジェクター”MP-CD1”春ごろ発売へ »

2018年1月19日 (金)

TensorFlow用”DCGAN”で独自データでの画像生成を試みてみる

ディープラーニングといえば「認識」用として使ってましたが、最近は「生成」用のコードも充実しつつあります。

画像生成の手段として”GAN”という手法があります。”Generative Adversarial Networks”の略で、日本語では”敵対的生成ネットワーク”といいます。

敵対的というキーワードがなんだか物騒ですが、下記のサイトなどを参考にその仕組みを勉強してみました。

はじめてのGAN

ディープラーニングでご飯を作ってみる - SunPro 2016技術書典

2つ目のサイトの解説が、わかりやすかったですね。

プログラム的な中身はともかく、こういう動作をしているそうです。

まず、中には”贋作絵師”と”鑑定士”がいます。

まず、鑑定士が登場。この鑑定士に本物の絵(教師データ)と、贋作絵師が作り出した偽物をランダムに与えます。

本物、偽物を正確に見分けられたら、鑑定士に報酬が与えられます。

本物を偽物と認識した場合は、何も得られません。

贋作絵師が作った偽物を本物と鑑定した場合は、贋作絵師に報酬が与えられます。

そうなると、鑑定士は「くそっ!!今度こそ見破ってやる!」となりますし、偽物と判断された贋作絵師は「次こそだましてやる!!」となるわけです。

この2者の壮絶な戦いをプログラム内部にやらせれば、贋作絵師がどんどん”本物”っぽい絵を描いてくるようになる・・・という仕組みです。

このとき、画像の認識や生成に使うニューラルネットワークに畳み込みを使ったものを”DCGAN”(Deep Convolutional Generative Adversarial Networks)というらしいです。

さて、下記のサイトを参考に、早速遊んでみました。

例によって、うちの環境はWindows 10 Home(64ビット)、Anaconda 4.2.0(Python 3.5)+TensorFlow 1.2.0 で実行しております。

DCGAN-tensorflowで自動画像生成をお手軽に試す - Qiita

まず、下記よりTensorFlow版DCGANのコードを入手します。

DCGAN-tensorflow - Github

で、上のサイトのように、セレブな顔生成をやってみたかったら、その名も”CelebA”というデータセットを入手して、上のサイトにあるようにコードを実行するだけで行けます。

まず、コードのあるフォルダに行き、そこで

> python download.py celebA

と打ち込みます。

”requests”だの”tqdm”だのを入れろと言われたら、それぞれpipで入手します。

> pip install tqdm
> pip install requests

download.pyを実行すると、”data”フォルダ内に”celebA”というフォルダができます(約1.3GB)。

この中には約20万枚ものセレブなお方の顔写真が入ってます。これを眺めるだけでもなかなか楽しいデータです。

この状態で、以下のコマンドを実行。

> python main.py --dataset celebA --input_height=108 --train --crop

これで、以下のような画像ができるはず・・・

ちょっと不気味な写真が多いですが、なんとなく顔っぽいものが生成されてます。

ただ、めちゃくちゃ時間がかかる上に、既に結果のわかっているものを実行してもつまらないですね。

というわけで、ここはいきなり独自データセットでトライしました。

使ったのは、”けものフレンズ”動画顔検出器をディープラーニング+OpenCV物体検出で作る(転移学習&メモリ不足対策): EeePCの軌跡でも使ったフレンズさんの顔画像1970枚。

独自データセットで学習させる場合のやり方は簡単で、”data”フォルダ内に”kemo”というフォルダを作って、そこにこの1970枚のデータを入れます。

Dcgan01

そして、次のコマンドを実行。

> python main.py --dataset kemo --input_height=64 --output_height=64 --train

で、待つこと15分ほど。

Dcgan02

”samples”というフォルダに、64×64の画像が8×8個並んだ画像が、大量に生成されます。

ここには生成過程も出力されてます。これを見ると

Train_03_0009

最初はこんな感じ。なんとなく、顔っぽいものがありますが、全然わかりません。

Train_16_0019

だんだん顔っぽくなっていきます。

Train_23_0009

おお!だんだんといい感じに!

・・・なったんですが、この状態から先に進みません。これで終了。なんだか、いまいちな生成結果です。

もしかして、髪の毛の色や顔の特徴がバラバラ過ぎるのがいけないのかと思って、サーバルちゃんのような金髪系の顔に絞って(395枚)再び学習。

今度は、5分ほどで終了。

Train_16_0002

最初はこんな感じ。お、なかなかいい感じです。

Test_arange_98

ですが、それでもここまでしか行けませんでした。さっきよりはましですが、とても耐えられるクオリティではありません。

なんとなく、フレンズさんっぽい絵にはなるんですけどねぇ。

やっぱり、教師データが少なすぎるんでしょうか?わりとうまくいってる先のセレブ顔データ(CelebA)は20万枚ですからね。

なお、このGANによる最新技術はここまで進んでます。Progressive Growing of GANsというらしいです。

40秒あたりから”偽物”の写真が出てくるんですが、もう本物の写真と見分けがつきません。これも先のCelebAというデータセット(ただし高解像度版)を使って作られたもの。いやはや、すごい。

なんとなく、画像生成アルゴリズムで遊んでみました。

さて、こんなものが一体、何の役に立つのでしょう?

例えば、SNSなどで流行っているものをジャンルごと(有名人、食べ物、洋服・・・等)にあつめて、それを使って画像生成をかけると、なんとなく流行りそうなデザインが見えてくるかもしれません。

それをもとに商品をデザインしたら・・・流行り物ができるかどうかは、わかりません。そこは解釈し、創造する人の力が必要です。

でも、創造を刺激することはできそうですね。”GAN”に最も期待されていることは、勝手に画像を作ってくれることではなく、刺激してくれることなのかもしれません。

他にも”文章生成”なんてものがあります。例えば、こんな事例が。

人工知能で画像をRADWIMPSっぽく解説してみた。 - Qiita

こちらも試したいところですけど、いまいちよくわかっていないので、まだ手付かず。

この1、2年で、機械学習、特にディープラーニング周辺の技術が大幅に向上しました。この1年、この分野を追っかけてきましたが、ソフトもハードも予想以上の進化でついていくのが大変です(いや、既についていけてないですが)。

ただ、機械学習技術によって、人の職業が奪われるということはないんじゃないかなぁと思っています。たしかに、単純作業、ルーチンワークというものはなくなると思いますが、創造分野の仕事はむしろAIの発達で活性化するんじゃないかと思ってます。

その創造力を活性化に期待がかかる技術の一つが、こちらのGAN。使い道はなくとも、手軽に試せるので、気になる方は独自データで遊んでみてはいかがでしょうか?

TensorFlowはじめました 実践!最新Googleマシンラーニング (NextPublishing)

« ドンキの2万円PCをカスタマイズする | トップページ | SONYからスマホサイズのプロジェクター”MP-CD1”春ごろ発売へ »

数値解析系」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: TensorFlow用”DCGAN”で独自データでの画像生成を試みてみる:

« ドンキの2万円PCをカスタマイズする | トップページ | SONYからスマホサイズのプロジェクター”MP-CD1”春ごろ発売へ »

無料ブログはココログ

スポンサード リンク

ブログ村