[PYTHON] Ich bin überhaupt kein Ingenieur, aber ich habe mein Gesicht durch maschinelles Lernen klassifiziert

Einführung

Ich bin verantwortlich für den Kundensupport eines IT-Unternehmens, das Selen mit Makros und Python ausführt. Ich habe an dem KI-Entwicklungswettbewerb "Neural Network Console Challenge" teilgenommen, den ich zufällig gefunden habe, also werde ich ihn veröffentlichen.

Was ist "Neural Network Console Challenge"?

https://nnc-challenge.com/

"Neural Network Console (NNC)", ein GUI-Tool, mit dem Sony Network Communications Co., Ltd. KI ohne Programmierung entwickeln kann, Durch die Bereitstellung von 10.000 Bildpunkten für Personenbilder, die Pixta Co., Ltd. normalerweise nicht verarbeiten kann, scheint es sich um eine KI-Entwicklungsherausforderung zu handeln, die für Anfänger freundlich ist.

Themenentscheidung

Bei dieser Herausforderung entscheidet jede Person über das Thema der Bildklassifizierung und lernt bei NNC. Übermittlung der Lernergebnisse zusammen mit dem Prozess.

Beim Betrachten der Bilder schien es viele Bilder von Menschen zu geben, also extrahierte ich zuerst das Gesicht. Schneiden Sie mit dem OpenCV-Klassifikator eine große Anzahl von Gesichtern aus einem PIXTA-Bild aus.

Bildvorverarbeitung? Ich habe mich auf den folgenden Artikel bezogen. Vielen Dank an die Poster, die auch für Anfänger leicht verständlich sind.

Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert Gesichtserkennung für Momokuro-Mitglieder durch TensorFlow

Gesichtsextraktion

# -*- coding:utf-8 -*-

import cv2
import numpy as np

from PIL import Image

#Ordner, in dem Sie das Bild gespeichert haben
input_data_path = './pixta_images/'
#Verzeichnis zum Speichern des zugeschnittenen Bildes
save_path = './cutted_face_images/'
#OpenCV-Standardklassifizierungspfad
cascade_path = './opencv/data/haarcascades/haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)

#Anzahl erfolgreicher Gesichtserkennungen
face_detect_count = 0

#Wenn aus den gesammelten Bilddaten ein Gesicht erkannt wird, schneiden Sie es aus und speichern Sie es.
types = ['*.jpg']
paths = []
for t in types:
    paths.extend(glob.glob(os.path.join(input_data_path, t)))
for p in paths:
    img = cv2.imread(p, cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    face = faceCascade.detectMultiScale(gray, 1.1, 3)
    
    if len(face) > 0:
        for rect in face:
            x = rect[0]
            y = rect[1]
            w = rect[2]
            h = rect[3]
            cv2.imwrite(save_path + 'cutted_face' + str(face_detect_count) + '.jpg', img[y:y+h, x:x+w])
            face_detect_count = face_detect_count + 1

Aus 1500 Bildern wurden etwa 2500 Gesichter erkannt. Die erkannten Gesichter enthalten Schatten und Punktmuster, die wie Gesichter aussehen und manuell gelöscht werden. Ich habe ungefähr 1000 Blätter gelöscht und 1500 Gesichter hinterlassen.

スクリーンショット 2020-03-31 21.16.58.png Daten zum Lernen: PIXTA

Das Themenbeispiel des Managementbüros war die Klassifizierung nach Gefühlen wie glücklich / traurig / peinlich, aber wenn ich mir das Gesichtsfoto ansehe, lächle ich nur. Aus diesem Grund habe ich beschlossen, das Lächeln in verschiedene Typen einzuteilen.

Erstellen eines Datensatzes

Um es auf NNC hochladbar zu machen, werden wir 1500 Gesichter nach dem Grad des Lächelns sortieren.

Zuerst habe ich sie in zwei Kategorien eingeteilt, lachend und nicht lachend, und sie in Ordner gelegt. Bereiten Sie außerdem eine CSV vor, die den Dateinamen und die Bezeichnung definiert, und laden Sie sie auf NNC hoch.

Für das Lernmodell habe ich Folgendes basierend auf dem Erklärungsvideo über NNC gemacht, das von SONY auf YouTube verteilt wurde. スクリーンショット 2020-03-31 0.44.44.png

Das Lernergebnis ist ...

スクリーンショット 2020-03-31 0.47.23.png

Nun, es gab Unterschiede in der Anzahl der Bilddaten für jedes Etikett, also frage ich mich, ob dies der Fall ist. Ich bin mir nicht sicher, aber die beiden Kategorien sind nicht interessant, deshalb werde ich die Kategorien als nächstes erhöhen.

Wir führen auch eine zusätzliche Gesichtsextraktion durch, bereiten jeweils etwa 200 Blätter vor und laden sie separat als Lerndaten und Testdaten hoch.

スクリーンショット 2020-03-31 0.57.04.png

Es ist ein wunderbar hässliches Ergebnis. Wenn Sie diejenigen einschließen, die an einer Seite liegen, passt es irgendwie. Die Ursache kann sein, dass ich es beim Sortieren überhaupt nicht selbst definieren konnte. Wenn ich die ganze Zeit auf das extrahierte Lächeln schaue, verstehe ich nicht, was es ist, lol

Ich habe die Klassifizierung um eins reduziert und die Daten mit vier neu erstellt.

Es hat sich seit einiger Zeit sehr verbessert. Es erreichte jedoch nicht 70%. スクリーンショット 2020-03-31 1.02.02.png

Danach habe ich unter Bezugnahme auf den folgenden Videoturm versucht, Bildvergrößerung, Ausschnitt, Ausfall usw. durchzuführen, um ein Überlernen zu verhindern, aber die Genauigkeit hat sich nicht leicht verbessert.

Aufgrund der Frist scheint es, dass die Zeit mit den folgenden Ergebnissen abgelaufen ist, was die Mittelklasse reduziert.

スクリーンショット 2020-03-31 1.08.50.png スクリーンショット 2020-03-31 1.09.02.png

スクリーンショット 2020-03-31 21.08.59.png Daten zum Lernen: PIXTA

Ich war mit dem Ergebnis, das ungefähr 75% betrug, nicht ganz zufrieden, aber wenn ich Zeit habe, würde ich es gerne noch einmal mit Bildern versuchen, die ich selbst vorbereitet habe. Ich habe es genossen, ohne Wissen daran zu arbeiten!

Recommended Posts

Ich bin überhaupt kein Ingenieur, aber ich habe mein Gesicht durch maschinelles Lernen klassifiziert
Ich wechselte meinen Job zu einem Ingenieur für maschinelles Lernen bei AtCoder Jobs
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Maschinelles Lernen, das von hochqualifizierten Systemingenieuren bei Coursera gelernt wurde (Runden 1-2)
Bis ein Ingenieur, der einmal über maschinelles Lernen frustriert war, es schafft, maschinelles Lernen bei der Arbeit einzusetzen
Ich habe HR Tech versucht, eine Expertensuchmaschine zu entwickeln, indem ich interne Besprechungsinformationen maschinell gelernt habe