Verwenden Sie einen vorab trainierten CNN-Klassifikator und wenden Sie ihn auf einen anderen Bilddatensatz an

11

Wie würden Sie ein Pre-Training optimieren , um es auf ein separates Problem anzuwenden? Würden Sie dem vorab trainierten Modell einfach weitere Ebenen hinzufügen und es an Ihrem Datensatz testen? neural network

Wenn die Aufgabe beispielsweise darin bestand, ein CNN zum Klassifizieren von Hintergrundgruppen zu verwenden , würde es sicher nicht funktionieren, ein vorab geschultes Netzwerk, das auf Bilder von Katzen und Hunden trainiert ist , direkt zu klassifizieren , obwohl beide Bildklassifizierer sind.

Sid
quelle

Antworten:

15

Lesen - Wenn Transferlernen nachteilig ist? (Dank an @media) (sieht für mich sehr informativ aus, also hier hinzugefügt, um diese Antwort vollständig zu machen ...)

Antwort auf Ihre Frage .. (beginnt hier)

Transferlernen ist das, wonach Sie suchen.

  • Wenn wir beispielsweise eine Deep-Learning-Aufgabe erhalten, bei der ein Convolutional Neural Network (Covnet) auf einem Datensatz von Bildern trainiert wird, besteht unser erster Instinkt darin, das Netzwerk von Grund auf neu zu trainieren. In der Praxis haben tiefe neuronale Netze wie Covnet jedoch eine große Anzahl von Parametern, oft im Bereich von Millionen. Das Training eines Covnet mit einem kleinen Datensatz (einer, der kleiner als die Anzahl der Parameter ist) wirkt sich stark auf die Verallgemeinerungsfähigkeit des Covnet aus und führt häufig zu einer Überanpassung.

  • Daher würde man in der Praxis häufiger vorhandene Netzwerke, die auf einem großen Datensatz wie dem ImageNet (1,2 Millionen beschriftete Bilder) trainiert werden, optimieren, indem man es auf dem kleineren Datensatz, den wir haben, weiter trainiert (dh die Rückübertragung ausführt). Sofern sich unser Datensatz im Kontext nicht drastisch vom ursprünglichen Datensatz (z. B. ImageNet) unterscheidet, verfügt das vorab trainierte Modell bereits über Funktionen, die für unser eigenes Klassifizierungsproblem relevant sind.

Wann müssen Modelle feinabgestimmt werden?

  • Wenn sich unser Datensatz im Kontext nicht drastisch von dem Datensatz unterscheidet, auf dem das vorab trainierte Modell trainiert wird, sollten wir im Allgemeinen eine Feinabstimmung vornehmen. Ein vorab trainiertes Netzwerk in einem großen und vielfältigen Datensatz wie dem ImageNet erfasst universelle Funktionen wie Kurven und Kanten in seinen frühen Ebenen, die für die meisten Klassifizierungsprobleme relevant und nützlich sind.

  • Wenn unser Datensatz eine sehr spezifische Domäne darstellt, z. B. medizinische Bilder oder chinesische handgeschriebene Zeichen, und keine vorab trainierten Netzwerke in dieser Domäne gefunden werden können, sollten wir das Netzwerk von Grund auf neu trainieren.

  • Ein weiteres Problem besteht darin, dass bei einer kleinen Größe unseres Datensatzes die Feinabstimmung des vorab trainierten Netzwerks auf einen kleinen Datensatz zu einer Überanpassung führen kann, insbesondere wenn die letzten Schichten des Netzwerks vollständig verbundene Schichten sind, wie im Fall des VGG-Netzwerks. Wenn wir meiner Erfahrung nach einige tausend Rohproben mit den gängigen Strategien zur Datenerweiterung (Übersetzung, Rotation, Spiegeln usw.) haben, erzielen wir mit der Feinabstimmung normalerweise ein besseres Ergebnis.

  • Wenn unser Datensatz wirklich klein ist, beispielsweise weniger als tausend Stichproben, besteht ein besserer Ansatz darin, die Ausgabe der Zwischenschicht vor den vollständig verbundenen Schichten als Merkmale (Engpassmerkmale) zu verwenden und einen linearen Klassifikator (z. B. SVM) darauf zu trainieren es. SVM ist besonders gut darin, Entscheidungsgrenzen für einen kleinen Datensatz zu zeichnen.

Feinabstimmungstechniken

Im Folgenden finden Sie einige allgemeine Richtlinien für die Feinabstimmung der Implementierung:

  • Es ist üblich, die letzte Schicht (Softmax-Schicht) des vorab trainierten Netzwerks abzuschneiden und durch unsere neue Softmax-Schicht zu ersetzen, die für unser eigenes Problem relevant ist. Ein vorab trainiertes Netzwerk in ImageNet verfügt beispielsweise über eine Softmax-Schicht mit 1000 Kategorien.

  • Wenn unsere Aufgabe eine Klassifizierung in 10 Kategorien ist, besteht die neue Softmax-Schicht des Netzwerks aus 10 Kategorien anstelle von 1000 Kategorien. Anschließend führen wir die Weitergabe im Netzwerk zurück, um die vorab trainierten Gewichte zu optimieren. Stellen Sie sicher, dass eine Kreuzvalidierung durchgeführt wird, damit das Netzwerk gut verallgemeinern kann.

  • Verwenden Sie eine geringere Lernrate, um das Netzwerk zu trainieren. Da wir erwarten, dass die vorab trainierten Gewichte im Vergleich zu zufällig initialisierten Gewichten bereits recht gut sind, möchten wir sie nicht zu schnell und zu stark verzerren. Es ist üblich, die anfängliche Lernrate zehnmal kleiner zu machen als die für das Kratztraining verwendete.

  • Es ist auch üblich, die Gewichte der ersten Schichten des vorab trainierten Netzwerks einzufrieren. Dies liegt daran, dass die ersten Ebenen universelle Merkmale wie Kurven und Kanten erfassen, die auch für unser neues Problem relevant sind. Wir wollen diese Gewichte intakt halten. Stattdessen wird sich das Netzwerk darauf konzentrieren, in den folgenden Ebenen datensatzspezifische Funktionen zu lernen.

Sie müssen sie in diesem Fall erneut trainieren, als ob ich mich nicht irre, dann sind die Hintergrundbilder keine Klasse von Image-Net-Modellen. Es wird nicht schwierig sein, ein Modell von Grund auf neu zu erstellen, um dies zu tun (vorzugsweise ein flacheres) auch hier machen ..)

Quelle meiner Antwort ist die Übersetzung aus diesen erstaunlichen Kursen.

Für weitere Lesungen,

Aditya
quelle
Wenn Sie nur Features extrahieren, wie bei der Feinabstimmung einer der Ebenen. Gibt es einen Grund, die letzte dichte Schicht durch einen linearen Klassifikator zu ersetzen? Warum nicht als neue dichte Schicht behalten und einfach neu trainieren, während alle unteren Schichten gefroren bleiben? Liegt es nur daran, dass das Training eines linearen Klassifikators schneller ist als das Training einer neuen dichten Schicht?
CMCDragonkai
1
Für die Merkmalsextraktion müssen keine Ebenen angehängt werden, aber nur wenige Ebenen wie Pooling und Formgrößenänderung werden angehängt, um den Abmessungen zu entsprechen und möglicherweise die Zwischenwerte zu reduzieren. Sicherlich ist es schneller, ein lineares Modell als ein NN zu trainieren, aber Sie können beides ausprobieren und herausfinden, was für Ihren Anwendungsfall am besten funktioniert. Das Auftauen der letzten dichten Schicht und die Umschulung mit wenigen zusätzlichen Schichten, um Ihrem Problem zu entsprechen, ist eine gängige Praxis
Aditya