‍
Dans les articles précédents, nous avons expliqué comment choisir une caméra pour votre projet de vision par ordinateur et comment étiqueter correctement les données capturées avec cette caméra. Supposons qu'à ce stade, nous disposons d'un ensemble de données étiquetées prêt à l'emploi. Nous pouvons maintenant aller plus loin et nous plonger dans la pratique de l'augmentation des données, c'est-à -dire augmenter la taille de notre ensemble de données en créant de petites variations sur les points de données existants.
Dans ce billet, nous ferons un bref rappel (ou une introduction) sur ce qu'est l'augmentation des données. Ensuite, nous expliquons pourquoi nous parlons encore d'un concept si bien établi et généralement accepté aujourd'hui et nous le situons dans le contexte du récent sujet de l'IA centrée sur les données. Enfin, nous expliquons comment ML6 aborde l'augmentation des données.
"Donnez à un homme un grand ensemble de données et il aura les données nécessaires pour former un modèle solide. Enseignez-lui de bonnes pratiques d'augmentation des données et il aura des données pour toute sa vie."
‍
‍
(Si vous êtes déjà familiarisé avec le concept d'augmentation des données, cette courte section n'est pas pour vous. N'hésitez pas à passer à la section suivante et je vous y rejoindrai).
‍
La pratique de l'augmentation des données vise à accroître la taille de votre ensemble de données en prenant un point de données existant et en le transformant de manière à obtenir un point de données nouveau, mais toujours réaliste. Les avantages sont doubles :
Un exemple rapide permet de clarifier les choses : imaginons que nous formions un modèle pour détecter les oiseaux. Dans l'exemple ci-dessous, l'image d'un oiseau à gauche est tirée de notre ensemble de données original. À droite, nous avons trois transformations de l'image originale que notre modèle devrait toujours interpréter comme un oiseau. Les deux premières sont simples : Un oiseau est un oiseau, qu'il vole vers l'est ou vers l'ouest, vers le haut ou vers le bas. Dans le troisième exemple, la tête et le corps de l'oiseau ont été artificiellement occultés. Cette image inciterait donc notre modèle à se concentrer sur les ailes plumeuses comme caractéristique des oiseaux.
‍
Si vous souhaitez une introduction plus détaillée à l'augmentation des données et aux nombreuses transformations couramment utilisées, nous vous conseillons de consulter l'une des nombreuses ressources de qualité disponibles, telles que celle-ci et celle-ci.
‍
Les techniques d'augmentation des données pour l'apprentissage automatique, en particulier pour la vision par ordinateur, existent depuis très longtemps et leur efficacité a été prouvée à maintes reprises. Même l'un des premiers succès des réseaux neuronaux convolutifs, LeNet-5 de Yann LeCun (publié en 1998), préconise déjà de "générer artificiellement plus de modèles d'entraînement à l'aide de distorsions aléatoires". Il peut donc sembler que promouvoir l'augmentation des données auprès des praticiens de l'apprentissage automatique revient à prêcher un convaincu. Alors pourquoi le faisons-nous ?
Nous sommes en bonne compagnie : Andrew Ng, cofondateur et ancien directeur de Google Brain, est le fer de lance d'une évolution de la recherche et de l'utilisation de l'IA vers ce qu'il appelle "l'IA centrée sur les données" et s'éloigne de la pratique de "l'IA centrée sur les modèles" qui a dominé la recherche au fil des ans. L'idée centrale est qu'une quantité disproportionnée de temps est consacrée à la recherche sur les architectures de modèles, alors que la recherche sur le nettoyage, l'augmentation et les pratiques MLOps pour les données est beaucoup moins populaire et mérite plus d'attention. Pour plus d'informations, consultez l'exposé d'Andrew (ou les diapositives).
"L'apprentissage automatique a atteint une maturité telle que les architectures de modèles à haute performance sont largement disponibles, alors que les approches d'ingénierie des ensembles de données ont pris du retard.
Il a également lancé la première compétition d'IA centrée sur les données. Dans les compétitions Kaggle traditionnelles, il est demandé d'entraîner et de soumettre un modèle à l'aide d'un ensemble de données fixe. Ici, le format est inversé et chaque participant est invité à soumettre un ensemble de données qui est ensuite utilisé pour former un modèle fixe.
Même si l'IA centrée sur les données couvre un éventail plus large de pratiques et de concepts que la simple augmentation des données, elle en constitue toujours une partie importante. Par extension, nous ne battons pas un cheval mort en soulevant à nouveau le sujet de l'augmentation des données dans ce billet de blog.
‍
Jusqu'à présent, nous avons brièvement évoqué ce qu'est l'augmentation des données et nous avons établi qu'il s'agit toujours d'un sujet d'actualité. Passons maintenant aux affaires (valeur).
Bien sûr, chaque cas d'utilisation que nous abordons et chaque ensemble de données que nous utilisons ou construisons a ses propres subtilités. Cependant, il y a en général trois principes directeurs que nous suivons : des lignes de base solides, la connaissance de votre modèle et l'injection de connaissances d'experts lorsque c'est possible :
‍
‍
L'apprentissage automatique est un processus itératif : apporter des modifications, former, évaluer et répéter. Il est donc important d'avoir un bon point de départ, de sorte que les itérations suivantes puissent être comparées à ce point de référence pour déterminer rapidement ce qui fonctionne et ce qui ne fonctionne pas. Cette approche s'applique également à l'augmentation des données.
Un développement particulièrement intéressant à cet égard est l'AutoAugment de Google. Ils formulent le problème de la recherche de la meilleure politique d'augmentation pour un ensemble de données comme un problème de recherche discrète. Dans leur article , ils montrent les politiques d'augmentation optimales découvertes pour les ensembles de données : CIFAR-10, SVHN et ImageNet. D'accord, le problème est résolu ? Pas tout à fait. Trouver une telle politique d'augmentation optimale pour un espace de recherche suffisamment grand nécessite beaucoup de puissance de calcul. Pour cette raison, l'exécution d'AutoAugment sur votre propre ensemble de données n'est pas une option viable. Mais il y a de bonnes nouvelles. Les auteurs d'AutoAugment affirment que les politiques apprises sont transférables entre les ensembles de données, par exemple une politique optimale pour ImageNet fonctionne bien sur d'autres ensembles de données similaires à ImageNet. Nous pouvons voir un parallèle évident avec l'apprentissage par transfert où les poids pré-entraînés d'un ensemble de données produisent souvent de bons résultats sur d'autres ensembles de données également. Par conséquent, une politique d'AutoAugment peut être utilisée comme une base de référence solide pour un large éventail d'ensembles de données.
Depuis sa publication, des améliorations visant à rendre AutoAugment moins gourmand en ressources informatiques ont été proposées, comme Fast AutoAugment et RandAugment , mais l'idée centrale est restée la même : rechercher automatiquement une bonne politique d'augmentation pour un ensemble de données donné. Il existe également une version d'AutoAugment entièrement dédiée à la détection d'objets.
Vous n'êtes toujours pas convaincu ? Notez que l'une des équipes gagnantes du concours Data-centric AI mentionné plus haut, Synaptic-AnN, a utilisé exactement cette stratégie dans le cadre de sa solution gagnante. Ils ont remarqué que l'ensemble de données du concours (chiffres romains) présentait une certaine ressemblance avec l'ensemble de données SVHN (Street View House Numbers) pour lequel il existe une politique AutoAugment apprise, qu'ils ont utilisée comme point de départ pour l'améliorer :
"Nous avons étudié la possibilité d'utiliser AutoAugment pour apprendre les paramètres de la technique d'augmentation, mais en raison de ressources informatiques limitées et de données insuffisantes, les résultats du article sur l'ensemble de données du SVHN ont été utilisés sur l'ensemble de données de la compétition. Nous avons constaté que les techniques d'augmentation telles que Solarize et Invert étaient inefficaces et les avons donc supprimées de la politique finale du SVHN. Cette méthode a permis d'améliorer considérablement les performances et a été choisie parce que l'ensemble de données SVHN est en niveaux de gris et concerne des représentations de nombres (plaques d'immatriculation). Nous avons également exploré d'autres politiques d'augmentation automatique basées sur CIFAR10 et ImageNet, mais elles n'ont pas été aussi efficaces que la politique SVHN".
‍
‍
Si vous pensiez qu'en brandissant le terme d'IA centrée sur les données, vous n'auriez plus besoin de comprendre votre modèle, vous vous trompez. Certains modèles sont développés avec une préparation de données spécifique à l'esprit. Ne pas en tenir compte pourrait avoir un impact négatif sur les performances de votre modèle.
Le modèle YOLOv4, qui reste très populaire pour la détection d'objets, en est un excellent exemple. L'une des contributions qui joue un rôle dans le succès du modèle est ce que l'on appelle le "Bag of Freebies" (BoF). Il s'agit de techniques qui améliorent les performances du modèle sans l'affecter au moment de l'inférence, y compris l'augmentation des données. Les transformations d'augmentation qui ont été incluses dans le BoF, sur la base d'expériences d'ablation, sont CutMix et Mosaic Data Augmentation. Ces augmentations font donc autant partie du modèle que l'architecture du modèle elle-même.
‍
‍
Des années d'"IA centrée sur le modèle" ont fait des architectures de modèles très performantes et des poids pré-entraînés un produit de base. En outre, les développements de la recherche tels qu'AutoAugment ont rendu largement applicables des lignes de base d'augmentation solides. Les connaissances spécialisées ont-elles encore leur place dans cette histoire ? Un praticien expérimenté en ML peut-il encore faire la différence et extraire jusqu'à la dernière goutte de performance des données ? Nous pensons que la réponse est un "oui" retentissant.
Examinons à nouveau la solution de Synaptic-AnN. Après avoir utilisé la politique AutoAugment pour le jeu de données SVHN, ils ont noté les principales différences entre SVHN et leur jeu de données et ont conclu que certaines augmentations n'avaient pas de sens pour leur jeu de données : Solarize et Invert. Cette stratégie a permis d'améliorer considérablement les performances.
De même, de nombreux cas d'utilisation auxquels nous nous attaquons à ML6 ont des ensembles de données très spécifiques et ne pas respecter les différences subtiles entre eux aurait pour conséquence de laisser la performance du modèle sur la table. Prenons l'exemple du contrôle automatique de la qualité sur une chaîne de fabrication. Les applications de vision par ordinateur dans l'industrie manufacturière permettent généralement de disposer d'un environnement très contrôlé : Il y a un éclairage constant, un angle de vue fixe, une distance fixe par rapport à l'objet... Par conséquent, il n'est pas nécessaire d'utiliser des augmentations pour rendre notre modèle invariant par rapport aux conditions d'éclairage, aux angles de vue ou à l'échelle de l'objet. Nous devrions plutôt nous concentrer sur des augmentations qui produisent des variations plausibles des défauts que nous essayons de détecter.
‍
‍
En conclusion, lorsque vous avez rassemblé et étiqueté l'ensemble de données pour votre prochain projet de ML, prenez le temps de mettre en place et de développer une bonne stratégie d'augmentation des données. Commencez par appliquer une stratégie de base solide, puis améliorez-la en intégrant des connaissances d'expert grâce à la compréhension de vos données et de votre cas d'utilisation. Enfin, prenez le temps de comprendre le fonctionnement interne de votre modèle pour vous assurer que vos stratégies d'augmentation sont alignées sur lui.
‍
‍
‍