AI coordinator

人工知能 & ロボティクス

© AI coordinator All rights reserved.

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

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

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

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

 

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

 

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

図の通り、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人については学習データ悪いのか、モデルが悪いのか、原因がわかりません。

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

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

 


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

 

それではまた。

関連記事

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

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

20176/21

カメラ映像からの物体検出

PC内蔵カメラから自分の顔の物体検出をやってみる ほとんど筆者の備忘録的な内容になります。 色々な映像や画像からの物体検出をチャレン…

20177/25

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

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

20178/15

DeepLearningのモデル可視化方法とmatplotlibで学習の様子を可視化する方法

学習モデルの可視化と学習の様子を可視化してみた 何を今更といった内容の記事です。 DeepLearningにチャレンジしてきた筆者で…

20178/8

動体撮影に特化した監視カメラの作成方法

動く物体を検知して写真撮影をする監視カメラ OpenCVを使えば動体撮影に特化した監視カメラを作成することができるのではないかと考え、実装…

20179/16

Selective Searchを使った映像からの物体検出にチャレンジ

Selective Search 物体検出にチャレンジしている筆者としては、どうやって画像から物体らしき部分を効率よく抽出できるかを日々模…

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のパスの通し方に付いて説明し…

20178/29

TensorFlowでFashion-MNISTを試してみた

ファッション画像?でMNIST Fashion-MNISTというデータセットが公開されたので早速試してみました。 MNISTとの違い…

20174/25

DeepLearningに必要なソフトウェアのセットアップ

DeepLearningに必要なソフトウェアをubuntuにインストール ubuntuをインストールしたら、次はソフトウェアの環境準備に取…

言葉を自動学習するSlackbotをマルコフ連鎖で実装

マルコフ連鎖とは 簡単に説明すると、マルコフ連鎖を使用すれば既存の文章を元にして自動で文章を生成することができるようになります。 ロ…

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

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

ページ上部へ戻る