Edited at

深層学習が用いられている顔の属性推定について調査中

以下は深層学習が用いられている顔の属性推定の実装です。


Age/Gender detection in Tensorflow


  • Github Python TensorFlow https://github.com/dpressel/rude-carnie


    • 顔検出は、OpenCV, dlib, YOLO tiny から選べる。

    • dlib を利用する場合には、dlibをインストールし、 shape_predictor_68_face_landmarks.datを入手します。

    • python guess.py --model_type inception --model_dir ./22801 --filename test.jpg --face_detection_type dlib --face_detection_model shape_predictor_68_face_landmarks.dat



$ python guess.py --model_type inception --model_dir ./22801 --filename test.jpg --face_detection_type dlib --face_detection_model shape_predictor_68_face_landmarks.dat

/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using face detector (dlib) shape_predictor_68_face_landmarks.dat
test.jpg
1 faces detected
['./frontal-face-1.jpg']
2018-03-17 01:30:35.010974: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-03-17 01:30:36.790278: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2018-03-17 01:30:36.804395: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties:
name: GeForce GTX 850M major: 5 minor: 0 memoryClockRate(GHz): 0.9015
pciBusID: 0000:01:00.0
totalMemory: 1.96GiB freeMemory: 1.62GiB
2018-03-17 01:30:36.804484: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 850M, pci bus id: 0000:01:00.0, compute capability: 5.0)
Executing on /cpu:0
selected (fine-tuning) inception model
./22801/checkpoint-14999
2018-03-17 01:30:43.214231: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 850M, pci bus id: 0000:01:00.0, compute capability: 5.0)
['./frontal-face-1.jpg']
Running file ./frontal-face-1.jpg
Running multi-cropped image
Guess @ 1 (25, 32), prob = 0.91
Guess @ 2 (38, 43), prob = 0.06

上の実施例のように年齢の範囲を推定する。


Pre-trained Checkpoints

You can find a pre-trained age checkpoint for inception here:

https://drive.google.com/drive/folders/0B8N1oYmGLVGWbDZ4Y21GLWxtV1E

A pre-trained gender checkpoint for inception is available here:

https://drive.google.com/drive/folders/0B8N1oYmGLVGWemZQd3JMOEZvdGs


とあるので、train済みのデータを入手する。

train用のスクリプトも用意されている。

どのデータセットを用いて

どのようにtrainしているかを詳細に書いてあるので、おそらくたどることができるだろう。

- 「git clone https://github.com/GilLevi/AgeGenderDeepLearning 」の記載あり。

-


Keras implementation of a CNN network for age and gender estimation


  • Github Python3.5 Keras2.0 https://github.com/yu4u/age-gender-estimation


    • データのダウンンロード元



    • これらの文献を参考にしている実装です。

    • 「[1] R. Rothe, R. Timofte, and L. V. Gool, "DEX: Deep EXpectation of apparent age from a single image," ICCV, 2015.

    • [2] R. Rothe, R. Timofte, and L. V. Gool, "Deep expectation of real and apparent age from a single image without facial landmarks," IJCV, 2016.

    • [3] H. Zhang, M. Cisse, Y. N. Dauphin, and D. Lopez-Paz, "mixup: Beyond Empirical Risk Minimization," in arXiv:1710.09412, 2017.

    • [4] Z. Zhong, L. Zheng, G. Kang, S. Li, and Y. Yang, "Random Erasing Data Augmentation," in arXiv:1708.04896, 2017.」



python demo.py

  USBカメラ入力で顔の性別と年齢を推定します。

AGE_LIST = ['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']

は、区間に抜けがあるのはなぜだろうか?

train.py


Gender and Age Classification using CNNs


  • Github Python tensorflow https://github.com/naritapandhe/Gender-Age-Classification-CNN


    • 次の2つの論文を参考にした実装のようです。
      「Gil Levi & Tal Hassner Alexander, Age and Gender Classification using Convolutional Neural Networks. 2015
      Ari Ekmekji. Convolutional Neural Networks for Age and Gender Classification, Stanford University. 2016」




AgeGenderDeepLearning

以下のように

https://github.com/GilLevi/AgeGenderDeepLearning/blob/master/README.md

に書かれていますから、そちらを見るべきのようです。



Also see TensorFlow implementation of our work by Rude Carnie: https://github.com/dpressel/rude-carnie


AgeAndGenderEstimation


Convolutional Neural Networks based Deep Learning Model

分類は次の8種類です。


0: Male Child, 4: Female Child

1: Male Young, 5: Female Young

2: Male Adult, 6: Female Adult

3: Male Elder, 7: Female Elder



Age & Gender guesser for Windows 10


Real-time face detection and emotion/gender classification using fer2013/imdb datasets with a keras CNN model and openCV.

Python3 による実装です。

statistics Pythonの標準ライブラリstatisticsで出来ること


Kerasでウェブカメラから顔領域を検出し、年齢・性別を推定する


Heterogeneous Learningによる顔器官点と性別・年齢・顔器官点の推定

pdf 「Heterogeneous Learning と 重み付き誤差関数の導入による顔画像解析」

Deep Convolutional Neural Networkを用いた顔画像の理解

Heterogeneous Face Attribute Estimation:A Deep Multi-Task Learning Approach


次の画像によれば、顔画像のデータ・セットでは年齢の偏りがあるとのことです。

15歳以下の顔画像と年齢の組み合わせのデータを探す必要がありそうです。

年齢の分布

次の論文では、深層学習のネットワークの異なる学習の結果を比較しています。

Understanding and Comparing Deep Neural Networks for Age and Gender Classification

The Child Affective Facial Expression Set (CAFE)

Large Age-Gap (LAG) database

FaceTracer: A Search Engine for Large Collections of Images with Faces

The Japanese Female Facial Expression (JAFFE) Database


The JAFFE database is available free of charge for use in non-commerical research.


CAS-PEAL Face Database

https://susanqq.github.io/UTKFace/

EAVISE Open Source Face Detection Dataset

https://iiw.kuleuven.be/onderzoek/eavise/facedetectiondataset/home

以下のURLにはデータベースの一覧があります。

http://www.face-rec.org/databases/

https://www.ecse.rpi.edu/~cvrl/database/other_Face_Databases.htm

CASIA WebFace Database

Facial point annotations


これは、作った画像

https://syncedreview.com/2017/05/18/face-aging-with-conditional-generative-adversarial-networks/

https://github.com/ZZUTK/Face-Aging-CAAE


付記

 各種の実装では、使用しているライブラリのバージョンが異なる場合が多くなります。

 Dockerなどのソフトウェアを使いこなせるようにすれば、これらのライブラリをすべて動作させることが可能になるのでしょう。


警告 (2018.10追記)

顔の属性推定は、人種による影響を受けやすい。

そのため、ヨーロッパ系の人でうまくいく年齢・属性推定の学習結果が、東アジア系の人に対してうまくいくとは限らない。

とりわけ、オープンソースの分野で用いられている学習済みのデータは、ヨーロッパ系の人を多く含み、東アジア系の人の比率が少ないことに留意しよう。

最近は、中国からもオープンソースのソースコードが提供されているし、

顔関係のデータベースの公開がなされているのが増えてきている。

Face classification and detection from the B-IT-BOTS robotics team.

参考URL

年齢・性別判定APIを比較しました(その1)

年齢・性別判定APIを比較しました(その2)


追記 2019.05.22

Intel® Distribution of OpenVINO™ toolkit : Pretrained Models

OpenVino で提供されている Pretrained Models に各種属性推定が入っている。


  • Age & Gender Recognition

  • emotion-recognition
    などがある。

https://www.learnopencv.com/age-gender-classification-using-opencv-deep-learning-c-python/

にもOpenCVを使った性別・年齢の分類の深層学習がある。