Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - MiviaLab/AgeEstimationFramework: Effective training of convolutional neural networks for age estimation based on knowledge distillation · GitHub
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MIVIA Efficient Age Estimation Deep Learning Framework

A detailed explaination of the material contained in this repository is in this paper. If you find any of this content useful for your research, please cite

Effective training of convolutional neural networks for age estimation based on knowledge distillation
A. Greco, A. Saggese, M. Vento, V. Vigilante
Neural Computing and Applications 2021.
https://doi.org/10.1007/s00521-021-05981-0

For more details about the research in the field of age estimation, you can refer to this survey

Age from Faces in the Deep Learning Revolution
V. Carletti, A. Greco, G. Percannella and M. Vento
IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 42, no. 9, pp. 2113-2132, 1 Sept. 2020
doi: 10.1109/TPAMI.2019.2910522.

Content of this repository

Abstract

Age estimation from face images can be profitably employed in several applications, ranging from digital signage to social robotics, from business intelligence to access control. Only in recent years, the advent of deep learning allowed for the design of extremely accurate methods based on convolutional neural networks (CNNs) that achieve a remarkable performance in various face analysis tasks. However, these networks are not always applicable in real scenarios, due to both time and resource constraints that the most accurate approaches often do not meet. Moreover, in case of age estimation, there is the lack of a large and reliably annotated dataset for training deep neural networks.

Within this context, we propose in this paper an effective training procedure of CNNs for age estimation based on knowledge distillation, able to allow smaller and simpler "student" models to be trained to match the predictions of a larger "teacher" model. We experimentally show that such student models are able to almost reach the performance of the teacher, obtaining high accuracy over the LFW+, LAP 2016 and Adience datasets, but being up to 15 times faster. Furthermore, we evaluate the performance of the student models in presence of image corruptions, and we demonstrate that some of them are even more resilient to these corruptions than the teacher model.

Framework

Setup

pip3 install -r requirements.txt

Images and annotation for the different datasets are not provided and need to be downloaded separately from the original sources.

Dataset

The implemented dataset are based on VGGFACE2, IMDB-WIKI (cleaned), LFW+, CHALEARN APPA-REAL and ADIENCE.
Run these commands from dataset directory in order to verify that the images and annotations are correctly loaded.

python3 vggface2_dataset_age.py
python3 imdbwiki_dataset_age.py
python3 lfw_dataset_age.py
python3 chalearn_lap_appa_real_age.py
python3 adience_dataset_age.py

Images and annotation are not provided and need to be downloaded separately. Annotation for VMAGE (MIVIA VGGFace2 Age annotation) is provided here.

Train

In order to train neural networks, you must run train.py script from the training directory.
Here the used commands to train the associated paper solutions.

python3 train.py --net mobilenet224 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet224 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenet96 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 256 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net vgg16 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net senet50 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net densenet121bc --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3 --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3small --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset vggface2_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70
python3 train.py --net mobilenetv3large --dataset imdbwiki_age --pretraining imagenet --preprocessing vggface2 --augmentation default --batch 128 --lr 0.005:0.2:20 --sel_gpu 0 --training-epochs 70

Pretrained models can be downloaded here.

Fine-tuning

We provide an interface in order to perform fine-tuning over CHALEARN APPA-REAL dataset (train and validation set) and over ADIENCE dataset (5 folds: 3 train and 1 validation, leaving 1 fold for testing purpose, used in rotation, e.g. train:0-1-2 val:3, train:1-2-3 val:4, etc.). You can change the fine-tuning parameters directly in the interface code. In the example commands we use SENet-50 network directory.

python3 train_chalearn_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_chalearn_interface.py ../trained/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/
python3 train_adience_interface.py ../trained_ended/_netsenet50_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch128_lr0.005_0.2_20_sel_gpu2_training-epochs70_20200528_154836/
python3 train_adience_interface.py ../trained_ended/_netmobilenet96_datasetvggface2_age_pretrainingimagenet_preprocessingvggface2_augmentationdefault_batch256_lr0.005_0.2_20_sel_gpu1_training-epochs70_20200613_004027/

Pretrained models can be downloaded here

Evaluation

In order to evaluate the networks, move into the evaluate directory and use the scripts provided for testing on the supported datasets. In the subdirectory results, as the name suggests, you will find the results of these scripts, divided by dataset.

About

Effective training of convolutional neural networks for age estimation based on knowledge distillation

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages