Wie viele Bilder pro Klasse reichen aus, um ein CNN zu trainieren

11

Ich starte ein Projekt, bei dem es darum geht, Sneaker-Typen anhand von Bildern zu identifizieren. Ich lese gerade in TensorFlow- und Torch- Implementierungen. Meine Frage ist: Wie viele Bilder pro Klasse sind erforderlich, um eine angemessene Klassifizierungsleistung zu erzielen?

Feynman27
quelle
"Vernünftig" definieren? Ist es Ihr Ziel, eine Genauigkeit zu erreichen, die in einem Produktionssystem verwendet werden kann? Ist Ihr Ziel etwas anderes? Wie viele Klassen gibt es? Es gibt einige Variationen in der Vorschulung und in der halbüberwachten Schulung, die Ihnen Mühe ersparen könnten. Sie könnten also klären, ob Ihr Anliegen darin besteht, Bilder zu kennzeichnen oder einfach ein Bild zu beschaffen. Wie sauber und einfach sind Ihre Zielbilder? Bilder, bei denen Beleuchtung und Pose festgelegt sind, lassen sich leichter trainieren als Fotos aus der "realen Welt", wenn die Turnschuhe getragen werden.
Neil Slater
Ja, dies wird in der Produktion verwendet. Ich weiß derzeit nicht, wie viele Klassen es geben wird, da ich nicht weiß, wie viele verschiedene Sneaker-Typen es in der Bildbibliothek gibt. Meine beste Vermutung wäre in der Größenordnung von 50-100, aber je kursiver die Beschreibung des Sneakers ist, desto weniger Klassen (z. B. Air-Jordan vs. Air-Jordan-Ultrafit). Leider ist die Bildbibliothek eine Mischung aus Turnschuhen und Turnschuhen, die als feste Gegenstände mit weißem Hintergrund dargestellt werden.
Feynman27

Antworten:

1

Aus Wie wenige Trainingsbeispiele sind zu wenige beim Training eines neuronalen Netzwerks? im Lebenslauf:

Dies hängt wirklich von Ihrem Datensatz und der Netzwerkarchitektur ab. Eine Faustregel, die ich gelesen habe (2), war, dass einige tausend Proben pro Klasse für das neuronale Netzwerk sehr gut funktionieren. In der Praxis versuchen die Leute zu sehen.


Eine gute Möglichkeit, grob zu beurteilen, inwieweit es vorteilhaft sein könnte, mehr Trainingsmuster zu haben, besteht darin, die Leistung des neuronalen Netzwerks anhand der Größe des Trainingssatzes zu zeichnen, z. B. aus (1):

Geben Sie hier die Bildbeschreibung ein


Franck Dernoncourt
quelle
0

Der beste Ansatz ist, so viele Daten wie möglich zu sammeln. Beginnen Sie dann mit dem Projekt und erstellen Sie ein Datenmodell.

Jetzt können Sie Ihr Modell bewerten, um festzustellen, ob es eine hohe Vorspannung oder eine hohe Varianz aufweist.

Hohe Varianz : In dieser Situation werden Sie feststellen, dass der Kreuzvalidierungsfehler nach der Konvergenz höher ist als der Trainingsfehler. Es gibt eine erhebliche Lücke, wenn Sie dieselbe gegen die Trainingsdatengröße zeichnen.

Hohe Verzerrung : In dieser Situation ist der Kreuzvalidierungsfehler geringfügig höher als der Trainingsfehler, der selbst hoch ist, wenn er gegen die Trainingsdatengröße aufgetragen wird. Durch das Plotten gegen die Trainingsdatengröße können Sie Teilmengen Ihrer Trainingsdaten eingeben und die Teilmengengröße weiter erhöhen und Plotfehler.

Wenn Sie feststellen, dass Ihr Modell eine hohe Varianz (Überanpassung) aufweist, hilft das Hinzufügen weiterer Daten normalerweise im Gegensatz zum Modell mit hoher Abweichung (Unteranpassung), bei dem das Hinzufügen neuer Trainingsdaten nicht hilft.

Außerdem müssen Sie pro Klasse versuchen, die gleiche Anzahl von Bildern zu erhalten, da sonst Datensätze verzerrt werden können (mehr von einer Art).

Wenn Sie TensorFlow verwenden , empfehlen wir Ihnen , mehr über den INCEPTION Image Classifier von GOOGLE zu erfahren . Es ist bereits ein ausgebildeter Klassifikator in der Bilddatenbank von Google und Sie können ihn für Ihre Bilder verwenden. Auf diese Weise sinken die Anforderungen an die Anzahl der Bilder drastisch.

Xeqtr
quelle
Ich habe bereits einen Schnelltest mit TensorFlows Inception-v3 durchgeführt. Das Beste, was es tun kann, ist, mir eine sehr gute Kursklassifizierung zu geben, wie "Laufschuh", aber ich brauche etwas Körnigeres, wie "Air-Jordan-Ultrafit". Aus diesem Grund baue ich ein neues Trainingsset für Inception.
Feynman27