「開発ネタ」カテゴリーアーカイブ

GAN(DCGAN) によるラーメン写真生成をやりました

また一年くらい投稿が空いてしまってますね…

掲題の通りで Twitter bot に仕立てたので(@love_ramen_nya)、そちらのご報告も兼ねた記事になります。
良かったらフォローしてみてください、一日三食、ラーメン(っぽいもの)をアップします。
アイコンや返信パターンなどは暇を見て用意していきます~

本記事では特に詳しいことを書くわけではないので、人工知能だか機械学習だかニューラルネットワークだかディープラーニングだかでごにょごにょして、
それっぽいラーメンの写真を自動生成してみましたという感じでフーンと思いながら読み流してもらえればよいかと思います。

■GAN とかいうやつで何ができるのというのはこの記事(今回使っているのは DCGAN というやつ)
http://venturclef.com/blog2/?p=3423

■やってみるにあたって参考にさせていただいた記事
https://qiita.com/shu223/items/b6d8dc1fccb7c0f68b6b

もはや試してみるだけならほとんどコード書かなくてもいけちゃいます。詳しいところさっぱりでも(よくない)、試すだけならプログラミングのハードルは高くないです。

■学習のための画像を集める
Google のイメージ検索で集めました。この辺のクローラーもいろいろあるので探してみるとよいでしょう。

  • 「ラーメン」で過去 10 年分
  • 「中本」で過去 5 年分(辛くておいしい、スープが真っ赤)
  • 「二郎」で過去 5 年分(大盛りというか、見た目インパクトも絶大ですよね)

もともとある程度ノイズはあってもいいかなと思っていたのと、出力のバリエーションを期待したチョイスです。

■集めた画像を選定する
イメージ検索なので、あんまり関係ないものを除外します。仕事合間に手動でぽちぽちやってたら 1 ヶ月以上かかりました。
ここはもうちょっとうまくやるべきところです。ここで枚数は以下のようになりました。

  • 「ラーメン」約 48000 枚
  • 「中本」約 6000 枚
  • 「二郎」約 6000 枚

Twitter ではラーメンにゃ!とか言いながらラーメンか怪しい写真を添付する芸をやることがありますが、今回はちゃんとラーメンに絞ってます(カオスになりすぎて面白くなさそうだったので)。
あとはアングル都合などでノイズが大きくなりそうなものも除外したりしています。

■画像のクリッピング(スキップ)
各写真をターゲット中心で切り抜いたほうが良いのですが、さすがに手間がかかりすぎるので、今回はスキップしました。

■画像のリサイズ
今回試す DCGAN のサンプルは入力画像のサイズが揃っていないといけないので、長辺ベースで 256px になるようリサイズするスクリプトを書きました(Python + OpenCV)。
Gif だったりバイナリおかしかったりでスクリプト通らないものは別のツール使ったりしています。

■学習
ゲーミングノート PC が手元にあったので、tensorflow-gpu を使ってガリガリ回しました。
出力にある程度サイズが欲しかったのでオプションは以下のように。

python main.py --dataset ramen_dest --input_height=240 --output_height=200 --train --crop

これで 20 時間くらいかかったのではないでしょうか。ここでいろいろとパラメーターを調整して精度を上げていったりするものなのですが、この所要時間では試行錯誤も面倒です。
(output_height を減らせば数時間で終わります)

■出力結果
この手のやってみました記事では失敗例も多いのですが、幸いにも概ねそれっぽい結果が得られたので、以降のようなお遊び程度なら上々の結果ではないかと思ってます。
遠目だと気にならないんですが、拡大すると生理的にキツめのやつあったりします…ご愛敬…



■Twitter bot へ連携(おまけ)
Twitter の開発者登録が何やら面倒くさくなったようなので、自分ではキーを持たなくて済むような流れを構築しました。

  1. 出力結果は 8 x 8 枚パターンで 1 画像になっているので、切り分けるスクリプト(Python + OpenCV)
  2. 自分管理のサーバー(さくら契約してました)へとりあえず 1000 枚ほどアップ
  3. ここからランダムピックアップして image/png を返すスクリプト(PHP)
  4. IFTTT に定時で画像付きツイートする設定を作る

■今後の展望
何をするにも時間かかるので腰を上げるのが面倒なところなんですが、変換系は試してみたいですね~

Windows 8.1 環境で Intel 版 Android エミュレーターを使ってるとブルースクリーンがアレした

仕事の話ですがウン年ぶりに Android アプリを開発することになりました。 経験ありとは言っても 1.6 とか 2.0 の頃の話なのでまあさっぱりノウハウの互換性はなかろうということで、素直に入門サイトから出直し…

開発環境を用意してハローワールドを用意して動作確認、エミュレーターは相変わらず重いんだなあと思っていたところで、ググりまわっていた時に高速エミュレーターなるものの記述があった気がしたので辿って導入。

http://www.webtech.co.jp/blog/developer-news/5966/

導入しておお速い速いこれならエミュレーターでのデバッグでも余裕ですな… しかし導入を機にやたらブルースクリーンが頻発するようになる。困りますね。 CRITICAL_STRUCTURE_CORRUPTION ですって。

Intel のところにこの件っぽいスレッドが立っていました。

http://software.intel.com/en-us/forums/topic/475129

最後まで追っていったところ(面倒なので機械翻訳かけて読んだ)、修正版がリリースされているのを確認。
タイトルは 1.0.6 のままですが、中身は 1.0.7 です。

http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager/

こいつを導入したところ Windows 8.1 君の怒りも収まり、一件落着…
しかし画面イメージを渡されてあまりのアレさに閉口。悲しみの戦いが始まる――

Tile を使いこなしたい勢

WP7 をしばらく使っていて思うのは、やはりホームのタイルがころころ変わったりするのを見ていると楽しいということ。

アプリ開発でもそのあたりの活用はポイントになるんじゃないかなーと思っているところなので、参考にしたページにリンクを張るだけの記事です。

 

続きを読む Tile を使いこなしたい勢