DL Klassifikation

Liste der Operatoren ↓

Der Ablauf und die Operatoren dieses Kapitels sind veraltet und werden nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt. Neue Applikationen sollten stattdessen den Ablauf und die neuen Operatoren verwenden, die in Deep Learning / Klassifikation beschrieben sind.

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

Ablauf

Dieser Abschnitt beschreibt die wichtigsten Schritte und den Ablauf der Deep Learning-basierten Klassifikation mit dem veralteten Ablauf.

Vorbereitung des Netzwerks und der Daten
  1. Erst muss ein vortrainierter Klassifikator mit dem Operator

    eingelesen werden. Dieser Operator wird auch dazu verwendet, um fertig trainierte Klassifikatoren, die mit write_dl_classifierwrite_dl_classifierWriteDlClassifierWriteDlClassifierWriteDlClassifier geschrieben wurden, einzulesen.

  2. Um die Daten für das Deep Learning Klassifikationstraining zu laden, steht die Prozedur

    • read_dl_classifier_data_set

    zur Verfügung. Diese Prozedur gibt eine Liste von Pfaden der Bilddateien, eine Liste der zugehörigen Ground Truth Labels (wahren Klassen) sowie eine Liste aller vorkommenden Klassen zurück.

  3. Der Klassifikator stellt mehrere Anforderungen an die Bilder, wie die Bilddimensionen und den Grauwertbereich. Die Defaultwerte sind in read_dl_classifierread_dl_classifierReadDlClassifierReadDlClassifierReadDlClassifier aufgelistet. Mit diesen Werten wurden die Netzwerke vortrainiert. Die Netzwerkarchitekturen erlauben verschiedene Bilddimensionen, welche über set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam gesetzt werden können, aber je nach Netzwerk macht eine Änderung ein Nachtrainieren notwendig. Die aktuellen Werte können mit

    abgefragt werden.

    Die Prozedur preprocess_dl_classifier_images hilft bei der Implementierung einer entsprechenden Vorverarbeitung. Wir empfehlen, alle für das Training benötigten Bilder vor dem Training vorzuverarbeiten und abzuspeichern, was das Trainieren signifikant beschleunigt.

  4. Als nächstes wird empfohlen die Daten in drei getrennte Datensätze zu teilen, die für Training, Validierung und Testen verwendet werden (siehe Abschnitt „Daten“ im Kapitel Deep Learning). Dazu kann die Prozedur

    • split_dl_classifier_data_set.

    verwendet werden.

  5. Dem Klassifikator muss mitgeteilt werden, welche Klassen er unterscheiden soll. Dazu werden die zuvor mit read_dl_classifier_data_set eingelesenen Klassen mit dem Operator

    und dem Parameter 'classes'"classes""classes""classes""classes" gesetzt.

    Dieser Operator kann auch verwendet werden, um Hyperparameter, die für das Training wichtig sind (z.B. 'batch_size'"batch_size""batch_size""batch_size""batch_size" und 'learning_rate'"learning_rate""learning_rate""learning_rate""learning_rate"), zu setzen. Für eine detailliertere Erklärung siehe das Kapitel Deep Learning und die Dokumentation von set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam.

Training des Klassifikators und Auswertung des Trainingsfortschritts

Sobald der Klassifikator und der Datensatz vorbereitet sind, kann der Klassifikator für die neue Aufgabe nachtrainiert werden.

  1. Setzen der Hyperparameter, die für das Training verwendet werden, mit dem Operator

    Für einen Überblick über mögliche Hyperparameter siehe set_dl_classifier_paramset_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamSetDlClassifierParam. Zusätzliche Erklärungen können im Kapitel Deep Learning gefunden werden.

  2. Zum Trainieren des Klassifikators steht der Operator

    zur Verfügung. Zwischenergebnisse des Trainings werden im Ausgabehandle dieses Operators gespeichert.

    Wie der Name suggeriert, verarbeitet der Operator train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch einen Batch von Trainingsdaten (Bilder und Ground Truth Labels) in einem Schritt. Dafür wird über die Trainingsdaten iteriert, um den Klassifikator sukzessiv mit train_dl_classifier_batchtrain_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchTrainDlClassifierBatch zu trainieren. Dieser Prozess wird für so viele Epochen wiederholt, bis das Trainingsergebnis zufriedenstellend ist.

  3. Um den Trainingsfortschritt zu veranschaulichen, wird die Prozedur

    • plot_dl_classifier_training_progress

    bereitgestellt. Damit kann der Klassifikationsfehler während des Trainings visualisiert werden. Die zur Darstellung notwendigen Eingaben können über die Prozeduren

    • select_percentage_dl_classifier_data,

    • apply_dl_classifier_batchwise und

    • evaluate_dl_classifier

    erhalten werden. Mit diesen Prozeduren kann die Anzahl der Bilder für die Evaluierung verringert werden, der Klassifikator auf die ausgewählten Daten angewendet werden und zum Beispiel der Top-1 Fehler berechnet werden.

Anwenden und Evaluieren des finalen Klassifikators

Nun ist der Klassifikator für die spezifische Anwendung trainiert und bereit zur Anwendung. Doch zuvor sollte noch evaluiert werden, wie gut sich der Klassifikator auf den Testdaten verhält.

  1. Um den Klassifikator auf einer beliebigen Anzahl Bilder anzuwenden, wird der Operator

    verwendet. Die Laufzeit dieses Operators hängt von der Anzahl von Batches ab, die für den gegebenen Bilddatensatz benötigt werden.

    Die Ergebnisse werden in einem Handle gespeichert.

    Die vorausgesagten Klassen und Konfidenzen werden mit dem Operator

    abgefragt.

  2. Jetzt können die Ergebnisse ausgewertet werden. Die Leistung des Klassifikators kann während des Trainings mit der Prozedur evaluate_dl_classifier ausgewertet werden.

    Um die Qualität des Klassifikators zu analysieren und zu visualisieren, ist die Konfusionsmatrix ein nützliches Hilfsmittel (für eine Erklärung wird auf das Kapitel Deep Learning verwiesen). Dafür können die Prozeduren

    • gen_confusion_matrix

    • gen_interactive_confusion_matrix.

    verwendet werden. Die interaktive Prozedur ermöglicht es, Beispiele einer spezifischen Kategorie auszuwählen, funktioniert aber nicht mit exportiertem Code.

    Zusätzlich kann, nachdem der Klassifikator auf einen Datensatz angewandt wurde, die Prozedur

    • get_dl_classifier_image_results

    verwendet werden, um Bilder nach bestimmten Kriterien zu selektieren und anzuzeigen, zum Beispiel Bilder die falsch klassifiziert wurden. Weiter kann dies als Eingabe für die Prozedur

    • dev_display_dl_classifier_heatmap,

    verwendet werden, um eine Heatmap für ein Bild anzuzeigen. Mit dieser Heatmap kann analysiert werden, welche Bildregionen für das Klassifikationsergebnis ausschlaggebend sind.

Inferenzphase

Ist der Klassifikator trainiert und seine Leistung zufriedenstellend, kann er für die Klassifikation neuer Bilder verwendet werden. Dafür müssen die Bilder entsprechend den Anforderungen des Klassifikators vorverarbeitet werden (d.h. auf dieselbe Art und Weise wie für das Training). Danach können sie mit

klassifiziert werden.

Daten für die Klassifikation

Es wird zwischen Daten für Training und Inferenz unterschieden. Letztere bestehen ausschließlich aus Bildern. Für Erstere ist jedoch bereits bekannt zu welcher Klasse die Bilder gehören. Die entsprechenden Informationen werden über die Labels zur Verfügung gestellt.

Die Trainingsdaten werden dazu genutzt einen Klassifikator für eine spezifische Aufgabe zu trainieren. Mit Hilfe dieser Daten kann der Klassifikator lernen, welche Klassen zu unterscheiden sind und wie deren Vertreter aussehen. Bei der Klassifikation wird das Bild als Ganzes klassifiziert. Daher bestehen die Trainingsdaten aus Bildern und deren Ground Truth Labels, also die Klasse zu dem das Bild gehört. Zu beachten ist hierbei, dass die Bilder möglichst repräsentativ für die spätere Aufgabe sein sollten. Es gibt verschiedene Möglichkeiten, wie die Ground Truth Klassen als Label gespeichert und abgerufen werden können. Auf folgende Weisen können die Ground Truth Labels eines Bildes von der Prozedur read_dl_classifier_data_set gelesen werden:

Zum Trainieren eines Klassifikators wird eine Technik namens Transferlernen verwendet (siehe das Kapitel Deep Learning). Die Anzahl benötigter Bilder ist dabei zwar geringer, für einen geeigneten Datensatz wird üblicherweise aber immer noch eine Anzahl in den Hundertern bis Tausendern pro Klasse benötigt. Während der Klassifikator generell verlässlicher ist, wenn er mit einem größeren Datensatz trainiert wurde, hängt die Anzahl benötigter Bilder auch von der Komplexität der Aufgabe ab. Es sollten außerdem genug Trainingsdaten vorliegen um diese in die drei Untermengen aufzuteilen, welche idealerweise unabhängig und gleich verteilt sind (siehe Abschnitt „Daten“ im Kapitel Deep Learning).

Unabhängig von der Anwendung, stellt der Klassifikator Anforderungen an die Bilder bezüglich Bilddimensionen, Grauwertbereich und Bildtyp. Die spezifischen Werte sind abhängig vom Klassifikator selbst und können mit get_dl_classifier_paramget_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamGetDlClassifierParam abgefragt werden. Eine Orientierung bei der Implementierung einer entsprechenden Vorverarbeitung gibt die Prozedur preprocess_dl_classifier_images.


Liste der Operatoren

apply_dl_classifierApplyDlClassifierApplyDlClassifierapply_dl_classifier
Klassifizieren einer Menge an Bildern durch einen Deep Learning-basierten Klassifikator.
clear_dl_classifierClearDlClassifierClearDlClassifierclear_dl_classifier
Löschen eines Deep Learning-basierten Klassifikators.
clear_dl_classifier_resultClearDlClassifierResultClearDlClassifierResultclear_dl_classifier_result
Löscht das Handle mit den Resultaten der Deep Learning-basierten Klassifikation.
clear_dl_classifier_train_resultClearDlClassifierTrainResultClearDlClassifierTrainResultclear_dl_classifier_train_result
Löschen eines Handles von einem Trainingschritt eines Deep Learning-basierten Klassifikators und Freigabe des verwendeten Speichers.
deserialize_dl_classifierDeserializeDlClassifierDeserializeDlClassifierdeserialize_dl_classifier
Deserialisiert einen Deep Learning-basierten Klassifikator.
get_dl_classifier_paramGetDlClassifierParamGetDlClassifierParamget_dl_classifier_param
Auslesen der Parameter eines Deep Learning-basierten Klassifikators.
get_dl_classifier_resultGetDlClassifierResultGetDlClassifierResultget_dl_classifier_result
Abrufen der Inferenz-Ergebnisse eines Deep Learning-basierten Klassifikators.
get_dl_classifier_train_resultGetDlClassifierTrainResultGetDlClassifierTrainResultget_dl_classifier_train_result
Auslesen der Resultate eines Trainingsschrittes des Deep Learning-basierten Klassifikators.
read_dl_classifierReadDlClassifierReadDlClassifierread_dl_classifier
Lesen eines Deep Learning-basierten Klassifikators aus einer Datei.
serialize_dl_classifierSerializeDlClassifierSerializeDlClassifierserialize_dl_classifier
Serialisiert einen Deep Learning-basierten Klassifikator.
set_dl_classifier_paramSetDlClassifierParamSetDlClassifierParamset_dl_classifier_param
Setzen der Parameter des Deep Learning-basierten Klassifikators.
train_dl_classifier_batchTrainDlClassifierBatchTrainDlClassifierBatchtrain_dl_classifier_batch
Ausführen eines Trainingsschrittes eines Deep Learning-basierten Klassifikators auf Basis eines Batches von Bildern.
write_dl_classifierWriteDlClassifierWriteDlClassifierwrite_dl_classifier
Abspeichern eines Deep Learning-basierten Klassifikators in eine Datei.