This is a Keras implementation of a CNN network for estimating age and gender from a face image. In training, the IMDB-WIKI dataset is used.
- Python3.5+
- Keras
- scipy, numpy, Pandas, tqdm, tables, h5py
- dlib (for demo)
- OpenCV3
Tested on:
- Ubuntu 16.04, Python 3.5.2, Keras 2.0.3, Tensorflow(-gpu) 1.0.1, CUDA 8.0, cuDNN 5.0
- macOS Sierra, Python 3.6.0, Keras 2.0.2, Tensorflow 1.0.0
Download pretrained model
mkdir -p pretrained_models
wget -P pretrained_models https://www.dropbox.com/s/rf8hgoev8uqjv3z/weights.18-4.06.hdf5
Run demo script (requires web cam)
python3 demo.py
The dataset is downloaded and extracted to the data
directory.
./download.sh
Filter out noise data and serialize images and labels for training into .mat
file.
Please check check_dataset.ipynb
for the details of the dataset.
python3 create_db.py --output data/imdb_db.mat --db imdb --img_size 64
Train the network using the training data created above.
python3 train.py --input data/imdb_db.mat
Plot training curves from history file.
python3 plot_history.py -input models/history_16_8.h5
In the original paper, the pretrained VGG network is adopted. Here the Wide Residual Network (WideResNet) is trained from scratch. I modified the @asmith26's implementation of the WideResNet; two classification layers (for age and gender estimation) are added on the top of the WideResNet. Note that age and gender are estimated independently using different two CNNs.