Automatic Age Detection by Neural Network in an Image

Abhishek Gupta
3 min readMay 26, 2019

--

The neural network facilitates automation image processing facilities which are either number plate recognition, face detection, expression recognition, joining images at different exposures etc. It also eases the task to recognize and verify the ages from the images which help in passports and other related applications. This MATLAB code for age detection from images contributes towards that fact. We developed this code at free-thesis. We used FGNET aging dataset for the features generation and testing. Though testing also worked on other images which don’t have covered faces by sunglasses or by any other means. The complete pipeline is like this:

Pipeline for Age detection from an image using Neural Network

The features are extracted by Local binary feature extraction. MATLAB has a toolbox for that. It made the work amazingly easier and the features extraction part is finished in a couple of lines.

files=dir('./FGNET/images');
for ii=3:size(files,1)
imgname=files(ii).name;
img=imread(['./FGNET/images/',imgname]);
if size(img,3)==3
img=rgb2gray(img);
end
features(ii,:) = extractLBPFeatures(img);
end

The extractLBPFeatures function in MATLAB does this task and we called it in a loop to use it for every single image in FGNET database.

After extracting features we had a matrix of dimension 1002*20 where each row represents every image in the database. The interesting step in the whole pipeline is the features pre-processing. The whole database is divided into eight different age groups, which makes this data highly imbalanced as shown in the figure.

Un-balanced Dataset distribution in each age group class

We had the highest number of samples in class 1 and non-competitive very few numbers of samples in other classes. Training the neural network using this dataset would be highly biased and the same class would be predicted with every different test image. To avoid this, this data is made balanced with the help of SMOTE algorithm. This was developed for binary classes. In it, the classes with less number of samples are oversampled to balance the distribution and we tweaked this algorithm to make it suitable for multiclass data.

The difference in the number of samples from the major class is used to balance for every class. The code snippet for this is as

%add on samples will be calculated by taking the difference of each
%classSamples with highest number of class samples

[maximumSamples,sampleClass]=max(classNo); % number of maximum samples
for ii=1:numel(class)
samplediff(ii)=maximumSamples-classNo(ii);
N (ii) = ceil(samplediff(ii)/ 100);

end

The samples distribution in each class after the SMOTE algorithm is shown in the figure.

Balanced data distribution after SMOTE for each age group

After the data balancing the Neural network training is performed and we tested the results for a few other non-FGNET images too. After SMOTE data balancing the high accuracy is achieved even with simplest LBP features. Though we choose the testing images with either 0-degree angle or with a small tilt in the face.

The MATLAB code for this repository can be freely downloaded from https://free-thesis.com/product/age-detection-by-nn-trained-lbp-features/

--

--

Abhishek Gupta

I am a senior researcher with experience of 7+ years in various domains (specifically in ML & Computer Vision) at http://free-thesis.com with MATLAB & Python