[PYTHON] J'ai essayé de classer Oba Hanana et Otani Emiri par apprentissage profond

introduction

agréable de vous rencontrer tous. Mon nom est Oboro. Depuis que j'ai résolu le problème de classification par reconnaissance d'image dans la formation de l'entreprise cette fois, puis-je réellement obtenir la même précision et le même résultat avec ce que j'aime? De plus, si la précision n'est pas élevée, je voudrais vérifier quel type d'approche peut être adopté pour améliorer la précision. J'ai écrit l'article en supposant que les personnes qui ne sont pas liées à l'IA liront l'article, donc je pense que ce n'est pas suffisant pour ceux qui veulent apprendre l'apprentissage en profondeur à travers cet article. Cependant, le contenu de la mise en œuvre est facile à essayer, veuillez donc y jeter un œil.

Tout d'abord, qui sont Hanana Oba et Emiri Otani?

Kana Oba est membre du groupe d'idols "= LOVE", que j'adore les chiffons. ** Incroyablement mignon. ** **

ELGnBcXUcAITFnN.jfif

Voici un compte Twitter. Merci de nous suivre. Hanana Oba (https://twitter.com/hana_oba) Emiri Otani est également membre du groupe d'idols "= LOVE". Cet enfant est également mignon.

EI7phQSUYAEtZfv.jfif

Emiri Otani (https://twitter.com/otani_emiri)

Différence par rapport à la mission de formation

Lors de la formation, j'ai résolu le problème de classification des chiens et des chats. Je pense que la précision était d'environ 95% de taux de réponse correcte.

  1. Conditions préalables à la tâche
  1. Conditions de cette expérience

――Le nombre d'échantillons est de 300 chacun (c'est un secret que j'étais heureux quand j'ai enregistré 300 images sur Twitter pour collecter des échantillons)

Conférence en classe

Avant de l'implémenter, j'expliquerai un peu la théorie du traitement d'image par deep learning. Si vous n'êtes pas intéressé à la fois par la mise en œuvre et par les cours en classe, veuillez passer à la fin.

Qu'est-ce que le Deep Learning?

Avant l'apprentissage en profondeur Je pense que beaucoup de gens ne comprennent pas ce que signifient l'intelligence artificielle, l'apprentissage automatique et l'apprentissage profond, alors laissez-moi vous expliquer brièvement en incluant ceux-ci. Je suis désolé si j'ai fait une erreur ...

――AI est l'intelligence artificielle, qui est littéralement une intelligence créée artificiellement.

―― L'apprentissage automatique est l'une des technologies actuellement indispensables à la réalisation de l'IA. Actuellement, il est courant d'utiliser l'apprentissage automatique pour réaliser l'IA.

«L'apprentissage en profondeur est l'une des méthodes d'apprentissage automatique, et vous pouvez juger quelles données sont importantes et à quel point elles sont importantes à partir d'une grande quantité de données, et en tirer une solution.

Traitement des données d'image

Un pixel de données d'image peut être exprimé par la luminosité (luminosité 0-255) pour chaque RVB (rouge, vert, bleu), de sorte qu'il peut être traité comme des données numériques en le déposant dans cette forme. Exemple) Dans le cas de 22 * 224 images Cela peut être représenté par une matrice de 224 * 224 * 3 (vertical * horizontal * trois couleurs primaires), donc img.shape = (224,224,3).

À propos du réseau neuronal

Ci-dessous, une image simple du réseau neuronal.

ニューラルネットワーク.jpg

z1 est calculé par la formule suivante.

z_1  = w_{31} y_1 + w_{32} y_2

Puisque y1 et y2 sont également calculés de la même manière, la sortie peut être calculée pour chaque entrée et chaque poids. Comparez la sortie et la réponse et ajustez le poids par erreur De plus, la sortie est sortie avec une autre entrée, et ainsi de suite, et ainsi de suite. L'apprentissage en profondeur est dit très expressif car cette couche intermédiaire est multicouche. Je pense que c'est facile à comprendre si vous pensez que la sortie souhaitée peut être exprimée par diverses entrées et pondérations.

Comment construire un réseau neuronal dans le traitement d'image

Dans le traitement d'image, les poids ci-dessus forment un réseau neuronal avec un filtre. Appliquez le filtre (rouge) à la partie verte de l'image comme indiqué dans l'image ci-dessous. Cela vous donnera finalement la sortie "6" (bleu). Cela dépend de la manière dont vous appliquez le filtre, mais vous pouvez obtenir une nouvelle matrice par sortie en la déplaçant vers la droite d'un carré et en faisant la même chose. Après avoir répété ce processus, nous classons par la valeur à laquelle nous sommes arrivés.

フィルタ.jpg

la mise en oeuvre

Mettons-le en œuvre. L'environnement est Google Colaboratory

idol.ipynb


from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import cv2
import matplotlib.pyplot
import numpy  as np
from glob import glob
import pandas as pd
%cd /content/drive/My Drive/

%tensorflow_version 2.x
from tensorflow.keras.preprocessing import image
from tensorflow.python.client import device_lib
#Définir le modèle
from tensorflow.keras import models, layers
from tensorflow.python.keras.layers import Dropout
from tensorflow.keras import utils
import tensorflow as tf
from google.colab import drive
drive.mount('/content/drive')

J'appelle cette zone à Tekito, que je l'utilise ou non. Obtenez le chemin du dossier qui recueille chaque image préparée à l'avance dans Google Drive.

idol.ipynb


%cd /content/drive/My Drive/DATA/IDOL
hana_filepaths = glob('OBA_HANA/*')
emiri_filepaths = glob('OTANI_EMIRI/*')

Ensuite, puisque la taille de l'image enregistrée varie, nous unifierons la taille à 224 * 224 et numériserons l'image.

idol.ipynb


image_size = 224
x, t =[],[]
for i in range(0,np.array(emiri_filepaths).size):
  hana_filepath = hana_filepaths[i]
  emiri_filepath = emiri_filepaths[i]
  img = image.load_img(hana_filepath, target_size=(image_size, image_size))
  img = np.array(img)
  x.append(img)
  t.append(0)
  img = image.load_img(emiri_filepath, target_size=(image_size, image_size))
  img = np.array(img)
  x.append(img)
  t.append(1)
x = np.array(x)/255.0 #Standardisation
t = np.array(t)

Apprenons maintenant.

idol.ipynb


K.clear_session()
reset_seed(0)

#nas_mobile_conv = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', include_top = False, input_shape = (x_train.shape[1:]), classes=2)
nas_mobile_conv = NASNetMobile(weights = 'imagenet', include_top = False, input_shape = (x_train.shape[1:]), classes=2)

x = nas_mobile_conv.layers[-1].output
x = layers.Flatten()(x) #Supprimez le dernier calque de sortie et ajoutez-en un nouveau
x = layers.Dense(1024, activation = 'relu')(x)
x = layers.BatchNormalization()(x)
x = layers.Dense(516, activation = 'relu')(x)
x = layers.BatchNormalization()(x)
x = layers.Dense(2, activation = 'softmax')(x)

model = models.Model(nas_mobile_conv.inputs, x)
model.summary()

optimizer = tf.keras.optimizers.Adam(lr=1e-4)

model.compile(optimizer = optimizer,
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

batch_size = 32
epochs = 100

history = model.fit(x_train, t_train,
                   batch_size = batch_size,
                   epochs = epochs,
                   verbose=1,
                   validation_data=(x_test, t_test))


Avec epochs = 100 (le nombre de répétitions), la transition de précision pour chaque nombre peut être représentée graphiquement ci-dessous.

idol.ipynb


result = pd.DataFrame(history.history)
result[['accuracy','val_accuracy']].plot()

ダウンロード.png

Le bleu correspond aux données d'entraînement et l'orange aux données de vérification. (Couleur psyllium de Hana-chan) Vous pouvez voir que la précision du flou augmente à mesure que le nombre de fois augmente. Il continue d'augmenter, alors je vais essayer d'augmenter le nombre de fois.

Je l'ai augmenté à 200 fois.

ダウンロード (1).png

La précision s'est un peu améliorée et le taux de réponse correct est d'environ 90%.

Je suis fatigué aujourd'hui, alors j'aimerais le terminer jusqu'à présent, et la prochaine fois, j'aimerais voir à quoi ressemblait la mauvaise image par essais et erreurs pour améliorer la précision.

Recommended Posts

J'ai essayé de classer Oba Hanana et Otani Emiri par apprentissage profond
J'ai essayé de classer Hanana Oba et Emiri Otani par apprentissage profond (partie 2)
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé le deep learning
J'ai essayé de classer les nombres de mnist par apprentissage non supervisé [PCA, t-SNE, k-means]
J'ai essayé de classer les boules de dragon par adaline
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
J'ai essayé de classer MNIST par GNN (avec PyTorch géométrique)
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé d'implémenter Deep VQE
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
J'ai essayé de faire d'Othello AI que j'ai appris 7,2 millions de mains par apprentissage profond avec Chainer
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé de classer les joueurs de Shogi Takami 7e Dan et Masuda 6e Dan par CNN [Pour les débutants CNN]
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker
Introduction au Deep Learning ~ Pliage et mise en commun ~
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
J'ai essayé de déplacer l'image vers le dossier spécifié en faisant un clic droit et un clic gauche
J'ai essayé de faire la reconnaissance de caractères manuscrits de Kana Partie 2/3 Création et apprentissage de données
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé de programmer la bulle de tri par langue
Chainer et deep learning appris par approximation de fonction
J'ai implémenté DCGAN et essayé de générer des pommes
J'ai essayé d'obtenir une image en grattant
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
Apprentissage parallèle du deep learning par Keras et Kubernetes
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé de passer le test G et la qualification E en m'entraînant à partir de 50
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker 2 Multi-host edition
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
J'ai essayé de classer M. Hanyu et M. Hanyu avec le traitement du langage naturel × classificateur Naive Bayes
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai installé et utilisé la bibliothèque Deep Learning Chainer
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé d'ajouter un post-incrément à CPython. Présentation et résumé
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé d'ajouter des appels système et des planificateurs à Linux
Intelligence artificielle, machine learning, deep learning pour mettre en œuvre et comprendre
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé d'installer scrapy sur Anaconda et je n'ai pas pu
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de déboguer.
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
J'ai essayé de combiner Discord Bot et la reconnaissance faciale-pour LT-
J'ai essayé d'accélérer la création vidéo en traitant en parallèle
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"