ホーム > カテゴリ > Python・人工知能・Django >

顔検出、顔識別(顔認識)に挑戦してみる

Python/TensorFlowの使い方(目次)

AI(人工知能)を使用して画像から顔を検出して、その顔を認識する。

結論から言うと、

お主は誰だ。
AI(人工知能)が「あなたの顔はどんな芸能人、有名人に似てるか」を判定する顔診断アプリ

をアウトプットしました。

今回は、顔でしたが「自動車を検出して、車種を特定」など他のケースにも置き変えることが可能です。

以降は私の奮闘記です。どなたかのご参考になると幸いです。

1. データ収集

318人の芸能人、有名人の写真を3181枚、Googleの画像検索から収集。

日数2日
データ構成約10枚 / 人

収集する際にはWindowsアプリを作成して、コピペとボタン1つでファイルが作成されるようにした。(日数にはラベリング作業も含まれる)

<著作権に関する引用>
日本の著作権法では、「情報解析を行うために著作物を複製すること」が、営利・非営利問わず認められているのだ。世界にもまれな規定だ。

※引用元:「日本は機械学習パラダイス」その理由は著作権法にあり

2. Object Detection API

このデータでカップラーメンと同様にObject Detection APIを試してみる。

顔検出の精度は抜群。でも顔認識は使い物にならない。

3. MNISTで試す

MNIST Converterを作成して、データセットを28x28にする。精度は0.01で全くダメ。そもそも318種類というクラス数が多すぎる。

MNIST Converter付属のgrowth.exeで1枚の画像を10倍、30倍、50倍に「水増し」しても効果なし。

この時点で気づいた。1人10枚の写真じゃ、データ数が少なすぎる。

4. 新規にデータ収集

手動で収集は疲れたので「Bing画像検索API」で自動で画像を収集する。

15人で4319枚を収集した。

日数1時間以内
データ構成約287枚 / 人

で、収集した画像から顔を切り取るのは2で作成したモデルを使用した。

その後、それらの顔画像をMNIST Converterで28x28のデータセットにしました。CNNで試すと精度は0.63。クラス数を減らすと0.75ぐらいある。

なるほろ、なんとか実用レベルになりました。

5. 最終的に

「画像から顔を検出するAI」(SSD)で顔を切り出して、その顔を「顔を判別するAI」(CNN)で判定する事としました。AIは2種類です。

スマホで学習済みモデルを動作させるにはTensorFlow MobileのデモアプリのインストールTensorFlow MobileのHello Worldをご覧ください。





関連記事



公開日:2018年08月25日 最終更新日:2018年08月26日
記事NO:02719