Combien d'images par classe suffisent pour former un CNN

12

Je démarre un projet où la tâche consiste à identifier les types de baskets à partir d'images. Je lis actuellement les implémentations de TensorFlow et Torch . Ma question est: combien d'images par classe sont nécessaires pour atteindre une performance de classification raisonnable?

Feynman27
la source
Définissez "raisonnable"? Votre objectif est-il d'obtenir une précision qui pourrait être utilisée dans un système de production? Votre objectif est-il autre chose? Il y a quelques variations dans la formation préalable et semi-supervisée qui pourraient vous faire économiser de l'effort, alors pourriez-vous clarifier si votre souci est dans l'effort d' étiquetage des images, ou simplement de rechercher une image. Enfin, dans quelle mesure vos images cibles sont-elles propres et simples? Les images où l'éclairage et la pose sont fixes seront plus faciles à former que les photographies «du monde réel» avec les baskets portées.
Neil Slater
Oui, cela sera utilisé dans la production. Je ne sais pas actuellement combien de classes il y aura car je ne sais pas combien de types de baskets différents il y a dans la bibliothèque d'images. Ma meilleure supposition serait de l'ordre de 50-100, mais plus la description de la sneaker est courante, moins les classes (par exemple air-jordan vs air-jordan-ultrafit). Malheureusement, la bibliothèque d'images est un mélange de baskets portées et de baskets posées comme des éléments fixes avec un fond blanc.
Feynman27

Réponses:

2

De Combien d'exemples de formation est trop peu lors de la formation d'un réseau neuronal? sur CV:

Cela dépend vraiment de votre ensemble de données et de l'architecture réseau. Une règle de base que j'ai lue (2) était de quelques milliers d'échantillons par classe pour que le réseau neuronal commence à très bien fonctionner. Dans la pratique, les gens essaient de voir.


Une bonne façon d'évaluer approximativement dans quelle mesure il pourrait être avantageux d'avoir plus d'échantillons d'apprentissage est de tracer les performances du réseau neuronal en fonction de la taille de l'ensemble d'apprentissage, par exemple à partir de (1):

entrez la description de l'image ici


Franck Dernoncourt
la source
0

La meilleure approche consiste à collecter autant de données que possible. Commencez ensuite avec le projet et créez un modèle de données.

Vous pouvez maintenant évaluer votre modèle pour voir s'il présente un biais élevé ou une variance élevée.

Variation élevée : dans cette situation, vous verrez que l'erreur de validation croisée est plus élevée que l'erreur de formation après la convergence.

Biais élevé : dans cette situation, l'erreur de validation croisée est légèrement supérieure à l'erreur de formation qui elle-même est élevée lorsqu'elle est tracée en fonction de la taille des données de formation. et tracer des erreurs.

Si vous voyez que votre modèle présente une variance élevée (surajustement), l'ajout de données aidera généralement contrairement au modèle à biais élevé (sous-ajustement) où l'ajout de nouvelles données d'entraînement n'aide pas.

Aussi par classe, vous devez essayer d'obtenir le même nombre d'images, sinon les jeux de données peuvent devenir asymétriques (plus d'un type).

Je suggère également si vous utilisez TensorFlow , en savoir plus sur le classificateur d' images INCEPTION de GOOGLE . Il est déjà classifié sur la base de données d'images de Google et vous pouvez l'utiliser pour vos images, de sorte que les exigences en termes de nombre d'images diminuent considérablement.

Xeqtr
la source
J'ai déjà effectué un test rapide en utilisant Inception-v3 de TensorFlow. Le mieux qu'il puisse faire, c'est de me donner un classement très précis, comme «chaussure de course», mais j'ai besoin de quelque chose d'un peu plus granuleux, comme «air-jordan-ultrafit». C'est pourquoi je crée un nouvel ensemble de formation à utiliser avec Inception.
Feynman27
C'est une étrange définition de «un peu plus granulaire».
Jivan