Gender and Age Prediction, what next?


(Oli) #1

I am trying to build a neural net to predict gender and age of persons. For this I am using the IMBD+Wiki Dataset (https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/). Thats about 500k images labeled with year of birth, year of foto-taken and gender.

For gender prediction I created a csv file for the wiki dataset (60k images) with labels for male/female and split the data for 80% train and 15% validation and 5% test. Then followed the steps from lesson 1-3 … mainly:

1) Enable data augmentation and precompute = True
2) Use lr_find() to find decent learning rate
3) Train last layer from precomputed activations for 1-2 epochs
4) Train last layer with data augmentation (precompute = False) for 2-3 epochs with cycle_len=1
5) Unfreeze all layers
6) Set an array of learning rates (orders of magnitude per step)
7) Use lr_find() again
8) Train full network with cycle_mult=2 until over-fitting

After completing these steps I get an accuracy of ~ 0.94 (resnext50). Not bad but also room to improve …

For age prediction I tried the same procedure. I created a csv file with labels for “age-class”. For this I am subtracting “year-of-foto-taken” - “year-of-birth”. Then I do some sanity checks (age between 0-100) and I label the foto with 0 for 0-9, 10 for 10-19, 20 for 20-29 etc.

Then I try to train a classifier like for the gender detection. After various experiments all I can get is about ~0,46 % accuracy. Of course it is much harder to predict the age of a person then the gender but 0.46 seems pretty low as I am just trying to predict something like 10-19 or 20-29 and not the exact age.

What would be the next experiments you would try to improve the classifiers? Is it a much better idea to train the age prediction as a “regression problem”?


#2

I am doing the same practice problem (age) but treating it as a regression problem and passing in labels from a function - I would assume that in principle it is more difficult than categorising into an age group.

What got me stuck for quite some time is the metric - error_rate doesn’t make sense in a regression task and will produce runtime errors (something like MAE must be used).