Kerasで顔画像から年齢と性別を推定してみました。リポジトリはYoloKerasFaceDetectionです。データセットには、 AdienceBenchmarkOfUnfilteredFacesForGenderAndAgeClassificationを使用させて頂きました。
年齢と性別の推定には顔領域の画像を与える必要があるため、Webカメラを使用する場合、顔領域を検出して切り出す必要があります。一般にはOpenCVを使用しますが、OpenCVは眼鏡付きの顔の認識精度が低いため、今回、顔検出にはYoloを使用しています。顔検出の係数はYOLOライセンスのYOLO-version-2-Face-detectionを使用させて頂きました。そのため、Caffeも必要です。
学習済みモデルを同じフォルダにおいた後、以下のコマンドでWebカメラから年齢と性別の推定が可能です。
年齢のカテゴリは以下の8カテゴリです。
性別のカテゴリは以下の2カテゴリです。
学習はVGG16をファインチューニングしました。学習のコードはagegender_train.pyにあります。
最初は年齢と性別を同時に認識させたのですが、うまく精度が出ませんでした。そのため、年齢と性別を別のネットワークで学習させるように変更しました。ただ、分解してもAge Netが過学習ぎみなので、もう少し追い込む必要がありそうです。
Age & Gender

Age

Gender

先行事例としては、Age and Gender Classification using Convolutional Neural Networksがあり、そこからTensorFlow + InceptionV3版のAge/Gender detection in Tensorflowがあります。また、MicrosoftのVison APIのデモがHow-Old.netにあります。
リファレンスモデルも以下のコマンドで実行できます。自己学習モデルは現状はまだ精度が出ていないので、Age and Gender Classification using Convolutional Neural Networksのリファレンスモデルを使用することをオススメします。
実行すると以下のように顔検出と年齢・性別検出を行います。

(出典:WIDER face dataset)
年齢と性別の推定には顔領域の画像を与える必要があるため、Webカメラを使用する場合、顔領域を検出して切り出す必要があります。一般にはOpenCVを使用しますが、OpenCVは眼鏡付きの顔の認識精度が低いため、今回、顔検出にはYoloを使用しています。顔検出の係数はYOLOライセンスのYOLO-version-2-Face-detectionを使用させて頂きました。そのため、Caffeも必要です。
学習済みモデルを同じフォルダにおいた後、以下のコマンドでWebカメラから年齢と性別の推定が可能です。
python agegender_demo.py keras
年齢のカテゴリは以下の8カテゴリです。
age 0-2
age 4-6
age 8-13
age 15-20
age 25-32
age 38-43
age 48-53
age 60-
性別のカテゴリは以下の2カテゴリです。
female
male
学習はVGG16をファインチューニングしました。学習のコードはagegender_train.pyにあります。
最初は年齢と性別を同時に認識させたのですが、うまく精度が出ませんでした。そのため、年齢と性別を別のネットワークで学習させるように変更しました。ただ、分解してもAge Netが過学習ぎみなので、もう少し追い込む必要がありそうです。
Age & Gender
Age
Gender
先行事例としては、Age and Gender Classification using Convolutional Neural Networksがあり、そこからTensorFlow + InceptionV3版のAge/Gender detection in Tensorflowがあります。また、MicrosoftのVison APIのデモがHow-Old.netにあります。
リファレンスモデルも以下のコマンドで実行できます。自己学習モデルは現状はまだ精度が出ていないので、Age and Gender Classification using Convolutional Neural Networksのリファレンスモデルを使用することをオススメします。
python agegender_demo.py caffe
実行すると以下のように顔検出と年齢・性別検出を行います。
(出典:WIDER face dataset)
コメント