Un aperçu des coulisses du développement d'un produit de vision par ordinateur complexe :
● résoudre le problème de l'exécution d'un modèle de détection d'objets sur du matériel faible
● gérer les résultats faussement positifs et un ensemble de données déséquilibré
● apprendre à une machine à distinguer des espèces d'oiseaux presque identiques
La vision par ordinateur a suscité l’intérêt des entrepreneurs du monde entier, et pour cause : les capacités de la technologie moderne de l’IA transforment des idées auparavant impossibles en produits réels.
La détection et la classification d'objets dans des photos et des vidéos ont trouvé des applications dans de nombreux domaines différents et des centaines de systèmes – depuis les caméras de sécurité avec reconnaissance faciale intégrée et détection de maladies basées sur des analyses à rayons X jusqu'aux simples applications mobiles.
Mais assez avec l'introduction, dans cet article, je voulais partager les « coulisses » du développement d'un produit de vision par ordinateur, en particulier un produit complexe.
J'ai eu l'occasion de travailler sur Birdsy, une application de reconnaissance d'oiseaux destinée aux personnes qui souhaitent savoir qui visite leur jardin alors qu'elles ne regardent pas.
Birdsy est une application complexe basée sur l'IA avec détection et classification d'objets en temps réel qui doit pouvoir fonctionner sur du matériel faible, détecter les types et le sexe des oiseaux avec une grande précision.
Compte tenu de tout cela, le chemin depuis l’idée initiale jusqu’à la publication de l’application dans les magasins d’applications a été compliqué – et captivant à la fois.
Nous avons été confrontés à de nombreux obstacles, tant du point de vue commercial que du point de vue du développement, que j'ai décidé de partager en un seul endroit pour, je l'espère, aider les entrepreneurs et les développeurs d'IA qui pourraient être confrontés au même projet.
La tâche à accomplir
Les oiseaux ont eu des millions d'années d'évolution pour s'intégrer parfaitement à leur environnement afin d'éviter les prédateurs et, dans ce cas, les ornithologues amateurs, ce qui rend plus difficile pour eux l'admiration de la faune.
Bien que l'observation de certaines espèces d'oiseaux face à… bec puisse s'avérer problématique, les surveiller via une caméra vidéo depuis le confort de votre maison est une belle façon de profiter de nos amis ailés, surtout si l'IA supprime le besoin de parcourir des heures de séquences vidéo et envoie vous alerte lorsqu'un oiseau entre dans le champ de vision de la caméra, détectant automatiquement de quelle espèce d'oiseau il s'agit.
Birdsy comporte deux parties :
Détection d'objets — un réseau de neurones chargé de détecter la présence d'un oiseau ou d'un mammifère
Classification des objets - un réseau neuronal chargé de déterminer quelle espèce d'oiseau ou de mammifère a été capturée
Caméras de mauvaise qualité pour la détection d'objets
Pour rendre le service plus accessible et plus facile à utiliser, n’importe quelle caméra peut être utilisée pour l’observation des oiseaux. C’est là que nous avons rencontré le premier problème : les appareils photo de mauvaise qualité car ce sont les plus abordables et les plus répandus.
Bien que l'absence de limite de caméra soit idéale pour les utilisateurs, elle représentait un défi pour nous, car le modèle de détection d'objets fonctionne à l'aide du chipset de la caméra.
Là où quelqu'un obtient une bonne affaire, d'autres obtiennent le petit bout du bâton, dans ce cas, « les autres » sont nos développeurs de CV. Travailler avec une caméra bon marché signifie travailler avec un chipset bon marché, ce qui rend impossible l'utilisation de l'architecture de réseau neuronal par défaut.
Par rapport à un standard haut de gamme en matière de caméras vidéo de vision par ordinateur (NVIDIA Jetson Nano) qui permet d'utiliser environ 120 couches de YOLO v4 par défaut, les caméras avec lesquelles nous avons dû travailler n'autorisaient que 22 couches.
Là où un réseau neuronal YOLO v4 complet fournit d'excellents résultats de reconnaissance, une version allégée fonctionne mal. Nous avons testé les deux et avons été désagréablement surpris de la faible profondeur du modèle lors de son exécution avec un chipset bon marché.
Test de YOLO v4 par défaut vs réduit
Nous avons commencé par entraîner le modèle YOLO v4 par défaut et le tester sur l'ensemble de données du client. Les résultats que nous avons obtenus ont été satisfaisants - 95 % de mAp, ce qui dans le monde de la vision par ordinateur est plus que suffisant pour lancer un mode en production.
Après avoir recyclé le modèle pour l'adapter aux paramètres de la caméra, la qualité de détection a considérablement diminué. Mais là où les machines échouent, les humains avancent.
Nous avons testé le réseau neuronal sur des données de test et évalué visuellement les faux positifs et les faux négatifs. Cela a mis en évidence les domaines dans lesquels le réseau manquait de connaissances et ceux où il commettait le plus d'erreurs.
Nous ne sommes rien d'autre que des mammifères ou des faux positifs
Le réseau était impatient de détecter les gens, en particulier leurs mains, comme des animaux (et nous ne le blâmons pas, les humains SONT des animaux après tout). Bien que, d'un point de vue biologique, cela soit correct, l'utilisateur final est plus intéressé à observer les oiseaux que ses voisins. Nous avons donc dû apprendre au réseau à ignorer les gens et à se concentrer plutôt sur les oiseaux et les mammifères.
Pour ce faire, nous avons ajouté des exemples négatifs, notamment des photos de personnes sous différents angles ainsi que des mains humaines.
Ce qui se cache dans le noir
Les caméras disposent de deux modes : le mode jour normal qui produit des images en couleur et le mode infrarouge nocturne, qui produit des images en noir et blanc. Lorsque la caméra est passée à l'infrarouge, le modèle a produit de nombreux faux positifs :
les feuilles des arbres bougent dans le vent
les insectes, comme les papillons de nuit, attirés par une caméra chaude
fontaines
Les utilisateurs seraient moins qu'heureux d'être réveillés par une notification, excités à l'idée de regarder un hibou ou un renard, mais finiraient par regarder un enregistrement d'un papillon de nuit se cognant contre l'objectif d'une caméra.
Afin de réduire au minimum les interruptions du sommeil, nous avons collecté des cas de faux positifs dans des contextes nocturnes et les avons marqués à la main.
Instagram contre réalité
Avez-vous déjà entendu parler des médias sociaux appelés « bandes-annonces » où les gens présentent la meilleure version d'eux-mêmes ? Qui aurait cru que la même chose pourrait être vraie pour les animaux sauvages.
Les photos d'oiseaux qui peuvent être obtenues à partir de sources ouvertes, comme Google Images et les vidéos Youtube, sont généralement de haute qualité, très nettes et représentent les spécimens sous leur meilleur jour, regardant la caméra ou du moins positionnés de face, sans rien entre l'oiseau. et la caméra obstrue la vue.
La réalité n'est pas toujours aussi jolie. Les caméras produisent des images de mauvaise qualité qui peuvent rendre difficile la compréhension de ce qui se passe, même pour un œil humain, les mauvaises conditions météorologiques comme la pluie, la neige ou la poussière peuvent obstruer la vue, et nous sommes sûrs que les oiseaux sentent quand quelqu'un veut les capturer et se positionner de la manière la plus ridicule possible.
L'ensemble de données fourni par le client (constitué d'images instantanées trouvées sur Internet) n'était pas d'une grande utilité pour ce projet.
Nous devions collecter un ensemble d'images d'oiseaux en conditions réelles à l'aide des caméras du client pour montrer au modèle à quoi ressemblent réellement les oiseaux, et non comment ils sont présentés sur les réseaux sociaux.
Ce que nous avons maintenant
Donc, après avoir fait tout ce qui précède :
parcourir manuellement chaque instance où le réseau était erroné
apprendre au réseau à ignorer les gens et à ne pas les détecter comme des oiseaux ou des mammifères
travailler avec des images en noir et blanc et des faux positifs
collecter un ensemble de données sur les oiseaux dans des conditions réelles, sous différents angles et dans différentes conditions météorologiques
Nous avons réussi à atteindre un mAP de 97,5% pour la détection d'objets. Il s'agit d'un résultat très élevé pour un modèle de vision par ordinateur, car la règle non écrite pour tout modèle de CV entrant en production est d'avoir plus de 94 % de mAP.
Atteindre la perfection (presque)
Même si les résultats que nous avons obtenus aujourd'hui sont plus que suffisants pour être utilisés dans le produit final, il reste encore place à l'amélioration.
le réseau prend des fleurs pour des oiseaux
la vue des oiseaux de dos reste parfois un mystère
oiseaux partiellement recouverts par des objets aléatoires
oiseaux près de la caméra
Une fois que suffisamment d'images pour chaque groupe auront été collectées, nous nous attendons à ce que le mAP augmente et atteigne 98,5 %.
Modèle de classification d'images
La prochaine étape pour apprendre à connaître les visiteurs de votre jardin consiste à transmettre l'image avec un oiseau à un modèle de classification d'objets. Son objectif est de reconnaître l'espèce d'oiseau et son sexe.
Comme certaines espèces d'oiseaux vivent exclusivement sur certains continents, nous avons décidé de créer deux modèles : un pour ceux qui vivent en Amérique du Nord et un pour ceux qui vivent en Europe.
Une étape à la fois : une leçon sur les réseaux de neurones à plusieurs étages
Initialement, le problème de la classification des objets a été résolu par une approche « frontale » : le réseau a vu des photos de toutes les différentes espèces, mâles et femelles, à partir desquelles il a essayé de savoir à quoi elles ressemblent et en quoi elles diffèrent les unes des autres. autre.
Cela a abouti à des scores de précision très médiocres, en d’autres termes, le réseau a commis de nombreuses erreurs lors de l’identification des espèces d’oiseaux et de mammifères.
Le réseau essayait d’apprendre trop d’aspects en même temps. De nombreuses espèces d’oiseaux se ressemblent beaucoup et diffèrent les unes des autres par une seule tache de plumes de couleurs différentes ou un bec de forme différente.
Conserver toutes ces informations, ainsi que l’apparence des différents sexes d’une même espèce, est trop difficile dans des circonstances données. Le réseau mélangeait souvent les espèces d’oiseaux tout en déterminant correctement le type d’oiseau le plus large.
Par exemple, la différence entre une paruline à capuchon et une paruline du Kentucky avec une tache de plumes noires :
Le réseau étiqueterait une paruline à capuchon comme une paruline du Kentucky, produisant un résultat erroné, mais étant généralement correct : les deux SONT des parulines. Par souci de temps, le client a décidé qu'il était plus important de détecter le type d'oiseau dans son ensemble plutôt que son espèce particulière. C'est donc par là que nous avons commencé.
Après évaluation du modèle, nous avons décidé de mettre en œuvre une approche en plusieurs étapes :
toutes les espèces d'oiseaux étaient regroupées en catégories plus générales : aigles, moineaux, corbeaux, pigeons, etc.
le réseau déterminerait d'abord le type global d'oiseau
la deuxième étape consiste à détecter de quelle espèce il s'agit
la dernière serait de déterminer si l'oiseau est un mâle ou une femelle
En regroupant les espèces d'oiseaux, nous avons réussi à réduire le nombre de classes de 98 à 49, ce qui a considérablement amélioré le score de précision, car le réseau n'avait tout simplement pas autant de classes parmi lesquelles choisir.
La pratique rend parfait, même pour les machines
Lorsque vous découvrez un nouveau concept, vous lisez des livres ou regardez des vidéos éducatives pour le comprendre. Si vous échouez, vous demandez à votre ami de vous l'expliquer ou vous assistez à un séminaire sur le sujet. En d’autres termes, vous essayez d’accumuler plus d’informations à son sujet pour mieux le comprendre.
Il en va de même pour les réseaux de neurones. Mieux vous en aurez besoin pour comprendre à quoi ressemble une paruline, plus vous aurez besoin d'images de parulines pour la montrer. Plus il examinera de données, meilleurs seront les scores de précision.
L'approche en plusieurs étapes que nous avons choisie a non seulement amélioré la précision du modèle de classification des objets, mais a également permis d'analyser l'ensemble de données et de déterminer où le réseau manquait de données d'apprentissage.
Le problème du vilain petit canard
Après le lancement du modèle de classification d'objets, nous avons été surpris de recevoir des résultats bien pires que ceux que les tests nous ont montrés : le modèle n'a pas pu déterminer correctement l'espèce ou le type d'oiseau.
Le problème était plus profond que cela : notre développeur de vision par ordinateur en charge de l'ensemble du projet, qui a lui-même appris toutes les espèces d'oiseaux en travaillant dessus, n'a pas non plus réussi à déterminer quels étaient les oiseaux lorsqu'il a reçu les images mal étiquetées par le réseau. .
Il s’est avéré que juillet n’est pas le meilleur moment pour lancer un modèle de classification des oiseaux, car c’est le moment où les oiseaux adolescents apprennent à voler et à quitter leur nid.
Vous vous souvenez de l'histoire du vilain petit canard ? Eh bien, c'est vrai pour la plupart des oiseaux, les oisillons ne ressemblent en rien aux oiseaux adultes, et il est difficile de savoir quel oiseau vous regardez s'il est encore jeune.
Nous avons collecté des images de jeunes oiseaux au cours de l'été et prévoyons de former le réseau de classification pour déterminer les différentes espèces d'oiseaux à différents âges.
Le travail d’équipe fait fonctionner le réseau
Les ornithologues amateurs sont des passionnés, ils savent identifier un oiseau par la forme de son unique plume. Ils possèdent des connaissances que notre réseau de classification rêve d'avoir, alors pourquoi ne pas réunir les deux et former une alliance d'amoureux des oiseaux que le monde n'a jamais vue auparavant ?
Actuellement, le réseau de classification ne se contente pas d'indiquer à l'utilisateur l'espèce d'oiseau, il montre le degré de confiance ainsi que d'autres suppositions.
L'utilisateur peut confirmer ou corriger la supposition du réseau, nous aidant ainsi à l'entraîner - un oiseau à la fois. Après avoir exécuté le système de commentaires des utilisateurs pendant 3 mois, nous avons collecté plus de 20 000 images. Ces données nous sont précieuses puisque les photos sont réalisées dans des conditions réelles (mauvaises conditions météorologiques, nuit, etc.) et sont annotées par des experts.
Quand tu regardes l'abîme, l'abîme te répond
Il est à noter qu’au cours de ce projet, nous sommes devenus nous-mêmes des experts en oiseaux. Regarder les oiseaux toute la journée, tout en éduquant essentiellement un enfant virtuel sur toutes les petites différences entre les différents types de moineaux, fait de lui un membre platine instantané de la communauté des ornithologues amateurs.
Si tout le reste échoue, les membres de notre équipe CV peuvent facilement se retrouver en ornithologie.
Plus sérieusement, en parcourant des milliers d'images d'oiseaux, que ce soit pour le balisage d'un ensemble de données ou pour analyser les endroits où le réseau fait le plus d'erreurs, nous avons approfondi ce projet et sommes sortis à l'autre bout non seulement avec un tas de connaissances sur les oiseaux, mais une meilleure compréhension du fonctionnement des systèmes complexes de reconnaissance et de classification d'images, de la meilleure façon de les mettre en œuvre, de la manière d'analyser un vaste ensemble de données et de trouver ses points faibles.
Ce projet a été pour nous une opportunité inestimable de rechercher et de travailler avec les dernières technologies de vision par ordinateur, de travailler avec les commentaires des clients en temps réel et de perfectionner nos compétences en résolution de problèmes lorsque nous travaillons avec du code obsolète.