Cinq étapes de construction et de déploiement de réseaux neuronaux d’apprentissage profond

Utilisation de l’apprentissage profond pour simplifier et accélérer la mise en œuvre de la visionique.

Introduction

L’adage « une image vaut mille mots » n’a jamais été aussi vrai qu’aujourd’hui dans le monde de la visionique. Grâce à l’apprentissage profond, des milliers, voire des millions de lignes de code peuvent être remplacées par un simple réseau neuronal formé avec des images et très peu de codage.

La bonne nouvelle c’est que l’apprentissage profond n’est plus une méthode réservée aux chercheurs ou aux personnes dotées de compétences hautement spécialisées et/ou d’importants budgets. Aujourd’hui, de nombreux outils sont gratuits, les tutoriels sont faciles à trouver, le matériel est bon marché et même les données de formation sont gratuites. C’est à la fois une source d’opportunités et de menaces : de nouveaux acteurs entrent dans la course, ce qui stimule ainsi l’innovation mais constitue toutefois une forme de concurrence pour les entreprises déjà bien établies dans le secteur. L’apprentissage profond permet aux systèmes de visionique d’effectuer des tâches autrefois inimaginables. Il peut par exemple être utilisé pour reconnaître des anomalies inattendues, ce qui est généralement très difficile, voire impossible à réaliser grâce au codage traditionnel.

Un avantage notable du déploiement de réseaux neuronaux d’apprentissage profond est la possibilité de prendre des décisions complexes en bout de réseau avec un minimum de matériel et une très faible puissance de traitement. Tout cela est possible grâce à des systèmes ARM ou FPGA à faible coût et à de nouvelles caméras d’inférence telles que la FLIR Firefly DL.

Cet article s’intéressera aux sujets suivants :

  • Les glossaires de base utilisés avec l’apprentissage profond
  • Les types de tâches de visionique pour lesquelles l’apprentissage profond est le plus adapté
  • Les cinq étapes pour développer et déployer un réseau neuronal pour les inférences en bout de réseau
  • Les outils et les cadres disponibles pour démarrer
  • Les conseils pour faciliter le processus
  • Les éventuelles lacunes de l’apprentissage profond à prendre en compte

Les fondamentaux de l’apprentissage profond

L’apprentissage profond est un sous-ensemble de l’apprentissage automatique inspiré par la manière dont le cerveau humain fonctionne. Ce qui rend l’apprentissage « profond » est le fait qu’il existe plusieurs « couches » de neurones de poids différents qui aident le réseau neuronal à prendre sa décision. L’apprentissage profond peut être divisé en deux étapes, la formation et l’inférence.

Pendant la phase de formation, vous définissez le nombre de neurones et de couches constituant votre réseau neuronal et vous l’exposez à des données de formation étiquetées. Grâce à ces données, le réseau neuronal apprend par lui-même ce qui est « bon » ou « mauvais ». Par exemple, si vous évaluez des fruits, vous montrerez au réseau neuronal des images de fruits portant la mention « Grade A », « Grade B », « Grade C », etc. Le réseau neuronal détermine ensuite les propriétés de chacune de ces catégories, notamment la taille, la forme, la couleur, l’uniformité de la couleur, etc. Vous n’avez pas besoin de définir ces caractéristiques ou même de programmer ce qui est trop grand ou trop petit, le réseau neuronal apprend par lui-même. Une fois la phase de formation terminée, vous obtenez un réseau neuronal formé.

Le processus d’évaluation des nouvelles images à l’aide d’un réseau neuronal pour prendre des décisions est appelé inférence. Lorsque vous présentez une nouvelle image au réseau neuronal formé, celui-ci vous fournira une inférence (c.-à-d. une réponse) telle que « Grade A avec un taux de fiabilité de 95 %. »

Cinq étapes pour développer une application d’apprentissage profond

Le développement d’une application d’apprentissage profond se constitue de cinq étapes environ. Une description de haut niveau de chaque étape est fournie ci-dessous :

Étape 1] Identification de la fonction d’apprentissage profond appropriée

Dans l’univers de l’apprentissage profond, les tâches sont classées en plusieurs fonctions. Voici celles que nous considérons comme les plus courantes pour la visionique :

Classification

La première et la plus fondamentale de l’apprentissage profond est la classification. Ce processus implique de trier les images en différentes classes et à les regrouper en se basant sur des propriétés communes. À titre d’exemple, vous pouvez utiliser la classification pour séparer une pièce défectueuse et une bonne pièce sur une ligne de production à des fins de contrôle de la qualité tout en réalisant des inspections des soudures PCB tel qu’illustré par la Fig.1 ci-dessous (à l’aide d’une caméra d’inférence FLIR Firefly DL).

flir-firefly-pcb_solder_inspection.jpg

Fig.1. Classification utilisée pour identifier les soudures défectueuses à l’aide d’une caméra FLIR Firefly DL.

DÉTECTION ET LOCALISATION

Une autre tâche d’apprentissage profond idéale pour la visionique est appelée détection et localisation. Grâce à cette fonction, vous pouvez identifier les éléments d’une image et fournir les coordonnées du cadre englobant afin de déterminer sa position et sa taille. Par exemple, elle peut être utilisée pour détecter une personne enfreignant un paramètre de sécurité à proximité de robots sur une ligne de production ou pour identifier une seule mauvaise pièce sur un système de convoyage d’une ligne de production/d’assemblage.

Segmentation

Le troisième type d’apprentissage profond est la segmentation, généralement utilisé pour déterminer quels pixels d’une image appartiennent à des objets correspondants. La segmentation est idéale pour les applications où il est nécessaire de déterminer le contexte d’un objet et sa relation avec d’autres éléments (par exemple, véhicule autonome/systèmes avancés d’aide à la conduite, communément appelés ADAS).

Fig.2 Détection, localisation et segmentation utilisées pour identifier des objets et leurs emplacements.

Détection d’une anomalie de câblage

Ce type de tâche d’apprentissage profond peut être utilisé pour identifier les régions qui ne correspondent pas à un modèle. Un exemple typique d’application où la détection d’anomalies peut apporter une valeur ajoutée est le contrôle des stocks et la gestion de l’inventaire dans les supermarchés comme illustré par la Fig 4. Cette application implique l’utilisation d’une caméra d’inférence pour détecter et mettre en évidence les rayons vides ou qui auront rapidement besoin d’être réapprovisionnés, fournissant des notifications en temps réel et améliorant l’efficacité.

Étape 2] Sélection de votre cadre

Une fois que vous avez déterminé la fonction d’apprentissage profond que vous prévoyez d’utiliser, vous aurez besoin d’un ensemble d’outils (les développeurs appellent cela un « cadre ») le mieux adapté à vos besoins. Ces cadres fourniront un choix de réseaux neuronaux de démarrage et d’outils pour former et tester le réseau.

Les cadres gratuits utilisés par certaines des plus grandes entreprises technologiques se disputant les places de leaders du marché de l’apprentissage profond comme TensorFlow pour Google, Caffe2 pour Facebook et OpenVino pour Intel (tous gratuits) montrent qu’une part très importante d’investissements et de ressources sont injectés sur le marché de l’apprentissage profond. À l’autre extrémité de ce spectre se trouve également Pytorch, une solution open source qui fait désormais partie de Facebook. Ces outils sont faciles à utiliser et fournissent une excellente documentation (y compris des exemples), de sorte que même un utilisateur novice peut former et déployer un réseau neuronal en ayant peu d’efforts à faire.

L’examen de tous les cadres disponibles nécessiterait un article distinct, mais les points suivants énumèrent les principaux avantages et inconvénients de trois des cadres les plus populaires :

Pytorch

  • Simplicité d’utilisation.
  • Utilisé dans le cadre de nombreux projets de recherche.
  • Peu utilisé pour les déploiements d’envergure.
  • Entièrement pris en charge pour Python uniquement.

TensorFlow

  • Importante base d’utilisateurs avec une bonne documentation.
  • Courbe d’apprentissage plus élevée que celle de Pytorch.
  • Offre un déploiement de production évolutif et prend en charge le déploiement mobile.

Caffe2

  • Légèreté, se traduisant par un déploiement efficace.
  • L’un des cadres les plus anciens (bibliothèques largement prises en charge pour les réseaux de neurones à convolution et la vision par ordinateur).
  • Particulièrement adapté pour les appareils mobiles utilisant OpenCV.

Le réseau neuronal que vous choisirez dépendra en fin de compte de la complexité de la tâche à accomplir et de la vitesse à laquelle votre inférence doit être exécutée. Il est par exemple possible de choisir un réseau neuronal avec plus de couches et de neurones, mais l’inférence serait exécutée plus lentement. En règle générale, un réseau neuronal formé nécessite une très faible puissance informatique et peut fournir des résultats en quelques millisecondes. Cela permet d’exécuter des inférences d’apprentissage profond complexes en bout de réseau avec des cartes ARM à faible puissance ou une inférence en bout de réseau grâce à des caméras d’inférence spécialement conçues comme la FLIR Firefly DL.

En outre, même les entreprises ne disposant pas des ressources et des employés nécessaires pour apprendre et mettre en œuvre une solution d’apprentissage profond peuvent compter sur des consultants tiers qui aident les différents acteurs impliqués tout au long du cycle, de la conceptualisation au déploiement. Enigma Pattern (https://www.enigmapattern.com) est un exemple.

Étape 3] Préparation des données de formation pour le réseau neuronal

Selon le type de données que vous souhaitez évaluer, vous aurez besoin d’un référentiel d’images avec autant de caractéristiques que ce que vous souhaitez utiliser dans votre évaluation et elles doivent être étiquetées de façon appropriée. À titre d’exemple, si votre réseau neuronal doit faire la différence entre une bonne et une mauvaise soudure, il aura besoin de centaines de variations lui montrant ce à quoi une bonne soudure ressemble et un ensemble similaire indiquant ce à quoi correspond une mauvaise soudure avec des étiquettes permettant de les identifier comme telles.

Il existe plusieurs possibilités pour obtenir un ensemble de données d’images :

  • Pour les cas d’utilisation courants, vous trouverez peut-être des ensembles de données pré-étiquetées correspondant à vos exigences spécifiques disponibles à l’achat en ligne (et même gratuits dans de nombreux cas).
  • La production de données synthétiques peut être une option efficace pour plusieurs applications, d’autant plus que l’étiquetage n’est pas nécessaire. Des entreprises telles que Cvedia, soutenues par FLIR (https://www.cvedia.com) utilisent la technologie de simulation et la théorie de la vision par ordinateur avancée pour construire des ensembles de formation synthétique haute fidélité. Ces ensembles de données sont annotés et optimisés pour la formation aux algorithmes.
  • Si les deux premières options ne sont pas disponibles, vous devrez prendre vos propres images et les étiqueter individuellement. Ce processus est facilité pour plusieurs outils disponibles sur le marché (quelques outils et techniques permettant de réduire les délais de développement sont brièvement présentés ci-dessous).

Conseils utiles :

Dans le cadre du processus de construction de leur propre code d’apprentissage profond, plusieurs développeurs ont réalisé une solution open source et acceptent de la partager gratuitement. L’un de ces outils, particulièrement utile si votre ensemble de données n’est pas pré-étiqueté, est appelé LabelImg ; il s’agit d’un outil d’annotation d’image graphique qui aide à étiqueter les objets dans des cadres englobants à l’intérieur des images (https://github.com/tzutalin/labelImg). Sinon, l’ensemble du processus peut être sous-traité à un tiers.

Une autre façon de raccourcir l’étape de préparation des données consiste à augmenter une image en plusieurs images différentes, en effectuant un traitement d’image sur celles-ci (rotation, redimensionnement, étirement, éclaircissement/assombrissement, etc.) Cela permettrait également de libérer du temps de développement, car le processus de saisie des données de formation et d’étiquetage des images peut être confié à un utilisateur novice.

En outre, si vous avez des limitations ou des préférences spécifiques en matière de matériel, cela devient encore plus important, car les outils d’apprentissage profond abordés dans la section suivante prennent en charge un ensemble fini de matériel et ne sont souvent pas interchangeables.

Étape 4] Formation et validation du réseau neuronal pour garantir la précision

Une fois les données préparées, vous devrez former, tester et valider la précision de votre réseau neuronal. Cette étape implique de configurer et d’exécuter les scripts sur votre ordinateur jusqu’à ce que le processus de formation fournisse des niveaux acceptables de précision pour votre cas d’utilisation précis. Il est recommandé de séparer les données de formation et de test afin de s’assurer que les données de test avec lesquelles vous réalisez l’évaluation ne sont pas utilisées pendant la formation.

Ce processus peut être accéléré en tirant parti de l’apprentissage par transfert : le processus implique l’utilisation d’un réseau pré-formé et sa réorientation vers une autre tâche. Dans la mesure où de nombreuses couches d’un réseau neuronal profond procèdent à l’extraction de caractéristiques, ces couches n’ont pas besoin d’être reformées pour classer de nouveaux objets. Ainsi, vous pouvez appliquer les techniques d’apprentissage par transfert à des réseaux pré-formés comme point de départ et ne reformer que quelques couches plutôt que de former l’ensemble du réseau. Des cadres populaires tels que Caffe2 et TensorFlow vous permettent de faire cela gratuitement.

De plus, il est tout aussi simple d’ajouter de nouvelles fonctions de détection à un réseau neuronal déjà formé que d’ajouter des images supplémentaires à un ensemble d’images défectueux et d’appliquer l’apprentissage par transfert pour former le réseau C’est beaucoup plus facile et rapide que la programmation basée sur la logique avec laquelle vous devez ajouter la nouvelle logique au code, recompiler et exécuter tout en vous assurant que le code nouvellement ajouté n’introduit pas d’erreurs injustifiées.

Si vous ne possédez pas l’expertise de codage suffisante pour former votre propre réseau neuronal, il existe plusieurs logiciels basés sur une interface graphique (GUI) qui fonctionnent avec différents cadres. Ces outils rendent le processus de formation et de déploiement très intuitif, y compris pour les utilisateurs moins expérimentés. Matrox MIL fait partie des exemples de l’univers de la visionique.

Étape 5] Déploiement du réseau neuronal et exécution de l’interférence sur de nouvelles données

La dernière étape consiste à déployer votre réseau neuronal formé sur le matériel sélectionné pour tester les performances et collecter des données sur le terrain. Les premières phases d’inférence devraient idéalement être utilisées sur le terrain pour collecter des données de test supplémentaires, qui peuvent être utilisées comme données de formation pour les itérations futures.

La section suivante fournit un bref résumé des méthodes typiques de déploiement avec certains avantages et désavantages associés :

Déploiement cloud

  • Importantes économies sur les frais de matériel
  • Capacité à se développer rapidement
  • Capacité à déployer et à propager des modifications à plusieurs endroits
  • La nécessité d’une connexion internet est un désavantage majeur
  • Latence plus élevée par rapport au déploiement en bout de réseau (en raison du volume de transferts de données entre le matériel local et le cloud)
  • Fiabilité inférieure (les problèmes de connexion peuvent entraîner des pannes majeures)

Capacité en bout de réseau (PC standard)

  • Idéal pour les applications hautes performances
  • Hautement personnalisable (construit avec des parties pertinentes pour l’application)
  • Prix flexibles (car les composants peuvent être sélectionnés en fonction de l’application)
  • Coûts plus élevés
  • Généralement, une empreinte nettement plus grande

Capacité en bout de réseau (ARM, FPGA et caméras d’inférence comme FLIR Firefly DL)

  • Faible consommation d’énergie
  • Économies importantes sur le matériel périphérique
  • Fiabilité élevée
  • Idéal pour les applications nécessitant plusieurs caméras dans un système (ce qui permet d’éliminer les exigences de traitement sur plusieurs caméras).
  • Sécurité (car le matériel peut être isolé des autres interférences)
  • Idéal pour les applications nécessitant une taille compacte
  • Ne convient pas aux tâches exigeantes en matière de calculs
  • La solution basée sur les VPU a un meilleur rapport performances/puissance par rapport aux solutions FPGA
  • La solution FPGA offre de meilleures performances que la solution basée sur le VPU

Image : exemple de caméra d’inférence de l’apprentissage profond – FLIR Firefly DL

Éventuelles lacunes de l’apprentissage profond

Maintenant que nous avons couvert un aperçu du processus de développement et de déploiement, il serait pertinent d’examiner également certaines lacunes.

  • L’apprentissage profond est une boîte noire dans la plupart des cas et il est très difficile de réellement illustrer/comprendre comment le réseau neuronal arrive à sa décision. Cela peut être sans conséquence pour certaines applications, mais les entreprises dans le domaine médical, de la santé et des sciences de la vie ont des exigences strictes en matière de documentation pour les produits devant être approuvés par la FDA ou ses homologues dans d’autres régions. Dans la plupart des cas, vous devez être pleinement conscient du fonctionnement de votre logiciel et vous êtes tenu de documenter l’ensemble de l’opération dans les moindres détails.
  • Un autre problème à résoudre lors du déploiement de l’apprentissage profond est qu’il est très difficile d’optimiser votre réseau neuronal de manière prévisible. De nombreux réseaux neuronaux actuellement formés et utilisés tirent parti de l’apprentissage par transfert pour reformer les réseaux existants lorsque l’optimisation est très limitée.
  • Même des erreurs mineures d’étiquetage des données de formation, qui peuvent survenir assez fréquemment en raison d’une erreur humaine, peuvent nuire à la précision du réseau neuronal. En outre, il est extrêmement fastidieux de déboguer le problème, car vous devrez peut-être passer en revue toutes vos données de formation individuellement pour trouver l’étiquette incorrecte.

Outre ces lacunes, de nombreuses applications sont conceptuellement mieux adaptées à une solution basée sur la logique. Par exemple, si votre problème est bien défini et prévisible, l’utilisation de solutions basées sur la logique peut fournir de meilleurs résultats que l’apprentissage profond. La lecture de codes-barres, l’alignement de pièces et ou encore les mesures précises sont des exemples typiques.

Conclusion

En dépit de certaines des lacunes mentionnées ci-dessus, les avantages potentiels de l’apprentissage profond dépassent largement les inconvénients (développement rapide, capacité à résoudre des problèmes complexes, facilité d’utilisation et de déploiement pour ne citer que quelques exemples). En outre, des améliorations constantes sont apportées dans le domaine de l’apprentissage profond, permettant de surmonter ces lacunes. Par exemple, les cartes d’activation peuvent être utilisées pour vérifier visuellement quels pixels de l’image sont pris en compte lorsqu’un réseau neuronal prend sa décision, afin que nous puissions mieux comprendre comment le réseau est arrivé à sa conclusion. En outre, grâce à une adoption plus large, de nombreuses entreprises développent désormais leurs propres réseaux neuronaux au lieu de s’appuyer sur l’apprentissage par transfert, améliorant ainsi les performances et adaptant la solution à des problèmes spécifiques. Même dans le cas d’applications adaptées à la programmation basée sur la logique, l’apprentissage profond peut aider la logique sous-jacente à accroître la précision globale du système. En conclusion, nous pouvons dire qu’il devient plus simple et économique que jamais de commencer à développer votre propre système d’apprentissage profond : cliquez ici pour découvrir comment construire un système de classification d’apprentissage profond pour moins de 600 $.

Nous sommes là pour aider !

Contactez un spécialiste en caméra dès aujourd’hui.

Nous contacter