[PYTHON] Je ne suis pas du tout ingénieur, mais j'ai classé mon visage par machine learning

introduction

Je suis en charge du support client dans une entreprise informatique, exécutant du sélénium avec des macros et Python. J'ai participé au concours de développement d'IA "Neural Network Console Challenge" que j'ai trouvé, donc je le posterai.

Qu'est-ce que "Neural Network Console Challenge"?

https://nnc-challenge.com/

"Neural Network Console (NNC)", un outil graphique que Sony Network Communications Co., Ltd. peut développer une IA sans programmation, En fournissant 10000 points de données d'image de personne que Pixta Co., Ltd. ne peut généralement pas gérer, il semble que cela soit devenu un défi de développement d'IA adapté aux débutants.

Décision thématique

Dans ce défi, chaque personne décide du thème de la classification des images et apprend à NNC. Soumettre les résultats d'apprentissage avec le processus.

En regardant les images, il semblait y avoir beaucoup d'images de personnes, alors j'ai d'abord extrait le visage. Découpez un grand nombre de visages dans une image PIXTA avec le classificateur OpenCV.

Pré-traitement d'image? Car, je me suis référé à l'article suivant. Merci aux affiches faciles à comprendre même pour les débutants.

Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur Reconnaissance faciale des membres Momokuro par TensorFlow

Extraction du visage

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

import cv2
import numpy as np

from PIL import Image

#Dossier dans lequel vous avez enregistré l'image
input_data_path = './pixta_images/'
#Répertoire pour enregistrer l'image recadrée
save_path = './cutted_face_images/'
#Chemin du classificateur par défaut OpenCV
cascade_path = './opencv/data/haarcascades/haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(cascade_path)

#Nombre de détections de visage réussies
face_detect_count = 0

#Lorsqu'un visage est détecté à partir des données d'image collectées, coupez-le et enregistrez-le.
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

Environ 2500 visages ont été détectés à partir de 1500 images. Les visages détectés comprennent des ombres et des motifs de points qui ressemblent à des visages et sont supprimés manuellement. J'ai supprimé environ 1000 feuilles et laissé 1500 faces.

スクリーンショット 2020-03-31 21.16.58.png Données pour l'apprentissage: PIXTA

L'exemple de thème du bureau de gestion était de classer par sentiments tels que heureux / triste / embarrassant, mais quand je regarde la photo du visage, je souris simplement. Par conséquent, j'ai décidé de classer les sourires en plusieurs types.

Créer un jeu de données

Afin de le rendre téléchargeable sur NNC, nous trierons 1500 visages en fonction du degré de sourire.

Tout d'abord, je les ai classés en deux catégories, rire et non rire, et les mettre dans des dossiers. En outre, préparez un csv qui définit le nom et l'étiquette du fichier et téléchargez-le sur NNC.

En ce qui concerne le modèle d'apprentissage, j'ai réalisé ce qui suit sur la base de la vidéo d'explication sur NNC distribuée par SONY sur YouTube. スクリーンショット 2020-03-31 0.44.44.png

Le résultat d'apprentissage est ...

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

Eh bien, il y avait des variations dans le nombre de données d'image pour chaque étiquette, alors je me demande si c'est le cas. Je ne suis pas sûr, mais les deux catégories ne sont pas intéressantes, je vais donc augmenter les catégories ensuite.

--Ahaha (parlant) --Niko Niko (sourire de tout le visage) --Sourire (bouche ou yeux souriants) --Fufufu (sourire) --Sérieusement

Nous effectuons également une extraction de visage supplémentaire, préparons environ 200 feuilles chacune et les téléchargeons séparément en tant que données d'apprentissage et données de test.

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

C'est un résultat merveilleusement laid. Si vous incluez ceux qui sont décalés d'un côté, cela convient en quelque sorte. La cause peut être que je ne pouvais pas le définir moi-même en premier lieu pendant le tri. Quand je regarde les sourires extraits tout le temps, je ne comprends pas ce que c'est, lol

J'ai réduit la classification de un et recréé les données avec quatre.

--Ahaha (parlant) --Niko Niko (bouche ouverte) --Fufufu (bouche fermée) --Sérieusement

Il s'est beaucoup amélioré depuis un certain temps. Cependant, il n'a pas atteint 70%. スクリーンショット 2020-03-31 1.02.02.png

Après cela, en me référant à la tour vidéo suivante, j'ai essayé l'augmentation de l'image, la découpe, le décrochage, etc. pour éviter le sur-apprentissage, mais la précision ne s'est pas améliorée facilement.

En raison du délai, il semble que le temps soit écoulé avec les résultats suivants après tout, réduisant la classe moyenne.

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

スクリーンショット 2020-03-31 21.08.59.png Données pour l'apprentissage: PIXTA

Je n'étais pas très satisfait du résultat, qui était d'environ 75%, mais si j'ai le temps, j'aimerais réessayer avec des images que j'ai préparées moi-même. J'ai aimé travailler dessus sans aucune connaissance!

Recommended Posts

Je ne suis pas du tout ingénieur, mais j'ai classé mon visage par machine learning
J'ai changé de travail pour devenir ingénieur en apprentissage automatique chez AtCoder Jobs
Je suis un amateur le 14e jour de python, mais je veux essayer l'apprentissage automatique avec scicit-learn
Apprentissage automatique appris par des ingénieurs système de haut niveau à Coursera (tours 1-2)
Jusqu'à ce qu'un ingénieur qui était autrefois frustré par l'apprentissage automatique parvienne à utiliser l'apprentissage automatique au travail
J'ai essayé HR Tech pour développer un moteur de recherche expert par apprentissage automatique des informations de réunion en interne