post Image
DeepLearningモデルDCGANでアイドルの顔画像を生成してみた

はじめに

最近、欅坂46にハマり推しメンが増えてきました.そこでDeeplearningを使い自分の推しメンを学習させ最強の推しメンの画像を生成しようと考えました.

開発環境

  • macOS High Sierra 10.13.5
  • python 3.6

データセットを作る

1. アイドルの画像を集める

Deeplearningのモデル学習させるためには大量のデータが必要です.そこでこちらのサイトを参考にしてアイドルの画像をネットから集めました.ターミナルでこちらを実行すれば画像をスクレイピングできます.

$ pip3 install bs4
$ python3 collect.py "ここに好きなアイドルの名前"

指定したフォルダに画像が保存されます.
スクリーンショット 2018-06-09 15.14.18.png

2. 集めた画像から顔を切り出す

今回はアイドルの顔画像を生成したいため集めた画像から顔だけを切り出します.こちらを参考にopencvを使い顔画像を切り出しました.ターミナルでこちらを実行すれば切り出しできます.

$ brew install opencv
$ python3 crop.py

このような感じで顔画像が切り出されます.顔画像ではないものも切り出されるため人力で削除しましょう.
スクリーンショット 2018-06-09 15.11.40.png

3. 画像サイズを揃える

ネットワークに入力するには画像のサイズが同じではないといけません.そのため以下のコードで画像をリサイズします.

resize.py

import os
import glob
from PIL import Image

files = glob.glob('リサイズしたい画像があるディレクトリ名/*.jpg')
a = 0
for f in files:
    a = a+1
    img = Image.open(f)
    img_resize = img.resize((70, 70))
    ftitle, fext = os.path.splitext(f)
    img_resize.save('リサイズ後の画像を保存するディレクトリ名/' + str(a) + '_(70)' + fext)

DCGANとは

DCGANはGANのモデルの一つです.GANとはGenerator(生成器)とDiscriminator(識別器)の2つのネットワークで構成されています.Generatorは訓練データに似たデータを生成します.一方、Discriminatorは入力されたデータが Generatorによって生成されたデータか本物のデータかを識別します.

この関係は紙幣の偽造者と警察の関係によく例えられます。偽造者は本物の紙幣とできるだけ似ている偽造紙幣を造ります。警察は本物の紙幣と偽造紙幣を見分けようとします。

次第に警察の能力が上がり、本物の紙幣と偽造紙幣をうまく見分けられるようになったとします。すると偽造者は偽造紙幣を使えなくなってしまうため、更に本物に近い偽造紙幣を造るようになります。警察は本物と偽造紙幣を見分けられるようにさらに改善し…という風に繰り返していくと、最終的には偽造者は本物と区別が付かない偽造紙幣を製造できるようになるでしょう。

GANではこれと同じ仕組みで、generatorとdiscriminatorの学習が進んでいきます。最終的には、generatorは訓練データと同じようなデータを生成できるようになることが期待されます。このような状態では、訓練データと生成データを見分けることができなくなるため、discriminatorの正答率は50%になります。

gan.png

以上のことはこちらのサイトに書いています.詳しいことが知りたい方はサイトを見てください.

KerasでDCGANのコードを書く

今回は簡単にDeeplearningのモデルが書けるKerasというフレームワークを使います.以下のコマンドで簡単にインストールできます.

$ pip3 install tensorflow
$ pip3 install keras

実装したコードはGitHubに載せています.

生成された画像

IMG_9438.PNG

怖いです.それに同じ画像が多く出力されています.他の方の記事を見るともっと綺麗で可愛い女の子を出力できていました.おそらくチューニングがうまくできていない、訓練画像の枚数が足りていないなどの問題があると考えています.うまく出来たらまた更新します.

追記 2018/7/25

こちらのソースコードを使い顔画像生成したところ綺麗な顔画像が生成されました.

train_07_0016.png

同じデータセットを使ったため自分のコードでうまく生成できなかったのはデータせセットのせいではないみたいです.


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。