チャイムノート

【機械学習】初心者でもできる画像生成〜学習データ作成編〜

 f:id:chime-n:20190419234343p:plain


前回(予備知識編)の続きです.

 

今回は学習データ作成編です.

 

 

学習データについて

画像生成では学習データに似た画像を作り出します.

画像生成でよく使われる学習データセットは主に二つです.

・白黒の1〜9までの数字画像 MNIST

f:id:chime-n:20190419234422p:plain

・色付きの外人さんの顔画像 celebA

f:id:chime-n:20190419234450p:plain

特に,MNISTデータセット機械学習界の"Hello, World!"と名高く,画像に関する機械学習ではよく用いられます.

MNISTをデータセットにしたら数字の画像が,celebAをデータセットにしたら外人さんの顔画像が生成できます.

でも,数字が書かれた画像とか外人さんの顔とか生成しても全く面白くないですよね?

さらに言えば,上の二つは五万とやられてるので検索すれば結果は見れます.

ということで,今回は自分で画像を用意して独自データで画像生成をします.

 

画像テーマを選択する

独自データということで作りたい画像のテーマを考えましょう.

せっかくやるのでどんな画像テーマでも良いと思います.

ただ,注意して欲しいのがそこまで対象範囲を広げないことです.

例えば,対象を”果物”にした場合はリンゴ,みかん,ぶどうなどかなりの数が挙げられます.

同じく,”武器”にした場合は剣,盾,銃が挙げられます.

今回はノートPCでやること,自分でデータセットを作ることから,必然的にデータセットの量が少なくなり,200枚も作れば頑張ったといえます.

対して,よく使われるデータセットは,例えばcelebAは20万枚であり,量が桁違いであるとわかります.

データセットが少ないのに範囲を広げるとうまくいかないかもしれません.

果物だと範囲が広いので,リンゴまで絞るとうまくいきやすいです.

 

ということで,私が今回選択したテーマは...

f:id:chime-n:20190419234824j:plain
Anmi先生のイラスト!かわいい!

イラストだと特定のキャラクターに絞った画像生成はよく見ますけど,書いた人に関するものは見たことなかったので挑戦しました.

イラストレータさんみたいな画像つくれたらすごいですし.

上で範囲を絞れと言っておいて少し範囲広めです.

ただ,体全体だと絶対うまくいかないので顔だけにします.

まぁ,やってみて考えましょう!

  

画像を適切に加工する

ここが一番大変です.頑張りましょう.

まずはネットからたくさん画像を集めます.

 

次に,画像を適切な範囲に切り取ります.

画像生成するには画像サイズを統一しなくてはいけないので,今回は必要部分だけ切り取り,128*128にリサイズします.

128*128の理由はみんなこれだからです笑

2の乗数はなにかと都合が良いらしいです.

この数字を小さくすれば学習に要する時間は小さくなります.

 

今回は顔だけを学習するため,顔だけに切り取りって128*128にリサイズします.

画像を切り取れるソフトを作ったので必要な人はダウンロードして使ってください.

>> Create_data_Chimenote - Google ドライブ

使い方はマウスでクリックするだけ!

 

>いきなり実行ファイル怖いって人へ

こういう人もいると思うのでソースコード(python)も一緒に入れてあります.

そのソースコードをPyinstallerによって実行ファイルにしただけです.

 

使い方の前に注意点を書いておきます.

・画像の説明と違って正方形は描写されない.

・正方形を決める際の右クリックは画像の横方向で決めている.

一回終了すると同じ画像が同じ順番で表示されることになるので始めたら最後までやる.

バツボタンで終了するとなんか画面が出る場合があるがプログラムの終了を押せばOK.

・クリックと書いてあるところはWindowsならダブルクリック,Macならシングルクリック.(同じソースコードなのになんで違うのかは謎です.教えてください.)

Macはapp化がうまくできなかったのでpythonを入れて実行してください.

 

**edit_image_Win.appの使い方**

Step1.Base_imageに集めた画像を入れます.

 

Step2.edit_image.exeをクリックすると下のやつが出るので自分のPCのディスプレイの縦の長さを入力しましょう. 

f:id:chime-n:20190419234857p:plain
可能な限り大きくした方が画質が良くなります.

何も入力しないでsetを押すと500になります.

気に食わなかったらバツボタンで戻ってやりなおしましょう.

 

Step3.画像の中心を決めるために左クリックする.

f:id:chime-n:20190419234922p:plain
 

Step4.正方形の長さを決めるために右クリックをする.

f:id:chime-n:20190419234950p:plain

画像の通り,右クリックした点と左クリックした点の横方向の長さを基に正方形が決定されて切り取られます.

(画像は分かりやすくするために線が入ってますが,実際はでないのでおおよそで合わせる.)

 

Step5.右クリック後はEdit_imageの中に画像が保存されるので確認する.

うまくいってなかったらフォルダ上で手動で消して,もう一度左クリックからやってください.

 

Step6.一枚の画像に複数対象があれば,同じく左クリックからやる.

 

Step7.全部終わったらマウスホイールをクリックすると次の画像が表示されるので同じことをする.以上.

 

テキトーに作っただけなのでいろいろ使い勝手悪い部分もあるけれど,ここに時間をかけたくなかったのでご了承ください.

 

ここから,画像を小さくしたい場合はerode_imageを使ってください.

使い方は実行すれば分かります.

Edit_image内の全画像がリサイズされてErode_imageに保存されます.

Erodeって名前に反して膨張(dilate)もできますが,画質が落ちるだけなので128以上はやめておきましょう.

 

私は128*128の画像を246枚準備しました.

どれくらい必要かは分かりませんが,100枚は頑張りたいです. 

 

次回予告〜機械学習実践編〜

今回はデータセットを作りました.

次回は遂に機械学習をやっていきましょう.

内容はpythonのインストールと機械学習実行になります.