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.
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.
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
# -*- 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.
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.
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.
Le résultat d'apprentissage est ...
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.
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%.
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.
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