Réseau de neurones convolutifs et son intégration dans iOS (partie 1)


Moyens de mise en œuvre.

Divers algorithmes d'apprentissage automatique sont intégrés dans de nombreux langages de programmation de haut niveau. Le plus populaire et le plus rapide d'entre eux est Python.

TensorFlow est une bibliothèque logicielle ouverte pour l'apprentissage automatique développée par Google pour résoudre les problèmes de construction et de formation d'un réseau de neurones afin de trouver et classer automatiquement des images, atteignant la qualité de la perception humaine. L'API principale pour travailler avec la bibliothèque est implémentée pour Python.

Keras est une bibliothèque de réseau de neurones ouverte. Il s'agit d'un module complémentaire pour les frameworks TensorFlow et Theano. Il vise un travail opérationnel avec des réseaux d'apprentissage en profondeur, tout en étant conçu pour être compact, modulaire et extensible.

La dernière version de Python 3.7.2 est sélectionnée comme interprète. L'environnement de développement est PyCharm Community.

Préparation des données.

Dans le monde moderne, pour la plupart des tâches d'IA, il n'est pas nécessaire de collecter l'ensemble de données manuellement, il existe de nombreuses ressources où, après l'enregistrement, il est possible de télécharger des ensembles de données prêts à l'emploi. Un ensemble de données à dix chiffres en langue des signes a été sélectionné (Fig. 1).

Fig. 1. - Numéros en langue des signes.

L'algorithme devra détecter la présence d'un geste sur la photo et la classer avec un nombre de 0 à 9. Avant de construire l'architecture du réseau neuronal, vous devez préparer des données pour sa formation. Tout d'abord, les données du jeu de données des chiffres en langue des signes sont téléchargées. Le premier fichier contient 2063 images en noir et blanc avec des nombres en langue des signes. Les images ont une taille de 64x64 pixels. Le deuxième fichier contient une étiquette (vecteur) correspondant à l'image.

Les valeurs des pixels dans les images sont normalisées et sont dans l'intervalle (0,1). Vous pouvez les utiliser immédiatement pour entrer dans le réseau neuronal, mais le résultat le plus optimal sera atteint si vous suivez la procédure de normalisation. Après son exécution, les règles seront satisfaites pour chaque matrice de pixels: La

valeur moyenne dans la matrice est nulle
La dispersion dans la matrice est l'unité.

Les photos sont standardisées et ajoutées à un nouveau tableau pour leur combinaison ultérieure avec les données précédentes (

Fig.2 ) Fig.2. - La procédure de chargement et de traitement des images.

Architecture de réseau neuronal.

Network_sign_lang.py - le fichier de projet principal dans lequel le réseau neuronal est décrit. Au début du script, plusieurs variables globales du réseau neuronal sont décrites (Fig. 3).

Fig.3. - Options globales.

Batch_size - le nombre d'images introduites dans le réseau neuronal pour chaque itération. Num_classes - le nombre de classes que le modèle prédira. Img_size - la taille des images fournies à la couche d'entrée.

La fonction train_test_split () de la bibliothèque Sklearn est importée dans le projet, elle divise les tableaux X et y dans le rapport 80:20 en échantillons d'apprentissage et de test, et mélange également de manière aléatoire les données afin qu'elles ne soient pas triées par classe.

Ensuite, le modèle est initialisé (Fig. 4), la première couche de Conv2D est ajoutée. Les images de la matrice Xtrain sont entrées, la dimension de l'espace de sortie est indiquée - 64, le noyau de convolution - 4x4, l'étape de convolution et la fonction d'activation de la couche ReLU.

Fig.4. - Réseau neuronal

Étant donné que les réseaux de neurones utilisent généralement un nombre beaucoup plus grand de données d'entraînement, le modèle construit est susceptible de se recycler. Pour éviter cela, une méthode de régularisation efficace, telle que Dropout, est utilisée. Cette couche exclura le pourcentage indiqué de neurones aléatoires afin qu'il n'y ait pas de surabondance entre les couches. Le nombre 0,5 signifie que sur chaque lot, l'algorithme exclura la moitié des neurones aléatoires. La deuxième couche principale est également similaire à la première - convolutionnelle. (Conv2D)

La suivante est la couche de mise en commun (MaxPooling2D). Il sert de filtre supplémentaire pour la sortie du modèle. Étant donné que lors de l'affichage horizontal ou vertical des nombres, la signification de l'image ne change pas, le réseau de neurones doit les classer également.

La couche aplatie sert de lien entre les données obtenues par l'algorithme et le vecteur de sortie avec la prédiction. La dernière couche du réseau est la couche dense avec fonction d'activation sofmax. Cette fonction vous permet d'obtenir un vecteur de probabilités normalisé pour chaque classe, où la somme des probabilités sera égale à un.

Ensuite, vous devez compiler le modèle créé en spécifiant les paramètres suivants: métrique, fonction de perte et optimiseur. En tant que métrique, la précision est choisie - le pourcentage d'exemples correctement classés. La fonction de perte est categorical_crossentropy. Algorithme d'optimisation - Adam. Avant de commencer la formation, plusieurs rappels sont ajoutés. EarlyStopping - arrête l'apprentissage du réseau neuronal lorsque sa précision cesse d'augmenter avec les époques d'apprentissage. ModelCheckpoint - enregistre les meilleurs poids de modèle dans un fichier pour une utilisation ultérieure.

La formation du réseau neuronal commence par la sauvegarde des données sur son processus dans la variable historique. Validation_split - Utilise dix pour cent des données de formation pour la validation, ce qui est une autre façon de régulariser.

La taille de l'échantillon de formation est de 1965 exemples, l'échantillon de test est de 547 et l'échantillon de validation est de 219. Après l'achèvement du processus de formation, un graphique de la dépendance de la précision obtenue sur les données de formation et de test est construit (figure 5).

Fig.5. - L'horaire d'entraînement.

Le graphique montre que le modèle a été enregistré à la 15e époque (avec la plus grande précision et le plus petit écart entre Xtrain et Xtest).

L'étape suivante consiste à charger les réseaux de neurones résultants dans un autre script pour vérifier leur fonctionnement. Les valeurs des métriques sur les données de test sont affichées (Fig. 6).

Fig.6. - Vérification des performances du modèle.

Sur la base des résultats des métriques, nous pouvons conclure que les modèles ne diffèrent pas beaucoup. Plus l'indice de fonction de perte est faible, plus les prédictions de l'algorithme sont fiables. La précision ou la fidélité du modèle montre le pourcentage de photos correctement classées, ce qui signifie que plus il est élevé, meilleur est le réseau neuronal. Par conséquent, il est plus logique d'utiliser le premier modèle obtenu à la suite d'un arrêt précoce de l'éducation.

Nous parlerons du prétraitement des données et de l'intégration d'un réseau neuronal d'un certain format dans une application iOS dans la prochaine partie.

All Articles