Comment assurer la qualité des données d'images dans la classification d'images ?

Comment assurer la qualité des données d'images dans la classification d'images ?

Tout projet de vision par ordinateur commence par une stratégie de collecte de données et la création d'un ensemble de données. Ces dernières années, les gens se sont concentrés sur le développement de modèles sans investir autant que nécessaire dans la création de données d'entraînement. En fait, la création d'un ensemble de données d'image était vraiment compliquée et prenait beaucoup de temps, et était souvent effectuée par des ingénieurs ou des stagiaires de manière plutôt inefficace. Cette douleur a ouvert la voie à une génération de startups d'outils d'étiquetage et d'outils open-source tels que :

- Labelbox

- Superviser.ly

- CVAT

- V7 Labs

- Rectalabel

Cette époque est révolue. Les outils d'étiquetage sont en train de devenir une commodité. Les entreprises d'IA peuvent désormais s'appuyer sur une multitude d'outils et de services pour obtenir la création de leurs ensembles de données.

Malheureusement, de nombreuses entreprises rencontrent encore des problèmes de performance de leurs modèles d'IA.

La plupart de ces problèmes proviennent de la qualité de l'ensemble de données lui-même. Et, par qualité, nous entendons :

1. La quantité de données dans l'ensemble de données

2. La quantité de données mal étiquetées dans votre ensemble de données.

3. La pertinence des images dans l'ensemble de données.

Dans ce billet de blog, nous allons passer en revue ces 3 points et comment les contrôler afin d'optimiser la qualité globale de votre jeu de données pour vos cas d'utilisation. Nous nous concentrerons sur une classification d'images à titre d'exemple.


Comment savoir si vous avez assez d'images dans votre ensemble de données ?

1. Règles empiriques pour déterminer le nombre minimum d'images

Il peut être compliqué de déterminer le nombre d'images nécessaires dans votre jeu de données d'images pour une tâche de classification d'images. Cependant, il existe quelques bonnes règles empiriques que vous pouvez suivre. Selon l'une d'elles, environ 1000 exemples par classe sont une quantité décente pour commencer.

Mais ce type de règles n'est pas strictement du domaine de la "science des données". Prenons par exemple la règle des 1000 (appelons-la ainsi). Elle peut être complètement fausse si l'on considère l'apprentissage par transfert.

Heureusement, il existe des méthodes plus robustes pour déterminer si votre ensemble de formation contient la bonne quantité de données. La première est la méthode de détermination de la taille de l'échantillon de Balki et al. expliquée par Keras.io.

2. Explication de la méthode de détermination de la taille de l'échantillon

"Une revue systématique des Méthodes de détermination de la taille des échantillons (Balki et al.) fournit des exemples de plusieurs méthodes de détermination de la taille de l'échantillon. Dans cet exemple, un schéma de sous-échantillonnage équilibré est utilisé pour déterminer la taille optimale de l'échantillon pour notre modèle. Pour ce faire, on sélectionne un sous-échantillon aléatoire composé d'un nombre Y d'images et on entraîne le modèle à l'aide de ce sous-échantillon. Le modèle est ensuite évalué sur un ensemble de test indépendant. Ce processus est répété N fois pour chaque sous-échantillon avec remplacement afin de permettre la construction d'une moyenne et d'un intervalle de confiance pour les performances observées."

Cette méthode est simple à comprendre mais réellement efficace. En bref, elle consiste à entraîner plusieurs modèles N fois avec un sous-ensemble de plus en plus grand de vos ensembles de données (disons 5%, 10%, 25% et 50%). Une fois cela fait, enregistrez la précision moyenne et l'écart type pour ajuster une courbe exponentielle afin de prédire le nombre optimal d'images pour obtenir un certain objectif de précision.

Pour rendre les choses plus claires, visualisons-les à l'aide d'un exemple simple.

Disons que nous disposons d'un ensemble d'apprentissage de 1000 images réparties de manière égale entre les chats et les chiens.

1. Entraîner 5 modèles sur 5% de l'ensemble → 50 images et enregistrer la précision pour chacun d'eux.

Modèle 1 : [0.3 , 0.33, 0.28, 0.35, 0.26] (Liste de précision pour chaque modèle)

2. Faisons la même chose avec 10 % de l'ensemble → 100 images et enregistrons la précision.

3. Répétez l'opération avec 20 %, 35 % et 50 % de votre série.

Maintenant, vous devriez avoir 5 listes de précision correspondant à 5 formations différentes pour 5 tailles différentes de sous-ensembles de formation.

Ensuite, il vous suffit de calculer la précision moyenne et l'écart type de chaque liste, et d'ajuster une courbe exponentielle sur ces points de données. Vous devriez obtenir une courbe ressemblant à ceci.

En regardant l'extrapolation de la courbe exponentielle, vous devriez être en mesure de déterminer si vous avez suffisamment d'images dans votre ensemble de formation pour obtenir votre objectif de précision.

Un lien vers la méthodologie et le code complets peut être trouvé ici.


Comment identifier les données mal étiquetées dans mon ensemble de données ?

Il y a plusieurs façons de répondre à cette question :

Le premier est purement opérationnel → Quel a été le flux de travail utilisé pour étiqueter mes images ?

La seconde est plus analytique → Comment détecter automatiquement les données mal étiquetées ?


1. Créez un flux de travail d'annotation conçu pour une qualité optimale

Il y a quelques principes à respecter avant de créer un ensemble de données :

1. Face à l'ambiguïté, refusez la tentation de deviner

Cela s'inspire du zen de Python. Cela signifie que vous devez établir des directives très claires pour vos annotateurs. Le pire scénario est que votre annotateur décide de prendre une décision différente pour une classe ambiguë.

2. Trois est toujours mieux qu'un

Dans la mesure du possible, veillez à ce que plusieurs personnes annotent les mêmes images et extrayez chaque image pour laquelle des étiquettes différentes ont été créées, afin de comprendre précisément pourquoi les annotateurs ne sont pas d'accord sur ces images. Essayez toujours d'obtenir un score de consensus de 100 %. Dans les cas où les humains ne sont pas d'accord, il est très probable que votre CNN ne soit pas performant non plus.

3. Demander à une troisième personne de revoir l'ensemble des données - Désolé, je n'ai pas de bonne explication pour celle-ci.

Les préjugés humains existent bel et bien. C'est toujours une bonne idée d'avoir un acteur tiers dans votre flux de travail d'annotation pour prendre en charge le processus de révision.

2. Identifier par programme les images mal étiquetées dans votre ensemble de données

Une anomalie d'étiquetage peut signifier plusieurs choses, mais les deux principales raisons sont les données mal étiquetées et les classes ambiguës. Il existe plusieurs méthodes pour extraire les données mal étiquetées ou ambiguës, mais pour cet article de blog, nous n'approfondirons qu'une seule méthode.

Labelfix, une implémentation de "Identifying Mislabeled Instances in Classification Datasets" par Nicolas M. Muller et Karla Markert.


Labelfix explique

Dans cet article et son implémentation, les auteurs présentent un pipeline non paramétrique de bout en bout pour trouver les instances mal étiquetées dans les jeux de données numériques, d'images et de langage naturel. Ils évaluent leur système quantitativement en ajoutant un petit nombre de bruits d'étiquettes à 29 ensembles de données, et montrent qu'ils trouvent des instances mal étiquetées avec une précision moyenne de plus de 0,84 lors de l'examen de la recommandation du premier 1 % de leur système. Ensuite, ils appliquent leur système à des ensembles de données accessibles au public et trouvent des instances mal étiquetées dans CIFAR-100, Fashion-MNIST et d'autres.

En termes simples, la méthode labelfix essaie de trouver un pourcentage donné (entrée utilisateur) d'images qui sont très probablement mal étiquetées. Cela signifie que vous devriez être en mesure de spécifier le nombre d'images mal étiquetées que vous voulez trouver, et les algorithmes labelfix seront en mesure de vous donner le X% le plus susceptible d'être mal étiqueté.

La magie derrière cette mise en œuvre est assez intuitive et peut être résumée en 4 étapes.

1. Entraînez un classificateur sur l'ensemble de votre jeu d'entraînement, ne gardez aucune image pour votre jeu de test.

2. Effectuez l'inférence sur l'ensemble de votre jeu de formation avec le modèle formé ci-dessus

3. Perform the inner products < yn, yn"> , where yn is the vector of true label one-hot encoded, and  yn" is the predicted vector of probability, for every prediction.

4. Trier ces produits internes et extraire les X% en premier. Ce sont les images les plus probablement mal étiquetées.

Voici un petit aperçu des performances de détection obtenues par les chercheurs sur plusieurs jeux de données.

Vous pouvez trouver le document de recherche ici. Et le dépôt Github ici.

Maintenant que nous disposons d'une méthode pour détecter les données mal étiquetées, il nous reste une dernière question à poser. Mes images sont-elles pertinentes pour mon ensemble d'entraînement ?

Comment affirmer la pertinence des données dans mon ensemble de formation ?

La présence de données non pertinentes dans votre ensemble de formation peut sérieusement nuire à la précision globale de vos modèles. En effet, s'il y a des doublons dans vos données d'apprentissage, ils provoqueront des biais. Cela signifie que le modèle apprend à être moins efficace avec de nouveaux échantillons et qu'il aura du mal à généraliser sur des données inédites. Les doublons peuvent également entraîner un comportement étrange pour votre ensemble de validation. Vous pouvez vous retrouver avec les mêmes images dans vos ensembles de formation et de validation si une image figure plusieurs fois dans votre ensemble de données.

Comment trouver les images en double dans votre jeu d'entraînement

Nous appellerons cette astuce la "méthode de similarité d'encastrement", vraiment efficace et facile à réaliser.

La méthode comporte 2 étapes :

1. Calculer l'intégration pour chaque image

Les images stockent beaucoup d'informations dans leurs valeurs de pixel. Leur comparaison est coûteuse et risque de ne pas fournir des résultats de haute qualité. Pour obtenir des résultats de meilleure qualité, nous pouvons utiliser un modèle de vision par ordinateur pré-entraîné tel que MobileNet pour générer des embeddings pour chaque image.

Un encastrement est obtenu en traitant une image par des modèles profonds pour produire un vecteur contenant seulement quelques milliers de valeurs qui distillent l'information stockée dans des millions de pixels à une échelle moyenne.  

Vous devez choisir un modèle pré-entraîné qui soit léger mais néanmoins précis (c'est pourquoi mobileNet pourrait être un bon choix) afin de pouvoir extraire l'incorporation de toutes vos images relativement facilement.

2. Calculer la similarité en cosinus entre tous les encastrements.

Voici la formule du calcul de la similitude du cosinus :


C'est une façon plus robuste de calculer la similarité entre deux vecteurs qu'une simple distance.

Vous pouvez tirer parti de la bibliothèque scikit-learn qui propose une implémentation. Le résultat de cet algorithme sera une matrice NxN, où N est le nombre d'images dans votre ensemble d'entraînement, avec des valeurs comprises entre 0 et 1, où 1 est un score de similarité total.

Vous pourrez alors choisir le seuil à appliquer et déterminer les images qui sont trop similaires. Une bonne règle de base est de filtrer les images qui ont un score de similarité de 0,9 et plus.

Quelques points à retenir

Aujourd'hui, les équipes de ML ne doivent plus passer des heures à créer des ensembles de données d'images de qualité pour leurs projets de classification d'images. L'essor d'une multitude d'outils à code source ouvert et d'outils d'étiquetage a facilité une grande partie des projets de vision artificielle à travers le monde.

Cependant, de nombreuses entreprises d'IA se heurtent encore aux performances des modèles d'IA. C'est pourquoi, dans cet article, nous avons abordé trois des problèmes les plus courants liés à la qualité des ensembles de données, en utilisant la classification d'images comme cas d'utilisation. Nous avons abordé les problèmes suivants :

1. La quantité de données dans l'ensemble de données

2. La quantité de données mal étiquetées dans votre ensemble de données.

3. La pertinence des images dans l'ensemble de données.

Et surtout, nous avons vu comment les contrôler pour optimiser la qualité de vos données dans vos projets.

Si vous souhaitez essayer une solution pour garantir la qualité de vos ensembles de données, chez Picsellia, nous proposons un essai de 14 jours de notre plateforme MLOps. Elle couvre l'ensemble du cycle de vie de MLOps, y compris les fonctions avancées de traitement d'images et de détection d'objets. Essayez-la !

Gérez vos données d'IA de la bonne manière

Obtenir un essai

Recommandé pour vous:

english language
EN
french language
FR