Tensorflowで映像からの美人女優顔検出学習モデルの見直し

Tensorflowで映像からの美人女優顔検出学習モデルの見直し

以前の記事で紹介したモデルが使い物にならなかった

こんにちは。

AI coordinatorの清水秀樹です。

以前紹介したリアルタイム映像からの美人女優検出で作成した学習モデルは、とりあえず学習モデルの作成方法を学ぶことを目的としていたため、精度は二の次としていました。

今回、人様の前でこの内容を紹介することになり、久しぶりに学習モデルを作成して実践してみたところ、

 

想像以上に精度が悪すぎました。(; ・`д・´)

 

はっきりって使い物になりませんでした。

図の通り、nb_epoch = 4 からいきなり過学習になります。

 

というわけで、改めて学習モデルの作り方を見直したので、その内容の紹介になります。

ちなみに以下が、見直した時の結果です。

 

見違えるぐらい良くなりました。

今回学習して学んだことは、筆者の備忘録として細かく記載していきたいと思います。

 

参考にしたサイト

定番のConvolutional Neural Networkをゼロから理解する

こちらのサイトは「Convolutional Neural Network(CNN)」を図解でわかりやすく表現してくださっているサイトです。

畳み込み層をイメージするならこちらのサイトが参考になります。

続いて以下のサイトです

こちらのサイトはKerasを使用する上での説明を詳しく紹介してくださっています。

 

また、以下のサイトも参考にさせて頂きました。

ディープラーニングのCNNとKerasを対応づけてみたーその1機械学習(8日追加)

畳み込み層を簡単にイメージアップする上で参考になります。

 

最後に紹介するサイトは4次元テンソルの考え方や、畳み込み層のフィルタの可視化なんかを紹介してくださっているサイトになります。

以上、貴重な情報提供ありがとうございます。

 

精度が低い1番の理由は学習データ量が少なすぎたこと

5人の美人女優たちの画像を集めていましたが、各人の学習用データの枚数は以下も枚数で実施していました。

 

上戸彩 :229枚

剛力彩芽:168枚

渡辺麻友:143枚

佐々木希:56枚

新垣結衣:138枚

 

前回はテキトーにやったとはいえ、あまりにも画像数が少なすぎたようです。

ということで、画像枚数を増やせば良いわけですが、前回もgoogle様の画像検索から一通りダウンロードして画像を集めた経緯があります。

そのため、これ以上新しい画像を準備することは難しいと判断。

そこで閃いたの方法が、

 

コピーして増やせば良いじゃん!( ・`ー・´) + キリッ

 

効果があるかどうか不明でしたが、同じ画像でも少ないよりは良いと判断し、コピーという非常に楽な方法で画像枚数を増やしました。

 

上戸彩 :229枚 → 458枚

剛力彩芽:168枚 → 504枚

渡辺麻友:143枚 → 572枚

佐々木希:56枚  → 560枚

新垣結衣:138枚 → 552枚

 

実はこれが一番効果がありました。

 

畳み込みニューラルネットワークをちょっと勉強してみた

テキトーに作り上げていた畳み込み層(Convolution2D等)のパラメータを意識してモデルを作り変えました。

以下は、以前作成したモデル

 

以下は、今回作り変えたモデル

 

自分なりの解釈

自分なりに解釈した内容を備忘録として残して見ようと思います。(すぐ忘れるので)

基本的にモデルの層の数は好きなように決めて良い。(多分)

とはいえある一定のルールはあるはず。

ただ、明確に何層まであれば良いのかとか、Convolution2Dの引数の値の正当性なんかを紹介しているサイトは見つからなかった。

とりあえず参考書なんかにあるサンプルを参考に作ってみたが、この辺のモデル構築は企業機密なのかもしれない。

 

各引数の意味

model.add(Convolution2D(32, 3, 3, border_mode=”same”))

→32は畳み込み層の数。

→3,3はフィルターサイズこの場合は3×3。。

 

model.add(MaxPooling2D(pool_size=(2, 2)))

→Convolution層の後に入力データを扱いやすくするために、情報を圧縮する。

 

batch_size

→学習データから設定したサイズごとにデータを取り出し、計算を行う。

 

nb_epoch

→モデルを学習するエポック数(学習データ全体を何回繰り返し学習させるか)を指定する。

 

とりあえずメモでした。(適当に理解)

 

ソースの紹介

学習モデルを作成するソース全容です。

継ぎ接ぎで作成しているため、ソースはショボショボです。

もっと良いモデル構築方法があればぜひご指摘頂ければと思います。

 

それでもある1人の人物検出が正しくできない

なぜか不明。

ある1人の誤検知が多く、残り4人はまあまあな感じです。

 

誤検知多い1人については学習データ悪いのか、モデルが悪いのか、原因がわかりません。

学習データを入れ替えるなどして再分析して見る必要がありそうです。(今のところその気力なし)

また気が向いた時に見直してみたいと思います。

それではまた。

About The Author

Hideki
東京大学発AIスタートアップ企業でロボット開発室室長、画像解析室室長、動画解析室室長を務め、AIエンジニアとしても画像認識関連の特許を在籍中に3つ取得。その後、KDDIグループ内でプロダクトリーダーとして自然言語処理パッケージの自社開発を経て、現在はAGRISTのテックリードとして農業の人手不足の解決に向けた収穫ロボットの開発にチャレンジしている。ロボットは技術の総合格闘技との考え方から、AIだけでなく、ハードやエレキ、通信からクラウド、IOTまで幅広く手掛けることができる。最近では人とロボットの共存を目指すべく、性能だけを追い求める開発から「感動やワクワク体験」をデザインできるロボットの研究を進めており、人とロボットがうまく共存できる世界を作り出したいと日々行動している。

LEAVE A REPLY

*
*
* (公開されません)