女の子の画像のドメインを整理するためのプロジェクトです.
プロジェクトの流れ
- 画像の収集
- 顔画像の抽出
- 顔パーツのパラメータ設定
wikipediaのアニメ一覧を調べて, yahoo検索から1アニメについて約20の画像をクローリングしておく. 以前に作ったスクリプトで試してみてね.
画像から顔領域のみを抽出します. アニメ画像のカスケード分類器はココからダウンロードしてください. 最近はCNNで自分で学習させたほうが良い精度の矩形回帰ができるかもしれません.
$ git clone [email protected]:elasticnet12345/Arangement-Girls-Domain.git
$ cd Arangement-Girls-Domain/src
$ wget https://raw.githubusercontent.com/nagadomi/lbpcascade_animeface/master/lbpcascade_animeface.xml
$ python face_crop.py
画像hoge.pngに対しての操作を説明します.
この画像に顔抽出器をかけると以下の画像郡のように画像中の顔領域の画像郡が出力されます.
5人いるけど4人しか抽出されていないのは一定の大きさ以下は画質が悪いデータを学習データになるべく入れたくないため,
一定のサイズ以下の画像は保存しないようにしているからです.
本家で使われているパラメータのうち,
- 髪の色(金, 茶, 黒, 青, 桃, 紫, 緑, 赤, 銀, 白, 橙)
- 髪型(ロング, ショート, ツインテ, ドリルヘア, ポニテ)
- 目の色(青, 赤, 茶, 緑, 紫, 黄, 桃, 黒, 橙)
- 開口(ON, OFF)
- 帽子(ON, OFF)
- メガネ(ON, OFF)
顔パーツを登録する操作を単純化するために下のようなGUIを作りました. 各画像に対して引数--dst_dirで指定したディレクトリにJSONファイルを吐きます. ある程度JSONファイルが溜まったら, CSVに統合しデータベースをつくります.
$ python set_label_GUI.py --src_dir=data --dst_dir=json_output
一通り終わったら, 顔画像が入っているディレクトリと, GUIで顔パーツの情報を入力してJSONを作った出力先のディレクトリの2つを以下のようなディレクトリ構成でdata直下に入れます.
GUIの操作が時間がかかるため途中でGUIを終了しても起動ごとにデータを読み込むので, 作業中断してもOKです.
make_girl_kit
└ data
└ parts_directory
├ face_images
| | hoge.png
| | fuga.png
└ face_images_output
| hoge.json
└ fuga.json
このJSONをCSVファイルに統合します.
$ python union.py
次に, 学習データセットの作成を行います. 例えば金髪のロングヘアー, 緑目の女の子を生成したいと思ったら, 以下のように実行します. 引数--dataset_directoryは, data直下に今まで追加してきた画像について引数で指定した条件の女の子のみがコピーされます.
$ python crate_dataset.py --height_size=256 --width_size=256 --hair_color="gold" --hair_type="long" --eye_color="green" --dataset_directory dataset1
これを実行すると"data/dataset1"に以下のようなファイルが出力されます.
最後は, 適当なGANで自動生成してみてね. CycleGANやStarGANなどを試すと面白い結果になると思うよ! DCGANでやる場合は例えばこんな感じに動かしてね!
$ git clone https://github.com/carpedm20/DCGAN-tensorflow.git
$ cd DCGAN-tensorflow
$ mkdir data
$ mv ../make_girl_kit/data/dataset1 ./data/
$ python main.py --input_height 128 --input_width 128 --output_height 48 --output_width 48 --dataset dataset1 --crop --train --epoch 300 --input_fname_pattern "*.png"