hijikitaroのブログ

しがないSIerとして、日々プロジェクトを管理し、システムを育て、日々お子を見守り育てる中での出来事や学びを淡々と書いています。

初めてのディープラーニング:GANを使って手書き数字を生成してみよう

ディープラーニングとはなんぞやな状態でいきなりGANの実装をしてみるブログ

本ブログのコードは、

https://github.com/HijikiTaro/GAN

に載せています。

GANを実装するきっかけ

AIを知っているだけでなく、使える・作れるようになろうと思ったときに、たまたま下記記事を見てドラクエなどの新モンスター作るAIを作ろう状態になっていたことと、たまたま社内の勉強会のテーマとしてBigGANなどのディープラーニングを勉強してみたらという話がきた。 というのが、ざっくりとしたきっかけ。

あとは、普段の業務で触れないので、こういうところでアウトプットしていけば機会が巡ってくるような気がしたので実装することに。

GANって何?

GAN(Generative Adversarial Networks)「敵対的生成ネットワーク」

GANって何?美味しいの状態からスタートしているので、いろいろなブログや記事を参考にしている。

下記が参考にしたブログ や記事

ai-scholar.tech 概念の理解としてわかりやすく、何で活用できるかが書かれているのでとても参考になる。

yusuke-ujitoko.hatenablog.com 今回のMNISTの生成のコードを写経させていただいたブログ。

このブログで説明するよりも上記で確認するとわかりやすいため、そちらを参照ください。

ざっくり概要を書くと、

 Generator(レプリカ作成) vs Discriminator(本物or偽物判定)

 ↓

 Generator能力向上

 ↓

 本物そっくりのレプリカ作れる

という仕組み。

要するに、作るAIと判定するAIを競わせれば、作るAIが育つでしょうということらしい。

GANでできること

上記記事で記載されているので、そちらを参照ください。

各できることについて自分の言葉でも軽く書いてみる。

①高解像度の画像生成  人・モノなどいろいろ生成

②画像の翻訳  画像を別の画像へ

③文章からの画像起こし  Text to Image

④動画の翻訳  動画を別の動画へ(顔を入れ替えて動画配信可能らしい)

⑤スタイル変換  よく出る例として、ウマをシマウマへ

⑥音楽ジャンルを変換  PopからClassicへ

⑦動画予測  未来を予測

⑧画像における特定の領域を変換  あるパーツだけ変換(服だけ変換するみたいな)

⑨イメージの演算  画像の足し算・引き算

GANの実装

実装環境

Webブラウザのみで環境構築でき、無料でGPU利用できるので使用。

実装

実装に関してはすべて写経。勉強は写経からとよく言うので・・・

追加したこととして、

生成する画像やLossの結果を保存する先をGoogleドライブにするために、下記コードを最初に実行。

from google.colab import drive
drive.mount('/content/gdrive')

あとはちょっとした修正として保存先のパスを変更したのみ。

という本当にそのままの状態で実行した結果、下記画像が生成された最初と最後

f:id:hijikitaro:20190621225110p:plain
mnist-epoch0
f:id:hijikitaro:20190621225304p:plain
mnist-epoch300000

最初はまったく何かわからないノイズだらけだが、最後はかなり数字っぽくなっている。

これだけでもかなり感動。

今まで実装するにはかなりのコードを書かないといけない感じだったけど、機械学習では勝手が全然違うことが感じられた。

この違いになれるのに、時間がかかりそう。

でも、これが自力で実装できるようになれば、面白いことをどんどんやっていけそう。

こういう仕事をどんどんやってもっとスキルを身に着けたい。

今後の課題

  • model構造?ネットワーク構造?
  • keras?TensolFlow?
  • Python経験値小
  • 実業務・ビジネスへの活用イメージ

とまだまだコードを微修正することすらできない・・・