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



Dans la partie précédente, nous avons préparé les données et examiné également les outils de mise en œuvre et l'architecture du réseau neuronal ( lien ). Commençons la prochaine étape du développement avec le prétraitement des données.

Mises à niveau

Keras fournit une large gamme d'outils pour le prétraitement des données, en particulier pour les images. La méthode ImageDataGenerator (Fig. 7) vous permet d'étendre l'ensemble de données avec des transformations artificielles.


Fig.7. - Générateur de données.

Le premier nombre rotation_range est un nombre aléatoire pour la rotation des images à l'intérieur du générateur. Width_shift_range - montre combien vous pouvez réduire les valeurs de pixels en largeur. Height_shift_range - le coefficient par lequel chaque pixel sera multiplié pour se comprimer en hauteur. Shear_range - taux de cisaillement, angle de décalage dans le sens antihoraire en degrés. Zoom_range - plage pour une mise à l'échelle aléatoire. Horizontal_flip - image aléatoire affichée horizontalement. Vertical_flip - affichage d'image vertical aléatoire. Fill_mode - les points en dehors des données d'entrée sont remplis conformément au mode spécifié. Data_format - format de données d'image. Ainsi, le réseau neuronal aura une meilleure généralisation, car le jeu de données d'origine a essentiellement des pixels propres, les nombres sont au centre.Dans les vraies photographies, d'autres situations sont possibles lorsque le geste est dans un coin ou flou. Le processus d'apprentissage est en cours de réécriture avec de nouvelles données.

Sur la figure 8, le graphique du test a commencé à diminuer, donc la formation a été arrêtée. Si la métrique val_acc n'était pas utilisée pour l'arrêt, l'algorithme continuerait son travail, résultant en un réseau neuronal recyclé.

Par rapport aux résultats antérieurs, la valeur de la fonction de perte a diminué et, par conséquent, le degré de confiance de l'algorithme dans les prédictions a augmenté. La précision a augmenté d'un peu plus de 2% (Fig. 8, Fig. 9).


Fig. 8 - Calendrier de formation sur les nouvelles données.


Fig.9. - Métriques du modèle.

Conversion

Pour l'intégration dans l'application iOS, vous devez obtenir un réseau neuronal d'un certain format. Cela vous permet de créer le framework CoreML. Il vous permet d'exécuter des modèles d'apprentissage automatique formés dans un format. mlmodel dans les applications. Pour travailler avec des images, il existe un cadre Vision basé sur Core ML et aide au suivi et à la reconnaissance des visages, du texte, des objets, des codes à barres. La détermination de l'horizon et l'acquisition de la matrice pour l'alignement de l'image sont également disponibles.

Pour convertir un modèle de .h5 en. mlmodel est utilisé par la bibliothèque de Python Coremltools. Cette bibliothèque prend en charge la conversion au format mlmodel.

Pour la conclusion correcte du modèle, un dictionnaire est spécifié qui correspondra à 10 chiffres. La ligne suivante déclare, Model_check.h5 est le nom du modèle, il est en outre indiqué qu'il recevra des images sur la couche d'entrée du réseau neuronal. Le champ image_scale conduira à standardiser la matrice de pixels. (Fig.10) Fig.10


. - Conversion.

Application mobile. Travaillez avec un modèle préparé.

Un exemple du site officiel des développeurs Apple est utilisé comme base du projet. Dernier environnement de développement Xcode, le langage de programmation est la cinquième version de Swift.

Les fichiers (Fig. 11) contenant le code dans le projet sont considérés. AppDelegate.swift lance la fenêtre de démarrage de l'application et initialise tous les fichiers connectés au projet.


Fig.11. - La structure de l'application.

Un modèle préparé est ajouté au projet après la conversion de sign_lang.mlmodel (Fig.12).


Fig.12. - Modèle en Xcode.

La ligne Type indique que le modèle d'apprentissage automatique ajouté au projet est en effet un réseau neuronal de classification. Pour prédire le modèle, des images en noir et blanc avec des éléments gris de dimension 64x64 seront entrées, le programme les convertira dans ce format en utilisant Vision. La sortie sera un dictionnaire dans lequel les paires seront la ligne avec l'étiquette qui a été spécifiée lors de la conversion et la confiance (probabilité) avec laquelle le neuronal la prédit.

Les principaux fichiers d'application.

Le fichier principal est considéré - Image Classification View Controller.swift

ImageView - une fenêtre pour afficher l'image actuelle sur l'écran du téléphone, envoyée à l'entrée du modèle.

CameraButton - un bouton qui, lorsqu'il est cliqué, fera apparaître un menu contextuel offrant à l'utilisateur d'effectuer les actions suivantes: Prendre une photo, Choisir une photo. La première action ouvrira l'appareil photo du smartphone, dans lequel le mode photo sera disponible. (Fig. 13)

Lorsque vous choisissez une autre action, Choisir une photo, une galerie interne s'ouvre. En appuyant sur le bouton Utiliser la photo, l'utilisateur retournera à l'écran principal, où le réseau neuronal analysera les images et donnera sa prédiction, comme indiqué sur la Fig. 14.

Après le mot Classification, nous voyons la conclusion des deux résultats les plus probables prédits par le modèle. Le nombre entre parenthèses est la confiance du réseau neuronal que sa prédiction est correcte. La figure 14 montre que l'algorithme avec une confiance de 0,99 indique que le nombre 0 est affiché, ce qui coïncide avec la réalité. Aucun algorithme d'apprentissage automatique ne peut donner une précision de 100% sur des données réelles, et le réseau neuronal construit ne fait pas exception, et de fausses prédictions sont possibles, comme on peut le voir sur la Fig. 15.


Fig. 13. - Travaillez avec l'appareil photo.


Fig.14. - Prédiction du réseau neuronal.


Fig.15. - Fausse prédiction.

En conséquence, nous avons conçu l'architecture d'un réseau neuronal convolutif pour reconnaître les chiffres de la langue des signes. Une formation au réseau de neurones a été effectuée et, en raison de l'expansion des données d'entraînement et de la sélection d'hyperparamètres, une précision de 81% a été obtenue sur un ensemble de données de test. L'algorithme a été converti avec succès pour être porté sur un smartphone. Une application mobile a été développée dans laquelle un réseau de neurones a été intégré.

Lien de code

All Articles