ML6 est souvent contactée par des clients ayant un problème qui semble pouvoir être résolu avec quelques caméras et une solution intelligente d'apprentissage automatique. Parfait, mais par où commencer ? Il nous faut encore une chose : des données étiquetées. Actuellement, la manière la plus pratique et la plus robuste de mettre en œuvre un algorithme de vision artificielle dans le monde réel consiste à lui enseigner les motifs qu'il doit être capable de reconnaître. Cela signifie qu'il faut créer un ensemble de données d'entraînement, c'est-à-dire une collection de données d'exemple étiquetées sur lesquelles les paramètres du modèle peuvent être réglés pour apprendre à résoudre le problème.
Notre expérience des projets impliquant des données étiquetées révèle une vérité constante : il est essentiel de disposer d'un ensemble d'entraînement bien annoté pour réussir. Comme le dit le proverbe : " garbage in, garbage out". Dans ce billet, nous nous concentrons sur les problèmes les plus courants dans les applications de vision par ordinateur. La plupart des problèmes que nous traitons pour nos clients entrent dans l'une des catégories suivantes : Classification d'images, Détection d'objets ou Segmentation d'instances.
Pour avoir une bonne idée de ce à quoi doit ressembler votre ensemble d'entraînement, vous devez réfléchir au problème que vous essayez de résoudre. Quelles sont les différences entre les différents éléments que vous souhaitez détecter ? Y a-t-il beaucoup de variations dans leur apparence, leur éclairage, l'angle sous lequel l'image est prise ? Utilise-t-on un seul type de caméra ou plusieurs modèles différents ?
Bien qu'il existe diverses techniques permettant de tirer le meilleur parti de l'annotation dans un budget-temps limité, il est toujours bon de constituer un ensemble d'entraînement couvrant des images de toutes les variétés susmentionnées qui s'appliquent à votre problème. Un modèle d'apprentissage automatique aura plus de facilité à généraliser ce qu'il sait à un nouvel exemple ressemblant étroitement à celui sur lequel il a été formé, plutôt qu'à quelque chose d'entièrement nouveau. Par exemple, si vous rassemblez un ensemble d'entraînement pour un modèle de détection de voitures, vous souhaitez étiqueter des exemples présentant autant de couleurs, de marques, d'angles et de conditions d'éclairage différents que ce que vous attendez du modèle. Si vous n'étiquetez que des voitures citadines compactes, le modèle ne sera pas en mesure de détecter un camion géant. Bien entendu, il n'est pas nécessaire que toutes les combinaisons possibles d'attributs figurent dans l'ensemble de données, mais seulement un mélange sain de la variété du monde réel.
Avant de procéder à l'étiquetage, passez en revue l'ensemble de données afin de repérer les schémas qui pourraient vous obliger à prendre des décisions difficiles dans le cadre de votre approche de l'étiquetage. Avez-vous pensé à toutes les catégories pertinentes ? Existe-t-il un certain type d'objet qui se situe entre deux catégories ? Certaines images contiennent-elles des objets partiellement visibles ? Est-il impossible de reconnaître certains objets dans certaines conditions (par exemple, des objets sombres dans des images sombres) ? Réfléchissez à ces questions et décidez à l'avance d'un plan approprié. Si votre étiquetage n'est pas cohérent, la qualité du modèle formé sur vos données en sera affectée. Vous devrez peut-être laisser de côté les images qui ne sont pas suffisamment claires. Une bonne règle empirique consiste à utiliser votre propre œil : si vous pouvez prendre une décision en une fraction de seconde pour une tâche visuelle, un modèle d'apprentissage automatique peut généralement apprendre à la reproduire. Toutefois, si l'image ne contient pas suffisamment d'informations visuelles, le modèle ne sera pas en mesure de les extraire de nulle part.
D'après notre expérience, il est essentiel d'inclure les experts en apprentissage automatique et les experts du domaine dès le début du projet, et d'élaborer une approche ensemble. Il est préférable de commencer par annoter un petit lot d'images et de les examiner dans le cadre d'un processus itératif. Cela permet d'éviter les malentendus et de travailler ensemble pour tirer le meilleur parti du temps consacré à l'annotation.
Dans le monde de l'apprentissage automatique, il existe de nombreux ensembles de données accessibles au public. Ceux-ci contiennent souvent des millions d' images et des dizaines, voire des centaines de classes de toutes sortes. ImageNet et COCO en sont des exemples. De même, de nombreux modèles peuvent être réutilisés. Même si votre problème ne se recoupe pas exactement avec ces ensembles de données, il existe toujours, à un niveau de base, des connaissances visuelles similaires liées à la "détection de choses" qui sont nécessaires dans les deux tâches. Nous pouvons utiliser cela à notre avantage en adaptant un modèle aussi puissant à notre tâche, au lieu de partir de zéro.
Dans la classification d'images, l'objectif est d'attribuer une étiquette unique à l'ensemble de l'image. C'est intéressant si vous disposez d'une collection d'images qui appartiennent à une ou plusieurs catégories, ou si vous souhaitez prendre une décision oui/non sur la base d'une caractéristique importante de l'image. Ce type de modèle pourrait être utilisé pour détecter le type de pièce qui passe devant la caméra d'une usine, ou pour suggérer une catégorie d'article à partir d'une photo téléchargée par un vendeur sur une place de marché d'occasion.
Il s'agit généralement de la tâche la plus facile à étiqueter. Veillez à créer des catégories clairement distinctes et bien définies. Par exemple, si vous étiquetez des pièces défectueuses dans une chaîne de production, réfléchissez soigneusement aux différents défauts qui peuvent survenir et examinez le nombre de catégories qui peuvent être définies et qui sont clairement distinctes sur le plan visuel. Il est également conseillé d'examiner votre ensemble de données et de réfléchir aux cas qui pourraient s'avérer difficiles, et d'élaborer une stratégie cohérente pour les traiter.
Si nous nous intéressons à un certain nombre d'objets, à leur emplacement général dans les images, ou si nous recherchons un objet relativement petit dans une image plus grande, la détection d'objets est le nom du jeu.
À cette fin, nous formons un algorithme pour détecter les régions rectangulaires contenant les objets ou les régions d'intérêt. Comme précédemment, un modèle peut apprendre à distinguer de nombreuses catégories d'objets. Ce modèle pourrait être utilisé pour détecter les piétons, les cyclistes et les voitures dans une scène de rue (pensez aux voitures autonomes ou à la vidéosurveillance), pour localiser et identifier les défauts sur les produits dans une chaîne de production, ou pour suivre un ballon et des joueurs dans un match de sport.
L'annotation de vos données d'apprentissage consiste à dessiner des cases sur les objets intéressants de vos images. Une étiquette de classe est également attribuée à chaque case. Les cases peuvent se chevaucher.
En général, il est bon de tracer les limites de la boîte de manière raisonnablement serrée autour de l'objet. Des annotations incohérentes et lâches rendent le processus d'apprentissage du modèle inutilement difficile. En outre, cela signifie que vos mesures d'évaluation seront moins informatives, car le modèle sera pénalisé pour avoir dessiné les limites à un endroit différent.
Si votre problème consiste à localiser avec précision un objet dans l'image, jusqu'aux pixels exacts, vous voudrez passer à la segmentation de l'instance. Cela peut être nécessaire pour calculer des mesures telles que la surface ou la section transversale de l'objet, ou pour utiliser les informations pour des tâches en aval, telles que l'édition automatisée d'images. Cela peut parfois être utile pour les objets complexes qui ne sont pas facilement approximés par un rectangle, par exemple les objets minces laissent souvent trop d'espace non pertinent dans la boîte pour que la détection simple d'un objet fonctionne bien. La segmentation des instances est également utile pour distinguer les objets étroitement empilés en éléments individuels.
En gros, il existe deux approches pour cette tâche : l'annotation polygonale et l'annotation basée sur les pixels. La première consiste essentiellement à dessiner une série de points autour du contour de l'objet, qui sont reliés par des segments de ligne. La seconde consiste en des approches bitmap, similaires à l'outil pinceau d'un logiciel d'édition d'images. L'approche la plus facile dépend de votre problème, de la forme des objets que vous souhaitez reconnaître et des outils proposés par votre logiciel d'annotation. (Certains proposent des outils similaires à ceux de Photoshop, tels que le remplissage, le lasso magique, etc.) Ces annotations de forme sont également accompagnées d'une étiquette de classe.
De nombreux logiciels d'étiquetage plus avancés proposent également des approches semi-automatiques indépendantes du problème, telles que DEXTR, qui vous permet d'extraire un masque détaillé à partir de quatre points clés seulement. Ces méthodes sont également très pratiques pour étiqueter rapidement de grandes quantités d'objets.
Comme pour les annotations de rectangles, vous devez trouver un bon équilibre entre l'annotation d'un seul objet, suffisamment serrée pour fournir un signal d'apprentissage cohérent à l'algorithme, et le fait d'avancer suffisamment rapidement pour pouvoir étiqueter de nombreux exemples dans le temps dont vous disposez pour l'annotation.
Les catégories ci-dessus ne constituent pas une liste exhaustive de tous les types d'annotation possibles. Pour certains problèmes, la segmentation sémantique, qui consiste à étiqueter des pixels individuels de l'image sans détecter d'objets distincts, est plus appropriée. Il y a aussi l'annotation des points clés, qui consiste à annoter les points clés d'un objet, par exemple les articulations d'une personne qui danse ou une pièce de machine en mouvement.
En outre, tous les problèmes ne sont pas modélisés de manière appropriée à l'aide d'étiquettes de classes discrètes. Dans certains cas, une étiquette continue ou numérotée est plus appropriée. Vous pourriez vouloir étiqueter une maison dans une image satellite avec une valeur de vente estimée, classer une image de microscopie de biopsie avec un grade de maladie, ou estimer l'âge d'une personne à partir d'une image. La saisie d'étiquettes continues de forme libre est généralement moins bien prise en charge par les outils d'annotation ; vous devrez donc vous assurer qu'elle est prise en charge par l'outil de votre choix.
Le choix du bon logiciel d'étiquetage est essentiel pour améliorer l'efficacité de vos efforts d'étiquetage. Assurez-vous que votre logiciel permet un étiquetage facile pour votre tâche spécifique, avec aussi peu d'actions manuelles par annotation. Veillez à apprendre tous les raccourcis pertinents : les petites fractions de temps gagnées sur chaque annotation s'ajouteront à des gains de temps significatifs sur l'ensemble de l'ensemble des données.
Si vous travaillez sur un projet de grande envergure, vérifiez si le logiciel dispose d'une méthode intelligente pour télécharger et gérer les ensembles de données. Si vous avez plusieurs personnes qui étiquettent, la possibilité d'attribuer des rôles, des autorisations et des tâches d'étiquetage à des utilisateurs individuels peut également s'avérer nécessaire pour que tout reste gérable. Certains outils vous permettent de définir un pipeline d'étiquetage plus complexe, ce qui permet de gagner en efficacité en divisant un problème en plusieurs étapes plus petites et plus rapides, ou en utilisant un algorithme d'apprentissage automatique préalablement formé pour générer une première approximation des contours de l'objet.
Il existe de nombreux outils gratuits à code source ouvert qui possèdent un grand nombre de ces fonctions, par exemple CVAT, Label Studio ou LOST. Il existe également des solutions commerciales qui peuvent être accompagnées d'implémentations propriétaires de ces fonctionnalités et d'autres extras.
Réfléchissez également à la manière dont ce logiciel sera déployé. Certains logiciels plus anciens ou plus petits fonctionnent comme une application normale, d'autres peuvent être déployés comme un service. Certains, comme les deux susmentionnés, disposent de conteneurs Docker pour un déploiement rapide.
Si vous disposez d'un ensemble de données particulièrement volumineux qui doit être étiqueté, il peut être intéressant de prendre contact avec des fournisseurs de services d'étiquetage tiers. Vous pouvez également mettre en place votre propre tâche de crowdsourcing en utilisant une plateforme de crowdsourcing. Cette approche peut permettre une augmentation massive du débit d'étiquetage, mais elle introduit également des frais généraux et des temps d'installation, et nécessite une partie supplémentaire pour comprendre pleinement le domaine du problème. Il est particulièrement important de garder un œil sur la qualité de l'étiquetage, à la fois entre les individus et dans le temps.
Nous avons ainsi couvert les aspects les plus importants de la résolution d'un problème de vision par ordinateur en étiquetant vos propres données. Si vous avez un problème qui pourrait être automatisé à l'aide de l'une des techniques ci-dessus, nous vous encourageons à nous contacter chez ML6. Nous pouvons vous aider à trouver le flux de travail optimal pour votre projet de vision par ordinateur.