Ich habe ein Faltungsnetzwerk trainiert, um Bilder einer mechanischen Komponente als gut oder fehlerhaft zu klassifizieren. Obwohl die Testgenauigkeit hoch war, stellte ich fest, dass das Modell bei Bildern mit leicht unterschiedlicher Beleuchtung eine schlechte Leistung zeigte.
Die Funktionen, die ich zu erkennen versuche, sind subtil, und die Beleuchtung scheint das Modell dazu zu bringen, viele falsche Negative aufzurufen. Die meisten, wenn nicht alle Trainings- und Testdaten stammten von Bildern, die unter diffusem Licht aufgenommen wurden. Die neuen Bilder, an denen ich das Modell anprobierte, wurden mit fokussierten Lichtern aufgenommen.
In der Hoffnung, dass der Histogrammausgleich ( CLAHE ) helfen würde, habe ich Bilder ausgeglichen , bevor ich sie dem Modell zugeführt habe, und dies sowohl für das Training als auch für Testdaten. Das Problem war dann, dass die Genauigkeit hoch war, aber das Modell schien eine andere Korrelation zwischen den Bildern und Beschriftungen gelernt zu haben. Nach dem Ausgleich fällt alles im Bild auf, die Defekte werden noch subtiler und selbst für das menschliche Auge schwer zu erkennen.
Die Modellvorhersage änderte sich auch dann, wenn dieselbe Komponente mit derselben Beleuchtung, jedoch mit unterschiedlichem Licht aufgenommen wurde. Meine Frage ist also, was kann ich entweder am Datenende oder mit dem Modell tun, damit es gegenüber Änderungen der Beleuchtung (oder der gleichen Art der Beleuchtung, aber Änderungen der Ausrichtung der Beleuchtung) robust wird?
Antworten:
Es wird als Überanpassung bezeichnet. Ihr Modell hat gelernt, Beschriftungen anhand von Funktionen vorherzusagen, die nicht für bestimmte Vorhersagen verantwortlich sind. Wenn sie also nicht angezeigt werden, kann es nicht richtig vorhersagen. Obwohl es verschiedene Möglichkeiten gibt, mit Überanpassung umzugehen (z. B. Dropout), benötigen Sie anscheinend eine Bildvergrößerung. Es ist eine einfache, aber sehr leistungsfähige Möglichkeit, ein robustes neuronales Netzwerk zu trainieren. Für Ihren Fall - simulieren Sie einfach verschiedene Lichtverhältnisse, indem Sie beispielsweise die Pixelwerte für Ihre Eingaben für dieselben Beschriftungen zufällig erhöhen / verringern. Es ist auch üblich, zufälliges Rauschen, zufällige Rotationen, Flip usw. hinzuzufügen.
Weitere Informationen finden Sie in dieser Stackoverflow-Antwort.
Außerdem habe ich kürzlich ein Projekt veröffentlicht, in dem ich verschiedene Augmentationsfunktionen verwendet habe, die Sie vielleicht nützlich finden. Siehe: https://github.com/Naurislv/P12.1-Semantic-Segmentation/blob/master/augmentation.py
quelle