[PYTHON] Ensemble de données IMDB-WIKI pour estimer l'âge et le sexe à partir d'images faciales

introduction

Les données sont la vie de l'apprentissage automatique, en particulier l'apprentissage profond. Ici, ensemble de données IMDB-WIKI qui peut être utilisé pour apprendre la tâche d'estimation de l'âge et du sexe à partir d'images faciales est utilisé. présenter. Dans cet article, même façonner les données pour l'apprentissage. La prochaine fois, j'aimerais étudier l'estimation de l'âge / sexe CNN en utilisant CNN.

Le code est ci-dessous. https://github.com/yu4u/age-gender-estimation

Ensemble de données IMDB-WIKI

Cet ensemble de données est une base de données créée en explorant la base de données de films Internet (IMDb; base de données en ligne des acteurs de films et de programmes télévisés) et Wikipedia, et est une image de profil, une image extraite de l'image de profil et des métadonnées sur une personne. Consiste en. IMDb contient 460 723 images faciales et Wikipedia contient 62 328 images faciales. Cet ensemble de données a été utilisé comme ensemble de données de pré-apprentissage par l'équipe gagnante du concours pour estimer l'âge à partir de l'image défi d'estimation de l'âge apparent ChaLearn. Mise au point avec les données d'entraînement de compétition)

Obtenez l'ensemble de données

L'image originale est très grande, alors téléchargez une archive d'images et de métadonnées avec les zones faciales extraites.

#Données IMDb
wget https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/imdb_crop.tar
#Données Wikipedia
wget https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/wiki_crop.tar

Toutes les métadonnées sont stockées dans le fichier .mat ( wiki.mat pour Wikipedia) dans l'archive ci-dessus. Bien qu'il s'agisse de données Matlab, elles peuvent être lues comme suit avec scipy.

meta = scipy.io.loadmat("wiki.mat")

Les données incluses sont les suivantes.

--dob: date de naissance --photo_taken: l'année de prise de la photo --full_path: chemin de l'image --gender: Sexe --name: Nom --face_location: informations rectangulaires de la zone du visage --face_score: score de détection de visage --second_face_score: Deuxième plus grand score de détection de visage

Ceux-ci peuvent être obtenus comme suit.

full_path = meta[db][0, 0]["full_path"][0]
dob = meta[db][0, 0]["dob"][0]

Calcul de l'âge

L'âge de la personne dans l'image n'est pas directement inclus dans les métadonnées et doit être calculé. Par principe, la date de naissance (dob) doit être soustraite de la date et de l'heure de la prise de vue ( photo_taken), mais les mesures détaillées suivantes sont nécessaires. Premièrement, «dob» est une valeur formatée en «numéro de date de série Matlab» et ne peut être utilisée que si elle est convertie en informations d'heure. Python a la capacité de gérer des formats similaires et peut être converti, mais Matlab est défini comme le nombre de jours depuis le 1er janvier ** 0 **, alors que Python ** 1 ** [Il y a un piège] défini comme le nombre de jours à partir du 1er janvier 2011 (http://sociograph.blogspot.jp/2011/04/how-to-avoid-gotcha-when-converting.html) (What C'est vrai). Il faut donc convertir comme suit (0 AD est une année lucrative!)

python_datetime = datetime.fromordinal(matlab_serial_date_numer - 366)

De plus, comme photo_taken ne contient que des informations sur l'année, si la date et l'heure au milieu de l'année sont utilisées comme valeur attendue, l'âge est calculé comme indiqué ci-dessous.

def calc_age(taken, dob):
    birth = datetime.fromordinal(max(int(dob) - 366, 1))

    # assume the photo was taken in the middle (Jul. 1) of the year
    if birth.month < 7:
        return taken - birth.year
    else:
        return taken - birth.year - 1

nettoyage

Étant donné que les données fournies sont essentiellement des données d'exploration, elles contiennent beaucoup de données de bruit et doivent être supprimées. Par exemple, dans le cas d'une base de données Wikipedia, les données suivantes sont incluses.

--Il y a des cas 18016 face_score est -inf --Il existe des cas «4096» où «second_face_score» n'est pas «nan». S'il y a plus d'un visage, les métadonnées peuvent être pour second_face --L'âge calculé est négatif ou supérieur à 100

Par conséquent, il est nécessaire d'extraire uniquement ceux dont le "face_score" est supérieur à un certain niveau, dont la "deuxième_face" est "nan" et dont l'âge est compris entre 0 et 100.

Détails de l'ensemble de données

Enfin, jetons un coup d'œil au contenu de l'ensemble de données sur Wikipédia. Les détails sont ci-dessous. https://github.com/yu4u/age-gender-estimation/blob/master/check_dataset.ipynb

Distribution de face_score. À l'exclusion de -inf. face_score.png

Distribution de second_face_score. À l'exclusion de «nan». second_face_score.png

Exemple d'image avec «face_score» supérieur à 5 high_score.png

Exemple d'image avec face_score de 0 à 1 low_score.png

Un exemple d'image où face_score est -inf zero_score.png

Exemple d'image avec un âge calculé supérieur à 100 age_100.png

Exemple d'image avec un âge calculé négatif age_0.png

Recommended Posts

Ensemble de données IMDB-WIKI pour estimer l'âge et le sexe à partir d'images faciales
Caffe Model Zoo pour les débutants [Classification selon l'âge et le sexe]
Ensemble de données pour l'apprentissage automatique