Meilleures pratiques : Entraîner un réseau neuronal d'apprentissage profond
Introduction
Le facteur le plus déterminant de l’efficacité d'un système d'apprentissage profond est l’ensemble de données avec lequel les développeurs l'ont entraîné. Les ensembles de données d'apprentissage de haute qualité améliorent la précision et la rapidité de l'inférence tout en réduisant l'utilisation des ressources du système et en accélérant le processus d'apprentissage.
Si les développeurs ont besoin d’exécuter une inférence d'apprentissage profond sur un système dont les ressources sont extrêmement limitées, ils peuvent optimiser en conséquence le réseau neuronal entraîné et éliminer le besoin d'un système hôte. Des appareils bien plus petits, tels que la prochaine caméra Firefly® de FLIR®, peuvent exécuter une inférence sur la base de votre réseau neuronal dans son unité de traitement intégrée Myriad™ 2 Movidius™.
Cet article décrit comment développer un jeu de données pour classifier et trier des images par catégories, ce qui constitue le meilleur point de départ pour les utilisateurs novices de l'apprentissage profond.
De combien de données d'apprentissage ai-je besoin ?
La quantité de données d'apprentissage nécessaire dépend des facteurs suivants :
- Nombre de classes de données à distinguer, p. ex. "Pomme", "Feuille", "Branche".
- Similarité des classes à distinguer, p. ex. “Pomme” par comparaison avec “Poire” est plus complexe que “Pomme” par comparaison avec “Feuille”.
- Écarts souhaités au sein de chaque classe, par exemple pommes de couleurs et de formes différentes, pour plus de solidité contre les variations dans le scénario d'application en situation réelle.
- Écarts non souhaités dans les données des images, par exemple bruit, différences dans la balance des blancs, luminosité, contraste, taille des objets, angle de vue, etc.
Quelques centaines d'images peuvent suffire à fournir des résultats acceptables, alors que des applications plus complexes peuvent requérir plus d'un million d'images. La meilleure façon de déterminer les exigences de vos données d'apprentissage est de rassembler des données afin de tester votre modèle. Trouver des problèmes comme celui que vous êtes en train de résoudre peut également représenter un bon point de départ pour estimer la taille de l'ensemble de données.
Votre réseau finira par arriver au point où la précision ne sera pas améliorée par des données supplémentaires. Il est peu probable que votre modèle atteigne une précision de 100 %, quelle que soit l'ampleur de votre ensemble de données d'apprentissage. Comprendre l'équilibre entre la rapidité et la précision requis par votre application spécifique vous aidera à déterminer si des données d'apprentissage supplémentaires sont nécessaires.
Test avec des données de validation
Votre ensemble de données d'images doit être suffisamment grand pour fournir des données de validation qui seront utilisées pour évaluer la précision et la rapidité du réseau pendant l'apprentissage. Ces images doivent être sélectionnées au hasard dans l'ensemble de données pour s'assurer qu'elles sont aussi représentatives que possible.
Dans le cas de petits ensembles de données ou si l'on dispose d'assez de temps et de puissance de calcul, les performances de reconnaissance peuvent aussi être déterminées par une validation multiple. Ici, un ensemble de données est divisé, par exemple, en cinq segments aléatoires. Ainsi, un réseau neuronal apprend avec quatre segments et est validé avec le segment suivant. Cet apprentissage et cette validation sont répétés pour les cinq combinaisons de segments d'apprentissage et de validation. La valeur moyenne des taux de reconnaissance indique la performance prévue. L'écart type indique le degré de représentativité de l'ensemble de données.
Améliorer votre ensemble de données
L'apprentissage profond est un processus itératif. Les réseaux font des prévisions sur les données d'apprentissage et celles-ci sont utilisées pour améliorer le réseau. Ce processus se répète jusqu'à ce que le réseau atteigne le niveau de précision souhaité. Plus l’ensemble de données est grand, plus l’écart qui peut apparaitre dans l'application cible est présenté à l’algorithme d'apprentissage profond. Les ensembles de données trop petits ne fournissent pas assez d'informations pour que l’algorithme fonctionne correctement. En conséquence, on peut constater une bonne performance de reconnaissance sur les données d'apprentissage mais un taux de reconnaissance presque négligeable sur les données de validation. Une phase d'acquisition des données d'apprentissage bien planifiée, qui produit des images correctement étiquetées avec un minimum d’écart superflu, réduit la quantité de données d'apprentissage nécessaire, accélère l'apprentissage et améliore la précision et la vitesse de l’inférence.
Réduire au minimum les différences entre les images d'apprentissage et les images de production
Prendre des images avec les mêmes caméras, la même optique et le même éclairage que le futur système de production élimine le besoin de compenser les différences de géométrie, d’éclairage et de réponse spectrale entre les données d'apprentissage et les données des images du monde réel. Des caméras de qualité supérieure équipés de capteurs Pregius®, d'interfaces GenICam® et d'une fonctionnalité GPIO riche permettent d'automatiser plus facilement l'acquisition de bons jeux de données d'apprentissage.
Utiliser des environnements contrôlés pour réduire les ensembles de données
Un bon ensemble de données d'apprentissage comprend des exemples de variations aux endroits prévus et réduit au minimum l’écart pouvant être éliminé par la conception du système. Par exemple, inspecter des pommes alors qu'elles sont encore sur l'arbre est bien plus complexe qu'inspecter les mêmes pommes sur un convoyeur. Le système d'extérieur a besoin d'apprendre à reconnaître des pommes à des distances et selon des orientations et des angles différents, et doit tenir compte des changements de lumière et de conditions météorologiques. Un modèle a besoin d'un ensemble de données très important pour bien fonctionner de façon homogène.
Prendre des images de pommes dans un environnement contrôlé permet aux concepteurs de systèmes d’éliminer de nombreuses sources d’écarts et d'atteindre une inférence de haute précision à l'aide d'un ensemble de données bien plus petit. Ceci réduit à son tour la taille du réseau et lui permet de s’exécuter sur des matériels informatiques compacts et autonomes comme le Firefly de FLIR, alimenté par la Myriad 2 Movidius d'Intel.
Fig. 1. Les images prises dans des conditions contrôlées (A) ont moins d’écart que les images prises dans des conditions non contrôlées (B).
Améliorer les résultats avec des données correctement étiquetées
On utilise des étiquettes pour tester les prédictions faites pendant l'apprentissage. Les étiquettes doivent représenter les images auxquelles elles appartiennent ; les étiquettes imprécises ou présentant du "bruit" sont un problème courant des ensembles de données constitués à l'aide de recherches d'images sur Internet. Ajouter des étiquettes aux noms de fichiers d'images est une bonne idée car cela réduit la possibilité de confusion lors de la gestion et de l'utilisation des données d'apprentissage.
Fig. 2. Exemples d'images bien sélectionnées (A) et d'images mal sélectionnées (B) pour la catégorie “pomme".
L’étiquetage de données pour la segmentation est bien plus complexe et long que pour la classification.
Fig. L’étiquetage d'images pour la segmentation est bien plus complexe que pour la classification.
Améliorer la qualité et la quantité d'un ensemble de données existant
Augmentation pour élargir l'ensemble de données
Certains systèmes, tels que ceux dédiés à l'inspection de fruits, examinent les objets dont l'orientation n'est pas contrôlée. Pour ces systèmes, l'augmentation des données est une façon utile d’élargir rapidement l'ensemble de données à l'aide de transformations affines et projectives. La transformation des couleurs peut également exposer le réseau à une plus grande variété d'images. Les développeurs doivent recadrer les images transformées pour maintenir les dimensions de saisie dont le réseau neuronal a besoin.
Fig. 5. Exemples de transformations y compris rotation, redimensionnement et découpe.
Normalisation pour une meilleure précision
Les données de normalisation rendent l'apprentissage des réseaux neuronaux plus efficace. Les images normalisées ont l'air artificielles pour l’œil humain, mais elles sont plus efficaces pour former des réseaux neuronaux précis. Les développeurs peuvent normaliser les valeurs de pixels et les valeurs numériques de la même façon.
Fig. 6. Image originale (A) comparée à une image utilisant la méthode de normalisation courante Y = (x - x.moyenne()) / x.std()
Données synthétiques
Dans les situations requérant de grandes quantités de données d'apprentissage qui ne peuvent pas être créées à l'aide de l'augmentation des ensembles de données, les données synthétiques sont un puissant outil. Les données synthétiques sont des images générées artificiellement qui peuvent être utilisées pour générer rapidement de grandes quantités de données pré-étiquetées parfaitement segmentées. Cependant, les données synthétiques seules ne suffisent pas à entraîner un réseau à fournir des résultats réels et précis. L’amélioration du réalisme des données synthétiques requiert un traitement a posteriori.
Conclusion
Les ensembles de données d'apprentissage de qualité supérieure améliorent la précision et la rapidité de l'inférence tout en réduisant l'utilisation des ressources du système et en accélérant le processus d'apprentissage. Il existe des méthodes pour augmenter tant la quantité que la qualité de l'ensemble de données. L'appareil photo Firefly de FLIR est un excellent choix pour les concepteurs qui souhaitent réduire au minimum la taille des systèmes, atteindre une inférence de haute précision, acquérir des ensembles de données d'apprentissage et déployer leurs réseaux neuronaux.
En savoir plus sur www.flir.com/firefly.