Age and Gender Recognition Based on MXNET

Age and Gender Recognition

Age and gender recognition, developed based on the insightface feature module, supports simultaneous detection and recognition of multiple faces.

Source Code Address: https://github.com/yeyupiaoling/Age-Gender-MXNET

Environment

  • Install MXNet, supporting versions 1.3~1.6. The installation command is as follows:
    ```shell script
    pip install mxnet-cu101==1.5.0
# Dataset

- The following three datasets are supported by default. Download and extract these three datasets into the `dataset` directory.

1. http://afad-dataset.github.io/
2. http://mmlab.ie.cuhk.edu.hk/projects/MegaAge/
3. https://ibug.doc.ic.ac.uk/resources/agedb/

- Generate the data list:
```shell script
python create_dataset.py
  • If you want to train a custom dataset, simply generate a data list similar to the following:
    ```shell script
    dataset/AgeDB/0_MariaCallas_35_f.jpg,0,35
    dataset/AgeDB/10000_GlennClose_62_f.jpg,0,62
    dataset/AgeDB/10001_GoldieHawn_23_f.jpg,0,23
    dataset/AgeDB/10003_GoldieHawn_24_f.jpg,0,24
    dataset/AgeDB/10004_GoldieHawn_27_f.jpg,0,27
    dataset/AgeDB/10005_GoldieHawn_28_f.jpg,0,28
    dataset/AgeDB/10006_GoldieHawn_29_f.jpg,0,29
To view the age distribution, execute `show_age_distribution.py` to generate an age distribution chart.

![](/static/files/2021-04-07/09fb3bb01d824c508da785524df36e05.png)


# Training

Start training. For specific parameters, refer to the code. Here, we introduce the `network` parameter, which selects the model. When set to `r50`, ResNet is chosen as the feature extraction model; when set to `m50`, MobileNet is used as the feature extraction model.
```shell script
python train.py

Training output results:

gpu num: 1
num_layers 50
data_shape [3, 112, 112]
Called with argument: Namespace(batch_size=128, color=0, ctx_num=1, cutoff=0, data_dir='dataset', data_shape='3,112,112', end_epoch=200, gpu_ids='0', image_channel=3, image_h=112, image_w=112, lr=0.1, lr_steps='10,30,80,150,200', network='m50', num_layers=50, prefix='temp/model', pretrained='', rand_mirror=1, rescale_threshold=0, version_input=1, version_output='GAP')
1 GAP 32
INFO:root:loading recordio dataset\train.rec...
INFO:root:dataset\train.rec Data size: 303018
INFO:root:Randomly flip images: 1
INFO:root:loading recordio dataset\val.rec...
INFO:root:dataset\val.rec Data size: 1032
INFO:root:Randomly flip images: False
call reset()
Training started...
INFO:root:Epoch[0] Batch [0-20] Speed: 520.85 samples/sec   acc=0.572545    MAE=10.734747   CUM_5=0.240699
INFO:root:Epoch[0] Batch [20-40]    Speed: 518.95 samples/sec   acc=0.589844    MAE=9.351172    CUM_5=0.289844
INFO:root:Epoch[0] Batch [40-60]    Speed: 516.86 samples/sec   acc=0.603125    MAE=9.184766    CUM_5=0.303906
INFO:root:Epoch[0] Batch [60-80]    Speed: 508.44 samples/sec   acc=0.609766    MAE=8.759375    CUM_5=0.336719
INFO:root:Epoch[0] Batch [80-100]   Speed: 461.26 samples/sec   acc=0.656250    MAE=8.224609    CUM_5=0.361328
INFO:root:Epoch[0] Batch [100-120]  Speed: 518.43 samples/sec   acc=0.696875    MAE=7.611328    CUM_5=0.400391
INFO:root:Epoch[0] Batch [120-140]  Speed: 514.88 samples/sec   acc=0.715234    MAE=7.224609    CUM_5=0.426172
INFO:root:Epoch[0] Batch [140-160]  Speed: 517.80 samples/sec   acc=0.722266    MAE=6.976172    CUM_5=0.437500

Evaluation

After training, run the following command to evaluate the model’s recognition accuracy:
```shell script
python eval.py

Output results:
```shell
100%|██████████| 1032/1032 [00:06<00:00, 153.75it/s]
Gender accuracy: 0.972868
Age accuracy: 0.761628

Prediction

Use the trained model or the model provided by the author to perform age and gender recognition by specifying the image file path:
```shell script
python infer.py –image=test.jpg

Recognition output results:
```shell
Face 1, Position (160, 32, 204, 84), Gender: Male, Age: 30
Face 2, Position (545, 162, 579, 206), Gender: Female, Age: 31
Face 3, Position (632, 118, 666, 158), Gender: Male, Age: 28
Face 4, Position (91, 159, 151, 237), Gender: Male, Age: 38
Face 5, Position (723, 123, 760, 169), Gender: Male, Age: 26
Face 6, Position (263, 120, 317, 191), Gender: Male, Age: 27
Face 7, Position (438, 134, 481, 190), Gender: Male, Age: 46
Face 8, Position (908, 160, 963, 224), Gender: Male, Age: 35
Face 9, Position (39, 51, 81, 102), Gender: Female, Age: 31
Face 10, Position (807, 148, 847, 196), Gender: Female, Age: 26
Face 11, Position (449, 40, 485, 84), Gender: Male, Age: 29
Face 12, Position (378, 46, 412, 86), Gender: Female, Age: 33
Face 13, Position (534, 46, 567, 83), Gender: Male, Age: 30
Face 14, Position (272, 20, 311, 67), Gender: Male, Age: 28
Face 15, Position (358, 216, 375, 237), Gender: Male, Age: 27

Effect diagram:

Xiaoye