Semantische Segmentierung

Liste der Abschnitte ↓

Dieses Kapitel beschreibt, wie Deep Learning-basierte Semantische Segmentierung in der Trainings- und Inferenzphase genutzt wird.

In der Semantischen Segmentierung ordnet ein Deep Learning (DL) Netzwerk jedem Pixel des Eingabebildes eine Klasse zu.

image/svg+xml apple lemon orange background
Ein mögliches Beispiel der Semantischen Segmentierung: Jedem Pixel des Eingabebildes wird eine Klasse zugeordnet, dabei sind weder die drei Instanzen der Klasse 'apple' noch die zwei Instanzen der Klasse 'orange' unterschiedene Objekte.

Das Resultat der Semantischen Segmentierung ist ein Bild, in welchem die Pixelwerte für die zugeordnete Klasse des entsprechenden Pixels auf dem Eingabebild stehen. Somit hat das Ausgabebild in HALCON die gleiche Größe wie das Eingabebild. Im Allgemeinen sind im Netzwerk die Merkmalskarten, die komplexere Merkmale verkörpern, kleiner als das Eingabebild (siehe den Abschnitt „Das Netzwerk und der Trainingsprozess“ im Kapitel Deep Learning). Damit das Ausgabebild die gleiche Größe wie das Eingabebild hat, werden in HALCON Netzwerke mit den folgenden beiden Komponenten verwendet: Einem Encoder und einem Decoder. Der Encoder bestimmt die Merkmale des Eingabebildes, wie dies z.B. in der DL-basierten Klassifikation getan wird. Da diese Information in einem komprimierten Format 'kodiert' ist, braucht es einen Decoder, welcher das gewünschte Ergebnis rekonstruiert. Bei der Semantischen Segmentierung ist dies die Zuordnung jedes Pixels zu einer Klasse. Da das Netzwerk die einzelnen Pixel klassifiziert, werden sich überlappende Instanzen der gleichen Klasse nicht als eigenständig unterschieden.

In HALCON ist die Semantische Segmentierung mittels DL als Teil des allgemeinen DL Modells implementiert. Für weitere Informationen zum DL Modell wird auf das Kapitel Deep Learning / Modell verwiesen.

Die folgenden Abschnitte behandeln den generellen Ablauf der Semantischen Segmentierung, Informationen zu den involvierten Daten und Parametern, sowie Erklärungen zu den Evaluierungsmaßen.

Genereller Ablauf

Dieser Abschnitt beschreibt den generellen Ablauf einer Semantischen Segmentierung mittels Deep Learning. Er ist unterteilt in die vier Bereiche Vorverarbeitung des Datensatzes, Trainieren des Modells, Evaluierung des trainierten Modells und Inferenz auf neuen Bildern. Dabei wird angenommen, dass der Datensatz bereits gelabelt ist, siehe den Absatz „Daten“ unten. Die HDevelop Beispiels-Reihe segment_pill_defects_deep_learning zeigt eine mögliche Anwendung unterteilt in die einzelnen Bereiche.

Vorverarbeitung des Datensatzes

Dieser Abschnitt behandelt die notwendigen Anpassungen des Datensatzes an die Anforderungen eines Modells der Semantischen Segmentierung. Die einzelnen Schritte werden im HDevelop Beispiel segment_pill_defects_deep_learning_1_preprocess.hdev dargestellt.

  1. Die Information, was auf welchem Bild des Trainings-Datensatzes gefunden werden soll, muss eingelesen und konvertiert werden. Dazu kann die Prozedur

    • read_dl_dataset_segmentation

    verwendet werden. Dabei wird ein Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset erstellt, welches als Datenbank dient und alle notwendigen Informationen über die Daten abspeichert. Für mehr Information zu den Daten und wie sie übergeben werden, wird auf den unteren Absatz „Daten“ und das Kapitel Deep Learning / Modell verwiesen.

  2. Die Daten von DLDatasetDLDatasetDLDatasetDLDatasetDLDataset sollen in drei getrennten Datensätze geteilt werden. Dazu kann die Prozedur

    • split_dl_dataset

    verwendet werden. Die resultierende Aufteilung wird für jeden Sample Eintrag von DLDatasetDLDatasetDLDatasetDLDatasetDLDataset jeweils über den Schlüssel splitsplitsplitsplitsplit gespeichert.

  3. Der Datensatz kann nun vorverarbeitet werden. Dazu kann die Prozedur

    • preprocess_dl_dataset

    verwendet werden. Für die Implementierung einer selbst erstellten Vorverarbeitung kann man sich an dieser Prozedur orientieren.

    Um diese Prozedur zu verwenden, müssen die Vorverarbeitungsparameter wie z.B. die Bildgröße festgelegt werden. Für letztere sollte die kleinstmögliche Bildgröße gewählt werden, mit der die einzelnen Regionen noch gut erkennbar sind. Die Parameter und ihre Werte sind im Dictionary DLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParam zu speichern, wofür die Prozedur

    • create_dl_preprocess_param

    verwendet werden kann. Es wird empfohlen, dieses Dictionary DLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParam abzuspeichern, um während der späteren Inferenz-Phase Zugang zu den Werten zu haben.

    Während der Vorverarbeitung werden von der Prozedur preprocess_dl_dataset auch die Bilder weight_imageweight_imageweight_imageweight_imageweightImage für den Trainings-Datensatz erstellt. Diese ordnen jeder Klasse das Gewicht ('class weights') zu, welche ihre Pixel während des Trainings erhalten (siehe den unteren Abschnitt „Modellparameter und Hyperparameter“).

Trainieren des Modells

Dieser Abschnitt behandelt das Trainieren des DL Modells für Semantische Segmentierung. Die einzelnen Schritte werden im HDevelop Beispiel segment_pill_defects_deep_learning_2_train.hdev dargestellt.

  1. Einlesen eines Modells mit dem Operator

  2. Die Modellparameter müssen mit dem Operator

    gesetzt werden. Solche Parameter sind z.B. image_dimensionsimage_dimensionsimage_dimensionsimage_dimensionsimageDimensions und class_idsclass_idsclass_idsclass_idsclassIds, siehe die Dokumentation von get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam.

    Die aktuellen Werte können jederzeit über den Operator

    abgefragt werden.

  3. Setzen der Trainingsparameter und Abspeichern derselben im Dictionary 'TrainParam'"TrainParam""TrainParam""TrainParam""TrainParam". Diese Parameter beinhalten:

    • die Hyperparameter. Für eine Übersicht wird auf den unteren Abschnitt „Modellparameter und Hyperparameter“ sowie das Kapitel Deep Learning verwiesen.

    • Parameter zur eventuellen Datenanreicherung (optional).

    • Parameter zur Evaluierung während des Trainings.

    • Parameter zur Visualisierung von Trainingsergebnissen.

    • Parameter zur Serialisierung.

    Für dies kann die Prozedur

    • create_dl_train_param

    verwendet werden.

  4. Trainieren des Modells. Dafür kann die Prozedur

    • train_dl_model

    verwendet werden. Diese Prozedur benötigt:

    • das Handle des Modells, DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle

    • das Dictionary mit den Informationen über den Datensatz, DLDatasetDLDatasetDLDatasetDLDatasetDLDataset

    • das Dictionary mit den Trainingsparametern, 'TrainingParam'"TrainingParam""TrainingParam""TrainingParam""TrainingParam"

    • die Angabe, über wie viele Epochen trainiert werden soll.

    Wird die Prozedur train_dl_model verwendet, werden die Gesamt-Zielfunktion sowie optionale Evaluierungsmaße visualisiert.

Evaluierung des trainierten Modells

Dieser Abschnitt behandelt das Evaluieren eines DL Modells für Semantische Segmentierung. Die einzelnen Schritte werden im HDevelop Beispiel segment_pill_defects_deep_learning_3_evaluate.hdev dargestellt.

  1. Setzen der Modellparameter, welche die Evaluierung beeinflussen, wie z.B. 'batch_size'"batch_size""batch_size""batch_size""batch_size", über den Operator

  2. Die Evaluierung kann bequem mit der Prozedur

    • evaluate_dl_model

    durchgeführt werden.

  3. Das Dictionary EvaluationResultsEvaluationResultsEvaluationResultsEvaluationResultsevaluationResults enthält die angefragten Evaluierungsmaße. Die Ergebnisse der Evaluierung können mit der Prozedur

    • dev_display_segmentation_evaluation

    visualisiert werden.

Inferenz auf neuen Bildern

Dieser Abschnitt behandelt die Inferenz auf neuen Bildern durch ein DL Modell für Semantische Segmentierung. Die einzelnen Schritte werden im HDevelop Beispiel segment_pill_defects_deep_learning_4_infer.hdev dargestellt.

  1. Setzen der Parameter, wie z.B. 'batch_size'"batch_size""batch_size""batch_size""batch_size" über den Operator

  2. Generieren des Dictionaries DLSampleDLSampleDLSampleDLSampleDLSample für jedes Bild. Dafür kann die Prozedur

    • gen_dl_samples_from_images

    verwendet werden.

  3. Jedes Bild muss auf dieselbe Art und Weise wie für die Trainingsbilder vorverarbeitet werden. Es wird empfohlen, dafür die Prozedur

    • preprocess_dl_samples

    zu verwenden. Wurde während der Vorverarbeitung das Dictionary DLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParamDLPreprocessParam gespeichert, kann es direkt als Eingabe verwendet werden, um die Parameterwerte festzulegen.

  4. Anwenden des Modells über den Operator

  5. Die Resultate können aus dem Dictionary 'DLResultBatch'"DLResultBatch""DLResultBatch""DLResultBatch""DLResultBatch" abgerufen werden. Die Regionen der einzelnen Klassen kann man z.B. über den Operator thresholdthresholdThresholdThresholdThreshold selektieren.

Daten

Es wird zwischen den Daten für Training und Evaluierung versus Daten für Inferenz unterschieden. Letztere bestehen ausschließlich aus Bildern. Für Erstere wird jedoch die Information benötigt, zu welcher Klasse jeder einzelne Pixel gehört (über segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage, siehe die Erklärungen weiter unten).

Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten über Dictionaries. Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary DLSampleDLSampleDLSampleDLSampleDLSample und gibt die Ausgabe über das Dictionary DLResultDLResultDLResultDLResultDLResult, bzw. DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult zurück. Für weitere Informationen zur Datenhandhabung wird auf das Kapitel Deep Learning / Modell verwiesen.

Daten für das Training und die Evaluierung

Die Trainingsdaten werden benötigt, um das Netzwerk für Ihre spezifische Aufgabe zu trainieren. Der Datensatz besteht aus Bildern und den dazugehörigen Informationen. Damit das Modell diese verarbeiten kann, müssen sie bestimmte Anforderungen erfüllen. Informationen zu den Bildanforderungen finden sich im unteren Abschnitt „Bilder“. Die Information über die Bilder und ihre Ground Truth Annotationen wird über das Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset und für jedes Sample das entsprechende Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage gegeben, welches für jedes Pixel die Klasse definiert.

Klassen

Die verschiedenen Klassen bilden die vom Netzwerk unterschiedene Sets oder die unterschiedenen Kategorien. Diese Klassen werden im Dictionary DLDatasetDLDatasetDLDatasetDLDatasetDLDataset gesetzt und dem Modell über den Operator set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam gegeben.

Bei der Semantischen Segmentierung gibt es zwei Besonderheiten: Die Hintergrund-Klasse 'background' und Klassen, die ignoriert werden sollen und deshalb auf 'ignore' gesetzt werden:

  • 'background' Klasse: Das Netzwerk behandelt die Hintergrund-Klasse 'background' wie jede andere Klasse auch. Ebenso ist es nicht notwendig, eine Hintergrund-Klasse zu haben. Aber falls im Datensatz verschiedene Klassen vorkommen, deren Ergebnis nicht von Interesse ist, die aber trotzdem vom Netzwerk gelernt werden sollen, können diese alle als Hintergrund deklariert werden. Als Resultat davon wird die Hintergrund-Klasse diverser. Für weitere Informationen wird auf die Prozedur preprocess_dl_samples verwiesen.

  • 'ignore' Klassen: Eine oder mehrere Klassen können als 'ignore' deklariert werden. Pixel, die einer solchen Klasse zugehören, werden bei der Berechnung der Zielfunktion sowie allen Evaluierungsmaßen ignoriert. Für weitere Informationen zur Zielfunktion wird auf den Abschnitt „Das Netzwerk und der Trainingsprozess“ im Kapitel Deep Learning verwiesen. Das Netzwerk ordnet kein Pixel einer als 'ignore' deklarierte Klasse zu. Die Pixel die mit einer solchen 'ignore'-Klasse gelabelt wurden, werden vom Netzwerk wie alle anderen Pixel auch einer nicht als 'ignore' deklarierten Klasse zugeordnet. Im unten folgenden Beispiel bedeutet dies, dass das Netzwerk auch die Pixel der Klasse 'Rand' klassifiziert, aber es wird kein Pixel des Eingabebildes der Klasse 'Rand' zuordnen. Eine Klasse kann über den Parameter 'ignore_class_ids'"ignore_class_ids""ignore_class_ids""ignore_class_ids""ignore_class_ids" im Operator set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam als 'ignore' deklariert werden.

DLDatasetDLDatasetDLDatasetDLDatasetDLDataset

Dieses Dictionary dient als Datenbank. Dies bedeutet, dass darin alle für das Netzwerk notwendigen Informationen über den Datensatz gespeichert werden, z.B. den Namen und Pfad zu den Bildern, die Klassen, etc. Für Informationen zum Konzept und den einzelnen Einträgen wird auf das Kapitel Deep Learning / Modell verwiesen. Nur auf die Semantische Segmentierung anwendbare Schlüssel betreffen die Bilder segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage (siehe den unteren Eintrag). Über die Schlüssel segmentation_dirsegmentation_dirsegmentation_dirsegmentation_dirsegmentationDir und segmentation_file_namesegmentation_file_namesegmentation_file_namesegmentation_file_namesegmentationFileName werden die Informationen zur Verfügung gestellt, wie die Bilder heißen und wo sie gespeichert sind.

segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage

Damit das Netzwerk lernen kann, wie die Angehörigen der verschiedenen Klassen aussehen, muss für jedes Pixel jedes Bildes des Trainings-Datensatzes mitgeteilt werden, zu welcher Klasse er gehört. Um dies zu tun wird für jedes Pixel eines Eingabebildes die Klasse im Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage als Pixelwert gespeichert. Diese Annotationen sind die Ground Truth Annotationen.

image/svg+xml image/svg+xml
(1) (2)
Schema des Bildes segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage. Zur besseren Darstellung werden Grauwerte für die verschiedenen Nummern verwendet. (1) Eingabebild. (2) Das entsprechende Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage, welches die Klassenannotationen zur Verfügung stellt, 0: Hintergrund (weiß), 1: Orange, 2: Zitrone, 3: Apfel und 4: Rand (schwarz) als separate Klasse, damit diese als 'ignore' deklariert werden kann.

Es sollten genügend Trainingsdaten vorliegen, um diese in die drei Untermengen aufzuteilen, welche für das Training, die Evaluierung und das Testen des Netzwerks verwendet werden. Diese Untermengen sind idealerweise unabhängig und gleich verteilt, siehe den Abschnitt „Daten“ im Kapitel Deep Learning. Zur Aufteilung kann die Prozedur split_dl_data_set verwendet werden.

Bilder

Unabhängig von der Anwendung stellt das Netzwerk Anforderungen an die Bilder wie z.B. die Bilddimensionen. Die spezifischen Werte hängen vom Netzwerk selbst ab, für die spezifischen Werte der verschiedenen Netzwerke siehe die Dokumentation von read_dl_modelread_dl_modelReadDlModelReadDlModelReadDlModel. Für ein eingelesenes Netzwerk können die Werte mit get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam abgefragt werden. Um diese Anforderungen zu erfüllen, müssen die Bilder eventuell vorverarbeitet werden. Die Standard-Vorverarbeitung für das ganze Sample und damit auch für das Bild kann mit Hilfe der Prozedur preprocess_dl_samples durchgeführt werden. Für eine selbst erstellte Vorverarbeitung liefert diese Prozedur eine Anleitung für die Implementierung.

Netzwerk Ausgabe

Als Trainingsausgabe gibt das Modell ein Dictionary DLTrainResultDLTrainResultDLTrainResultDLTrainResultDLTrainResult mit dem aktuellen Wert der Gesamt-Zielfunktion sowie den Werten aller weiteren im Modell enthaltenen Zielfunktionen.

Als Inferenz- und Evaluations-Ausgabe gibt das Netzwerk für jedes Bild ein Dictionary DLResultDLResultDLResultDLResultDLResult zurück. Im Falle der Semantischen Segmentierung beinhaltet dieses Dictionary für jedes Eingabebild das Handle der folgenden beiden Bildern:

image/svg+xml image/svg+xml
(1) (2)
Schema zu verschiedenen Daten-Bilder. Zur besseren Darstellung werden Grauwerte für die verschiedenen Nummern und Zahlen verwendet. (1) segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage: Auch die Pixel von Klassen die als 'ignore' deklariert wurden, werden klassifiziert (siehe auch die obere Darstellung). (2) segmentation_confidencesegmentation_confidencesegmentation_confidencesegmentation_confidencesegmentationConfidence.

Modellparameter und Hyperparameter

Nebst den allgemeinen DL Hyperparametern aus dem Kapitel Deep Learning gibt es für die Semantische Segmentierung noch einen weiteren Hyperparameter:

Für DL Modelle der Semantischen Segmentierung werden die Modellparameter und Hyperparameter (mit Ausnahme der 'class weights') über den Operator set_dl_model_paramset_dl_model_paramSetDlModelParamSetDlModelParamSetDlModelParam gesetzt. Für Informationen zu den Modellparametern wird auf die Dokumentation von get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam verwiesen.

Es gilt zu beachten, dass aufgrund hohen Speicherbedarfs normalerweise für das Training nur kleine Batchgrößen verwendet werden können. Deshalb ist das Training eher langsam und es wird empfohlen, ein größeres Momentum als z.B. bei der Klassifikation zu verwenden. Das HDevelop Beispiel segment_pill_defects_deep_learning_2_train.hdev liefert gute initiale Parameterwerte für das Training eines Modells der Semantischen Segmentierung in HALCON.

'class weights'

Mit dem Hyperparameter 'class_weights' kann jeder Klasse ein Wert zugeordnet werden, mit welchem die jeweiligen Pixel während des Trainings gewichtet werden. Erhalten die verschiedenen Klassen unterschiedliche Gewichte, so wird das Netzwerk forciert, den Klassen beim Lernen eine unterschiedliche Bedeutung zu geben. Dies ist nützlich, wenn eine Klasse die Bildanteile dominiert, wie z.B. bei der Defekterkennung, wo die Defekte nur einen kleinen Teil des Bildes einnehmen. In solchen Fällen würde ein Netzwerk einen guten Wert für die Zielfunktion erzielen, indem es das gesamte Bild als Hintergrund (und somit als 'nicht defekt') klassifiziert. Den Klassen verschiedene Gewichte zuzuordnen hilft, die Verteilung besser auszubalancieren. Kurz, die Zielfunktion wird darauf fokussiert, insbesondere die Pixel zu lernen, die von Ihnen als wichtig bestimmt wurden.

Das Netzwerk erhält diese Gewichte über das Bild weight_imageweight_imageweight_imageweight_imageweightImage, welches für jedes Trainingsbild erstellt wird. In weight_imageweight_imageweight_imageweight_imageweightImage entspricht jeder Pixelwert dem Gewicht, welches das entsprechende Pixel des Eingabebildes während des Trainings erhält. Ein solches Bild weight_imageweight_imageweight_imageweight_imageweightImage kann durch Verwendung der folgenden beiden Prozeduren erstellt werden:

Dies muss vor dem Training getan werden. Normalerweise werden die Bilder während der Vorverarbeitung generiert und dies ist Teil der Prozedur preprocess_dl_samples. Es gilt zu beachten, dass dieser Hyperparameter in den verschiedenen Prozeduren class_weightsclass_weightsclass_weightsclass_weightsclassWeights oder ClassWeightsClassWeightsClassWeightsClassWeightsclassWeights genannt wird. Eine Darstellung, wie solche Bilder mit unterschiedlichen Gewichten aussehen können, ist in der Abbildung weiter unten gegeben.

Es gilt zu beachten, wird einem bestimmten Part eines Bildes das Gewicht von 0.0 gegeben, tragen diese Pixel nicht zur Zielfunktion bei (siehe „Das Netzwerk und der Trainingsprozess“ für mehr Informationen zur Zielfunktion).

image/svg+xml image/svg+xml
(1) (2)
Schema zu den Bildern weight_imageweight_imageweight_imageweight_imageweightImage. Zur besseren Darstellung werden Grauwerte für die verschiedenen Nummern und Zahlen verwendet. (1) Das Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage definiert für jedes Pixel des Bildes seine Klasse, 0: Hintergrund (weiß), 1: Orange, 2: Zitrone, 3: Apfel und 4: Rand (schwarz), welche als 'ignore' deklariert wurde. (2) Das zugehörige Bild weight_imageweight_imageweight_imageweight_imageweightImage, welches die Klassen-Gewichte class_weightsclass_weightsclass_weightsclass_weightsclassWeights 0 liefert, Hintergrund: 1.0, Orange: 30.0, Zitrone: 75.0. Pixel von Klassen, die als 'ignore' deklariert wurden, erhalten das Gewicht 0.0. Dies betrifft hier die Klasse Rand.

Evaluierungsmaße für die Daten der Semantischen Segmentierung

Für die Semantische Segmentierung werden in HALCON folgende Evaluierungsmaße unterstützt. Es gilt zu beachten, dass zur Berechnung eines solchen Maßes die zugehörige Ground Truth Annotation notwendig ist. Die verschiedenen Evaluierungsmaße die unten für ein einzelnes Bild erklärt werden (wie z.B. mean_ioumean_ioumean_ioumean_ioumeanIou), können auch für eine beliebige Anzahl Bilder berechnet werden. Dafür kann man sich ein einzelnes, großes Bild vorstellen, gebildet aus dem Ensemble an Einzelbildern. Es gilt zu beachten, dass die Pixel aller Klassen, die als 'ignore' deklariert wurden, für die Berechnung der Maße ignoriert werden.

pixel_accuracypixel_accuracypixel_accuracypixel_accuracypixelAccuracy
Die Pixel Genauigkeit ist das Verhältnis aller korrekt klassifizierten Pixel zur Gesamtzahl Pixel.
image/svg+xml image/svg+xml image/svg+xml pixel accuracy =
(1) (2) (3)
Darstellungsbeispiel zur Pixel Genauigkeit pixel_accuracypixel_accuracypixel_accuracypixel_accuracypixelAccuracy: (1) Das Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage definiert die Ground Truth Klassenzuordnungen aller Pixel (siehe den obere Abschnitt „Daten“). (2) Das Ausgabebild, in welchem auch alle Pixel einer als 'ignore' deklarierten Klasse klassifiziert werden. (3) Die Pixel Genauigkeit ist das Verhältnis der beiden orangen Flächen. Es gilt zu beachten, dass die Pixel jeder Klasse, die als 'ignore' deklariert wurde, ignoriert werden.
class_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclassPixelAccuracy

Die klassenweise Pixel Genauigkeit berücksichtigt nur die Pixel einer Klasse. Dieses Maß ist definiert als das Verhältnis aller korrekt dieser Klasse zugeordneten Pixel zur Gesamtzahl Pixel dieser Klasse.

Falls eine Klasse nicht vertreten ist, wird ihr für class_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclassPixelAccuracy ein Wert '-1'"-1""-1""-1""-1" zugewiesen und sie trägt nicht zum Mittelwert mean_accuracymean_accuracymean_accuracymean_accuracymeanAccuracy bei.

mean_accuracymean_accuracymean_accuracymean_accuracymeanAccuracy

Die durchschnittliche Genauigkeit ist der Mittelwert der klassenweisen Pixel Genauigkeiten class_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclass_pixel_accuracyclassPixelAccuracy über alle vertretenen Klassen.

class_iouclass_iouclass_iouclass_iouclassIou

Die klassenweise Intersection over Union (IoU) gibt für eine Klasse das Verhältnis von korrekt zugeordneten Pixeln zur Anzahl an Pixeln, die entweder tatsächlich zu dieser Klasse gehören oder dieser zugeordnet wurden. Bildlich entspricht dies dem Verhältnis zwischen der Schnittmenge und der Vereinigungsmenge der Flächen, siehe auch die untere Darstellung.

Falls eine Klasse nicht vertreten ist, wird ihr für class_iouclass_iouclass_iouclass_iouclassIou ein Wert '-1'"-1""-1""-1""-1" zugewiesen und sie trägt nicht zum Mittelwert mean_ioumean_ioumean_ioumean_ioumeanIou bei.

image/svg+xml image/svg+xml image/svg+xml IoU=
(1) (2) (3)
Bildliches Beispiel der klassenweisen IoU, class_iouclass_iouclass_iouclass_iouclassIou, anhand der Klasse Apfel. (1) Das Bild segmentation_imagesegmentation_imagesegmentation_imagesegmentation_imagesegmentationImage definiert die Ground Truth Klassenzuordnungen aller Pixel (siehe den obere Abschnitt „Daten“). (2) Das Ausgabebild, in welchem auch alle Pixel einer als 'ignore' deklarierten Klasse klassifiziert werden. (3) Die IoU ist das Verhältnis zwischen der Schnittmenge und der Vereinigungsmenge der beiden Flächen aus Pixel der Klasse Apfel. Es gilt zu beachten, dass die Pixel jeder Klasse, die als 'ignore' deklariert wurde, ignoriert werden.
mean_ioumean_ioumean_ioumean_ioumeanIou

Die durchschnittliche IoU ist der Mittelwert der klassenweisen IoU class_iouclass_iouclass_iouclass_iouclassIou über alle vertretenen Klassen. Es gilt zu beachten, dass alle vertretenen Klassen den gleichen Einfluss auf dieses Maß haben, unabhängig von ihrer Anzahl an Pixel.

frequency_weighted_ioufrequency_weighted_ioufrequency_weighted_ioufrequency_weighted_ioufrequencyWeightedIou

Wie für die durchschnittliche IoU werden erst die klassenweisen IoU berechnet. Der Beitrag einer jeden Klasse zu diesem Maß ist abhängig von der Anzahl Pixel dieser Klasse. Dadurch können Klassen mit einer großen Anzahl an Pixeln dieses Maß dominieren.

pixel_confusion_matrixpixel_confusion_matrixpixel_confusion_matrixpixel_confusion_matrixpixelConfusionMatrix

Das Konzept der Konfusionsmatrix wird im Abschnitt „Das Training beaufsichtigen“ des Kapitels Deep Learning erklärt. Dieses ist auch für die Semantische Segmentierung anwendbar, wo die Instanzen einzelne Pixel sind.


Liste der Abschnitte