Operatoren |
Dieses Kapitel beschreibt Operatoren für die Texturinspektion.
Mit der Texturinspektion können mit wenigen Parametereinstellungen texturierte Oberflächen auf Fehler überprüft werden. Der Algorithmus benötigt ein Training mit Bildern von fehlerfreier Textur. Bei dem Training werden Texturmerkmale aus den Trainingsbildern extrahiert und dazu genutzt, auf der Basis eines Gaussian Mixture Model (GMM) Klassifikators ein Texturinspektionsmodell zu trainieren. Nach dem erfolgreichen Training können Bilder der gleichen Textur mit dem Texturinspektionsmodell verglichen werden und somit potentielle Fehler identifiziert werden. Texturinspektion arbeitet auf einer Bildpyramide, so dass unterschiedliche Frequenzbereiche der Textur untersucht werden.
Im Folgenden werden die einzelnen Schritte, die zur Texturinspektion benötigt werden, kurz beschrieben.
Zuerst wird ein Texturinspektionsmodell mit
angelegt oder mit
eingelesen.
Der Operator
fügt dem Texturinspektionsmodell neue Trainingsbilder hinzu.
Die mit add_texture_inspection_model_image zugefügten Bilder können mit einem Aufruf von get_texture_inspection_model_image wieder abgefragt werden. Falls alle oder ein Teil der Bilder nicht mehr zur Texturinspektion verwendet werden sollen, so können diese Bilder mit Hilfe des Operators remove_texture_inspection_model_image aus dem Modell entfernt werden.
Das Texturinspektionsmodell wird mit
trainiert.
Während des Trainings wird eine Bildpyramide erzeugt. Für jede Pyramidenstufe wird ein Gaussian Mixture Model (GMM) trainiert und eine Fehlerschwelle ('novelty_threshold' ) bestimmt. Diese Schwelle ermöglicht beim Anwenden der Texturinspektion die Klassifikation von jedem Pixel in fehlerhafte und fehlerfreie Textur. Nach dem Training können die Fehlerschwellen mit get_texture_inspection_model_param abgefragt werden.
Verschiedene Parameter beeinflussen das Training. Sie können mit
gesetzt werden.
Das folgende Vorgehen für das Training wird empfohlen:
Setzen von initialen Parametern, wenn nötig:
'patch_normalization' : Wird dieser Parameter auf 'weber' gesetzt, werden die Texturmerkmale normalisiert und das Texturinspektionsmodell wird robust gegen Beleuchtungsänderungen. Hier ist zu beachten, dass eine Normalisierung nicht immer gewünscht ist, z.B. wenn die Helligkeit ein wichtiges Merkmal bei der Unterscheidung zwischen fehlerhafter und fehlerfreier Textur darstellt. In diesem Fall ist eine kontrollierte Beleuchtung für eine erfolgreiche Klassifizierung zwingend notwendig.
'patch_rotational_robustness' : Wird dieser Parameter auf 'true' gesetzt, werden die Texturmerkmale so sortiert, dass das Texturinspektionsmodell robust gegen Rotationsänderungen wird. Dies kann hilfreich sein, wenn es schwierig ist, alle möglichen Orientierungen der Textur durch Trainingsbilder abzudecken.
Trainieren des Texturinspektionsmodells (mit den Default-Parametern): Das initiale Training des Texturinspektionsmodells kann viel Zeit in Anspruch nehmen. Die benötigte Zeit ist abhängig von der Anzahl der Trainingsbilder und deren Auflösung. Mögliche Strategien zum Verringern der Trainingszeit:
Zoomen der Bilder: Häufig funktioniert die Texturinspektion sogar besser mit niedrig aufgelösten Bildern. Ist bekannt, dass nicht die volle Auflösung der Bilder benötigt wird, kann das Zoomen der Bilder einen signifikanten Zeitvorteil bringen. Zoomt man ein Bild z.B. mit Faktor 2, kann dies die Trainingszeit um Faktor 4 beschleunigen.
Beschleunigen des Trainings: Ein weiterer, aber auch riskanterer Ansatz ist es, den Schwellwert, der bestimmt, wann die Optimierung des Klassifikators beendet wird, mit dem Parameter 'gmm_em_threshold' z.B. von 0.001 auf 0.1 zu erhöhen. Dies führt zu kürzeren Trainingszeiten aber auch zu einem möglicherweise weniger genauen Texturinspektionsmodell. Wird dieses Vorgehen gewählt, ist es strengstens empfohlen, den Schwellwert nach dem Anpassen der meisten Parameter wieder zu reduzieren.
Prüfen des Trainingsergebnisses: Mit einem Satz von Bildern mit fehlerhafter Textur kann das Ergebnis einer Klassifikation mit dem trainierten Texturinspektionsmodell geprüft werden. Dies wird näher im Abschnitt 'Anwenden des Texturinspektionsmodells' beschrieben. Ist das Ergebnis nicht zufriedenstellend, können weitere Parameter angepasst werden. Die wichtigsten Parameter sind:
'num_levels' oder 'levels' : Die Anzahl der benutzten Pyramidenstufen bzw. die expliziten genutzten Pyramidenstufen. Höhere Pyramidenstufen funktionieren gut für gröbere Texturmerkmale. Ist die Textur in den Bildern sehr grob, werden die niedrigeren Pyramidenstufen eventuell gar nicht für eine erfolgreiche Inspektion benötigt. Um deutlich an Laufzeit zu sparen, können die entsprechenden Skalen durch das explizite Setzen der Skalen mittels 'levels' ausgeschlossen werden, Wird zum Beispiel 'levels' auf [1,3] gesetzt, werden im Training und zum Klassifizieren nur die erste und die dritte Level verwendet.
'sensitivity' : Dieser Parameter kontrolliert, wie streng die Fehlerschwellen ('novelty_threshold' ) gesetzt werden. Somit kann die Empfindlichkeit gegenüber Texturfehlern eingestellt werden. Generell führen positive Werte zu einer höheren Empfindlichkeit des Verfahrens und dadurch zu mehr Texturfehlern. Umgekehrt führen negative Werte zu einer niedrigeren Empfindlichkeit des Verfahrens und dadurch zu weniger Texturfehlern.
'novelty_threshold' : Dieser Parameter setzt die Fehlerschwellen manuell. Dies kann zur Feinabstimmung genutzt werden, sollten die Ergebnisse der automatischen Schätzung nicht optimal sein.
Wiederholen des Trainings, wenn nötig: Wurden Parameter angepasst, muss das Texturinspektionsmodell für gewöhnlich neu trainiert werden.
Nach dem erfolgreichen Training kann das Texturinspektionsmodell dazu verwendet werden, texturierte Oberflächen zu klassifizieren. Jedes Testbild kann mit
mit dem Texturinspektionsmodell verglichen werden.
Für jedes Testbild gibt der Operator eine Fehlerregion ('novelty_region' ) zurück, die anzeigt, wo das Bild größere Abweichungen von den trainierten Trainingsdaten aufweist. Die Fehlerregion wird durch die Kombination der Fehlerregionen der unterschiedlichen Bildpyramidenstufen erzeugt. Dabei werden die Fehlerregionen von benachbarten Skalen miteinander geschnitten. Dadurch wird die Robustheit gegenüber Rauschen erhöht. Die so entstandenen Schnittflächen werden in der 'novelty_region' vereinigt. Falls es keine benachbarte Level gibt, wird die Fehlerregion der entsprechenden Level direkt zu der 'novelty_region' hinzugefügt. Setzt man zum Beispiel 'num_levels' auf 1, so gibt es keine benachbarten Skalen und die Fehlerregion vom ersten Level wird in 'novelty_region' zurückgegeben.
Zum Debuggen kann der Parameter 'gen_result_handle' mit set_texture_inspection_model_param auf 'true' gesetzt werden. Auf diese Weise werden die Novelty-Score-Bilder und die Fehlerregionen der einzelnen Bildpyramidenstufen in einem Ergebnis-Handle gespeichert, aus welchem sie wieder mit
ausgelesen werden können. Generell beschreiben die Novelty-Score-Bilder wie gut jedes Pixel zu dem Texturinspektionsmodell passt, welches im Trainingsprozess entstanden ist. Die Fehlerregionen der einzelnen Pyramidenstufen werden dann durch das Anwenden der Fehlerschwelle ('novelty_threshold' ) auf die jeweiligen Novelty-Score-Bilder berechnet.
Das Inspizieren der Novelty-Score-Bilder und der Fehlerregionen kann Aufschluss darüber geben, welche Art von Fehlern auf welchen Pyramidenstufen gefunden werden können. Darauf basierend kann entschieden werden, ob Parameter für das Training und die Klassifizierung angepasst werden sollten, z.B., ob es sinnvoll ist, explizit nur bestimmte Pyramidenstufen durch das Setzen des Parameters 'levels' auszuwählen.
(1) | (2) |
Die Funktionalität der Texturinspektion wird durch verschiedene Parameter beeinflusst. Die Parameterwerte können mit get_texture_inspection_model_param abgefragt und mit set_texture_inspection_model_param geändert werden.
Ein Texturinspektionsmodell kann mit dem Operator write_texture_inspection_model abgespeichert werden. Dabei wird nur das Texturinspektionsmodell und nicht dem Modell hinzugefügte Bilder gespeichert. Die hinzugefügten Bilder können mit get_texture_inspection_model_image abgefragt und mit einem Aufruf von write_object separat abgespeichert werden.
Um den Speicherbedarf des Texturinspektionsmodells zu verringern, können dem Model bereits hinzugefügte Bilder wieder herausgelöscht werden. Dies erfolgt durch den Operator remove_texture_inspection_model_image.
Außerdem kann das Modell mit serialize_texture_inspection_model und deserialize_texture_inspection_model serialisiert bzw. deserialisiert werden.
Im Folgenden werden die wichtigsten Begriffe, die im Umfeld der Texturinspektion verwendet werden, beschrieben:
Bilder, die für das Training verwendet werden.
Bilder, die mit dem trainierten Texturinspektionsmodell verglichen werden.
Menge von benachbarten Pixeln.
Grauwerte der Pixel innerhalb eines Patches.
Texturmerkmale, die in einem Trainingsprozess genutzt werden.
Im Testprozess werden die Texturmerkmale der Testbilder mit dem Texturinspektionsmodell verglichen und ihr Neuheitswert (Novelty Score) wird berechnet. Je höher dieser Wert ist, desto wahrscheinlicher ist es, dass das Texturmerkmal nicht zu dem Texturinspektionsmodell passt.
Die Fehlerschwelle (Novelty Threshold) wird im Trainingsprozess geschätzt. Texturmerkmale mit einem Neuheitswert unter der Fehlerschwelle passen zum Texturinspektionsmodell, Texturmerkmale mit einem höheren Neuheitswert passen nicht.
Operatoren |