AI coordinator

人工知能 & ロボティクス

© AI coordinator All rights reserved.

ディープラーニングで美人女優の顔検出に挑戦

美人女優で学習モデルを作成

以前紹介したcifar10を使った学習モデルのモノマネで、自分で準備した画像から学習モデルを作成することに挑戦したので、その内容を紹介します。

画像集めから顔を識別するところまでの内容を紹介しますので、自分で準備した画像で学習モデルを作成してみたい方はぜひ参考にしてみてください。

 

参考にした書籍

これからDeep Learningの勉強をするなら、こちらで紹介する書籍が参考になります。

 

テスト環境

macOS Sierra

Anaconda3-4.2.0-MacOSX-x86_64

python 3.5.2

opencv3 3.1.0

tensorflow-0.12.1

keras 1.2.2

 

まずは画像集めから

これが一番大変かもしれません。

今回は美人女優の顔を識別できる学習モデルの作成にチャレンジしたいので、どうやって画像を大量に集めるか考える必要があります。

 

手っ取り早い方法はネットから画像検索すれば良いのですが、いちいち一枚づつ保存するのは非常に面倒かつ非効率です。

こういう時にpythonでスクレイピングができる方は羨ましいですね。

筆者は頑張ってスクレピングに挑戦しましたが、上手くダウンロードできず諦めました。

今回は学習モデルの作成と顔検出が目的ですので、スクレイピングについてはいずれまた挑戦したいと思います。

 

画像集めについてはfirefoxのプラグイン「FlashGot Mass Downloader 」が便利です。

プラグインのインストール方法とプラグインを使った画像のダウンロード方法の説明はここでは割愛します。

ググって頂ければすぐにわかると思います。

 

今回はこのfirefoxのプラグインで画像を集めました。

集めたサイトはgoogleの画像検索からです。

今回集めた画像は、剛力彩芽さん、佐々木希さん、上戸彩さん、新垣結衣さん、渡辺麻友さんの計5名の画像です。

どうせ画像を集めるなら美人さんが良いと思いまして・・・・

ただ、こうやって画像を並べてみるとみんな似たような顔してますね。

そう思うのは筆者だけかもしれませんが。

 

画像が似ているのでマイクタイソンやボブサップの画像も混ぜ込もうと思いましたが、機械学習こそ似た画像をしっかり識別できるはず!と判断し、あえて明らかに顔の形が違う人は含めず、上記5名で学習モデルを作成することにしてみました。

 

顔部分のトリミング

画像を集めたら、顔部分のトリミングを行います。

大量画像からの顔部分のトリミングについてはこちらの記事を参考にしてみてください。

この記事ではOoenCVの顔検出でトリミングを行いますが、顔以外もトリミングされてきてしまいますので、不要な画像は後から人力で削除する必要があります。

 

これも結構大変。

頑張ってやりましょう。

 

トリミング後の顔画像は少なくとも100以上あると良いでしょう。

画像は多いに越したことはありませんから。

 

画像の増幅と数値データへの変換

画像の増幅といっても、ただ無駄に同じ画像を増幅するわけではありません。

画像の角度を変更したり、反転させたりしてデータの数を増やします。

そうすることでディープラーニングする際のインプット画像を増やし、学習モデルの精度を上げることができるようになります。

 

また、機械学習させるためには画像データを数値データへ変換しておく必要があります。

cifar10も画像データの集まりというよりは、画像データを数値データへ変換したデータセットになっています。

画像データのままでは機械学習に使えませんので、画像を数値データへ変換しましょう。

 

以下のソースコードは画像を増やしつつ、数値データへの変換もやってくれます。

ソースコードを実行する前に、保存したファイルのディレクトリ構造をソースにあった形にしておく必要があります。

人物ごとの画像ファイルを保存するディレクトリは以下の画像を参考にしてください。

photo_outフォルダの配下に人物ごとのフォルダを作り、その人物ごとのフォルダの中に大量の顔画像があるディレクトリになっています。

 

無事に正常終了すれば、画像データを数値データに変換したデータセットが出来上がります。

この場合は「idol.npy」というファイル名で保存されます。

 

学習モデルの作成

いよいよ学習モデルの作成です。

畳み込みニューラルネットワークを使った学習ですね。

学習モデルの定義や学習させる回数はお好みで変更してください。

結果は、

う〜ムゥ。

78%とは低いですね。

学習モデルをもう少し工夫する必要があるのかもしれません。

とりあえず今回はこれで良しとします。

 

画像の判定

学習モデルの作成が完了したら、早速画像の判定をやってみましょう。

適当に準備した画像から顔の識別をやってみたいと思います。

今回使った画像は以下の画像たちです。

ファイル名に女優名を付加することで、結果の確認を分かりやすくしました。

実行結果はこうなりました。

結果は、

ファイル名、確信度、学習済みモデルの結果

を表示するようにしています。

 

 

一部の女優を間違えていますね。

だいたい78%ぐらいの正答率ですね。

精度を上げるにはもう少し画像データを準備する必要があるのかもしれません。

今回は一人当たり150枚程度でしたから。

 

 

自分で集めた画像からの顔検出でした。

今後はSSDにもチャレンジしていきたいと思います。

 


その他の物体検出記事はこちらから

 

それではまた!

関連記事

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

20176/5

Pepper SDK pynaoqi-python2.7-2.5.5.5-mac64 パスの通し方 for MAC

Pepper SDK 2.5.5.5 コレグラフの新しいバージョン2.5.5.5に対応したpython SDKのパスの通し方に付いて説明し…

Watson NLCに学習データを投入できるGUIの開発方法

Watson NLCに学習データを投入できる画面をPythonで実装する方法 Watson NLCに学習データを投入できる簡単な画面を開発…

20174/29

jupyter notebookのインストールに失敗した時の対処法(MAC)

jupyter notebookのインストールに失敗 簡単にインストールできると思った「jupyter notebook」のインストールに…

20177/25

カメラ映像から動く物体の輪郭検出が簡単にできた話

OpenCVを使って動く物体の輪郭検出をやってみた 今更ながらにOpenCVの凄さを実感しました。 まさか物体の輪郭検出までできると…

TensorFlowのオブジェクト検出APIで物体検出に挑戦

TensorFlowで物体検出APIがリリースされたので早速試してみた googleからの新しい物体検出APIがリリースされました。 …

20173/3

Pepper用Python 2.7 SDK(MAC)セットアップ方法

コレグラフを使用しなくてもPepperを動かせるPython 2.7 SDKセットアップ方法 MAC編 プログラムソースをバリバリ記述しな…

wikipedia全文データからWord2Vecで類義語を抽出してみる

自然言語処理の入門、wikipedia全文データを使ってみる 自然言語処理について何から勉強を始めようかと色々模索していたところ、wiki…

MNISTって何?数字を識別できる学習モデルの作成方法

MNISTとは MNISTとは手書き数字画像60000枚とテスト画像10000枚を集めた画像データセットになります。 ニューラルネッ…

20173/11

Pepperコントローラー for Python

PythonでPepperコントローラーを作成 Pepperを簡単に動かせるPepper用コントローラーをPythonで作成してみましょう…

wikipediaを学習した類義語を話すSlackbotの作成方法

wikipedia日本語全文データから類義語を話すSlackbotを作った話 前回の記事で日本語を学習するマルコフ連鎖を使ったSlackb…

ページ上部へ戻る