Comment créer un prédicteur multi-tâches âge et genre avec apprentissage en profondeur dans TensorFlow

Source: https://www.governmentciomedia.com/ai-takes-face-recognition-new-frontiers

Dans mon dernier tutoriel, vous avez appris à combiner un réseau de neurones à convolution et une mémoire à court terme (LTSM) pour créer des sous-titres à partir d'une image. Dans ce didacticiel, vous apprendrez à créer et à former un modèle d’apprentissage automatique multitâche pour prédire l’âge et le sexe d’un sujet dans une image.

Vue d'ensemble

  • Introduction au modèle d'âge et de genre
  • Construire un estimateur multitâche de flux de tenseurs
  • Entraînement

Conditions préalables

  • compréhension de base des réseaux de neurones convolutifs (CNN)
  • compréhension de base de TensorFlow
  • GPU (optionnel)

Introduction au modèle d'âge et de genre

En 2015, des chercheurs de Computer Vision Lab, D-ITET, ont publié un document DEX et rendu public leur IMDB-WIKI, composé d'images de 500K + avec des étiquettes d'âge et de sexe.

IMDB-WIKI Source du jeu de données: https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/

DEX décrit une architecture de réseau de neurones impliquant un modèle imagenet prétraité vgg16 qui estime l'âge apparent des images de visage. DEX a obtenu la première place dans ChaLearn LAP 2015 - un concours qui vise à reconnaître les personnes dans une image - une performance humaine supérieure

L'âge comme problème de classification

Un moyen conventionnel de traiter un problème d'estimation de l'âge avec une image en entrée serait d'utiliser un modèle basé sur la régression avec une erreur quadratique moyenne comme fonction de perte. DEX modélise ce problème en tant que tâche de classification, à l'aide d'un classifieur softmax, chaque âge étant représenté par une classe unique allant de 1 à 101 et l'entropie croisée en tant que fonction de perte.

Apprentissage multitâche

L'apprentissage multitâche est une technique d'apprentissage de plusieurs tâches via une architecture partagée. Les couches au début du réseau apprendront une représentation généralisée commune, évitant le surajustement d'une tâche spécifique pouvant contenir du bruit.

En formant avec un réseau multi-tâches, le réseau peut être formé en parallèle sur les deux tâches. Cela réduit la complexité de l'infrastructure à un seul pipeline de formation. De plus, le calcul requis pour la formation est réduit car les deux tâches sont entraînées simultanément.

Source CNN multitâche: https://murraycole.com

Construire un réseau multi-tâches dans TensorFlow

Ci-dessous, vous utiliserez l’abstraction de l’estimateur de TensorFlow pour créer le modèle. Le modèle sera formé à partir d'une entrée d'image brute pour prédire l'âge et le sexe de l'image du visage.

Structure du projet

.
├── Dockerfile
├── age_gender_estimation_tutorial
├── ├── cnn_estimator.py
├── ├── cnn_model.py
│ └── dataset.py
├── bin
├── download-imdb.sh
├── predire.py
├── preprocess_imdb.py
└── train.py
├── exigences.txt

Environnement

Pour l’environnement, vous utiliserez Docker pour installer des dépendances. Une version GPU est également fournie pour plus de commodité.

docker construire -t colemurray / age-gender-estimation-tutorial -f Dockerfile.

Les données

Pour former ce modèle, vous utiliserez le jeu de données IMDB-WIKI, composé d’images de 500K +. Pour plus de simplicité, vous allez télécharger les images imdb précadrées (7 Go). Exécutez le script ci-dessous pour télécharger les données.

chmod + x bin / download-imdb-crop.sh
./bin/download-imdb-crop.sh

Prétraitement

Vous allez maintenant traiter le jeu de données pour nettoyer les images de mauvaise qualité et rogner l’entrée vers une taille d’image fixe. De plus, vous formaterez les données en tant que CSV pour simplifier la lecture dans TensorFlow.

docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-it colemurray / age-gender-estimation-tutorial \
python3 /opt/app/bin/preprocess_imdb.py \
--db-path /opt/app/data/imdb_crop/imdb.mat \
--photo-dir / opt / app / data / imdb_crop \
--output-dir / opt / app / var \
--min-score 1.0 \
--img-size 224

Après environ 20 minutes, vous aurez un jeu de données traité.

Ensuite, vous utiliserez le module de pipeline de données de tensorFlow, tf.data, pour fournir des données à l’estimateur. Tf.data est une abstraction permettant de lire et de manipuler un jeu de données en parallèle, en utilisant des threads C ++ pour améliorer les performances.

Ici, vous utiliserez le lecteur CSV de TensorFlow pour analyser les données, prétraiter les images, créer des lots et procéder à la lecture aléatoire.

Modèle

Ci-dessous, vous allez créer un modèle CNN de base. Le modèle se compose de trois convolutions et de deux couches entièrement connectées, avec une tête de classification softmax pour chaque tâche.

Fonction de perte conjointe

Pour l’opération d’entraînement, vous utiliserez Adam Optimizer. Pour une fonction de perte, vous ferez la moyenne des erreurs d’entropie croisée de chaque tête, créant une fonction de perte partagée entre les têtes.

fonction de perte articulaire liée à l'âge et au sexe

Estimateur TensorFlow

Les estimateurs TensorFlow fournissent une abstraction simple pour la création de graphiques et le traitement à l'exécution. TensorFlow a spécifié une interface model_fn, qui peut être utilisée pour créer des estimateurs personnalisés.

Ci-dessous, vous allez utiliser le réseau créé ci-dessus et créer des formations, des évaluations et des prévisions. La classe d’estimateurs de TensorFlow utilisera ces spécifications pour modifier le comportement du graphe.

Train

Maintenant que vous avez pré-traité les données et créé l'architecture de modèle et le pipeline de données, vous allez commencer à former le modèle.

docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-it colemurray / age-gender-estimation-tutorial: gpu \
python3 /opt/app/bin/train.py \
--img-dir / opt / app / var / crop \
--train-csv /opt/app/var/train.csv \
--val-csv /opt/app/var/val.csv \
--model-dir / opt / app / var / cnn-model \
--img-size 224 \
--num-steps 200000

Prédire

Vous trouverez ci-dessous le modèle TensorFlow de votre âge et de votre sexe. Le modèle sera chargé à partir du disque et prédire sur l'image fournie.

# Mettez à jour le chemin du modèle ci-dessous avec votre modèle
docker run -v $ PWD: / opt / app \
-e PYTHONPATH = $ PYTHONPATH: / opt / app \
-it colemurray / age-gender-estimation-tutorial \
python3 /opt/app/bin/predict.py \
--image-path /opt/app/var/crop/25/nm0000325_rm2755562752_1956-1-7_2002.jpg \
--model-dir / opt / app / var / cnn-model-3 / desservant / 
Prédite: M / 46 Réelle: M / 46

Conclusion

Dans ce didacticiel, vous avez appris à créer et à former un réseau multi-tâches permettant de prédire l’âge et l’image d’un sujet. En utilisant une architecture partagée, les deux cibles peuvent être formées et prédites simultanément.

Prochaines étapes:

  • Évaluer sur votre propre jeu de données
  • Essayez une architecture de réseau différente
  • Expérimentez avec différents hyperparamètres

Des questions / problèmes? Ouvrez un numéro ici sur GitHub

Code complet ici.

Appel à l'action

Si vous avez apprécié ce tutoriel, suivez-le et recommandez-le!

Vous souhaitez en savoir plus sur Deep Learning / Machine Learning? Découvrez mes autres tutoriels:

- Construction d’un générateur de légende d’image avec Deep Learning in Tensorflow

- Construction d'un pipeline de reconnaissance faciale avec apprentissage en profondeur dans Tensorflow

- Deep Learning CNN dans Tensorflow avec GPU

- Apprendre en profondeur avec Keras sur Google Compute Engine

- Systèmes de recommandation avec Apache Spark sur Google Compute Engine

Vous pouvez me trouver à d'autres endroits: