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
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)
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]
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
É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
où 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.
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
.
Distribution de second_face_score
. À l'exclusion de «nan».
Exemple d'image avec «face_score» supérieur à 5
Exemple d'image avec face_score
de 0 à 1
Un exemple d'image où face_score
est -inf
Exemple d'image avec un âge calculé supérieur à 100
Exemple d'image avec un âge calculé négatif