[PYTHON] Datensatz IMDB-WIKI zur Schätzung von Alter und Geschlecht anhand von Gesichtsbildern

Einführung

Daten sind das Leben des maschinellen Lernens, insbesondere des tiefen Lernens. Hier wird IMDB-WIKI-Datensatz verwendet, mit dem die Aufgabe der Schätzung von Alter und Geschlecht anhand von Gesichtsbildern erlernt werden kann. vorstellen. In diesem Artikel werden sogar die Daten für das Lernen gestaltet. Das nächste Mal möchte ich die Alters- / Geschlechtsschätzung CNN mit CNN untersuchen.

Der Code ist unten. https://github.com/yu4u/age-gender-estimation

IMDB-WIKI-Datensatz

Dieser Datensatz ist eine Datenbank, die durch Crawlen der Internet Movie Database (IMDb; Online-Datenbank von Akteuren in Filmen und Fernsehprogrammen) und Wikipedia erstellt wurde. Besteht aus. IMDb enthält 460.723 Gesichtsbilder und Wikipedia enthält 62.328 Gesichtsbilder. Dieser Datensatz wurde vom Gewinnerteam des Wettbewerbs als Pre-Learning-Datensatz verwendet, um das Alter anhand des Bildes ChaLearn scheinbare Herausforderung zur Altersschätzung zu schätzen. Feinabstimmung mit Wettkampftrainingsdaten)

Holen Sie sich den Datensatz

Das Originalbild ist sehr groß. Laden Sie daher ein Archiv mit Bildern und Metadaten mit extrahierten Gesichtsbereichen herunter.

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

Alle Metadaten werden in der Datei ".mat" ("wiki.mat" für Wikipedia) im obigen Archiv gespeichert. Obwohl es sich um Matlab-Daten handelt, können sie mit "scipy" wie folgt gelesen werden.

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

Die enthaltenen Daten sind wie folgt.

--dob: Geburtsdatum --photo_taken: Das Jahr, in dem das Foto aufgenommen wurde --full_path: Bildpfad --gender: Geschlecht --name: Name --face_location: Rechteckige Information des Gesichtsbereichs --face_score: Gesichtserkennungswert --second_face_score: Zweitgrößter Gesichtserkennungswert

Diese können wie folgt erhalten werden.

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

Altersberechnung

Das Alter der Person im Bild ist nicht direkt in den Metadaten enthalten und muss berechnet werden. In der Regel sollte das Geburtsdatum (dob) vom Aufnahmedatum und der Aufnahmezeit ( photo_taken) abgezogen werden. Die folgenden detaillierten Maßnahmen sind jedoch erforderlich. Erstens ist "dob" ein Wert, der mit "Matlab serial date number" formatiert ist und nur verwendet werden kann, wenn er in Zeitinformationen konvertiert wird. Python kann ähnliche Formate verarbeiten und kann konvertiert werden. Matlab ist jedoch definiert als die Anzahl der Tage seit dem 1. Januar ** 0 **, während Python ** 1 ** [Es gibt eine Falle], definiert als die Anzahl der Tage ab dem 1. Januar 2011 (http://sociograph.blogspot.jp/2011/04/how-to-avoid-gotcha-when-converting.html) (What Korrekt). Daher muss wie folgt umgerechnet werden (0 n. Chr. Ist ein lukratives Jahr!)

python_datetime = datetime.fromordinal(matlab_serial_date_numer - 366)

Da photo_taken nur Informationen über das Jahr enthält, wird das Alter wie folgt berechnet, wenn Datum und Uhrzeit in der Mitte des Jahres als erwarteter Wert verwendet werden.

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

Reinigung

Da es sich bei den bereitgestellten Daten im Wesentlichen um Crawling-Daten handelt, enthalten sie viele Rauschdaten und müssen entfernt werden. Im Fall einer Wikipedia-Datenbank sind beispielsweise die folgenden Daten enthalten.

Daher müssen nur diejenigen extrahiert werden, deren "face_score" über einem bestimmten Niveau liegt, deren "second_face" "nan" ist und deren Alter im Bereich von 0 bis 100 liegt.

Datensatzdetails

Schauen wir uns zum Schluss den Inhalt des Datensatzes auf Wikipedia an. Details sind unten. https://github.com/yu4u/age-gender-estimation/blob/master/check_dataset.ipynb

Verteilung von face_score. Ohne -inf. face_score.png

Verteilung von second_face_score. Ohne "nan". second_face_score.png

Beispielbild mit face_score größer als 5 high_score.png

Beispiel eines Bildes mit face_score von 0 bis 1 low_score.png

Ein Beispiel für ein Bild, bei dem face_score`` -inf ist zero_score.png

Beispiel eines Bildes mit einem berechneten Alter von mehr als 100 Jahren age_100.png

Beispiel eines Bildes mit einem negativ berechneten Alter age_0.png

Recommended Posts

Datensatz IMDB-WIKI zur Schätzung von Alter und Geschlecht anhand von Gesichtsbildern
Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
Datensatz für maschinelles Lernen