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.
Dieser Abschnitt beschreibt die wichtigsten Schritte und den Ablauf der Deep Learning-basierten Klassifikation mit dem veralteten Ablauf.
Erst muss ein vortrainierter Klassifikator mit dem Operator
eingelesen werden. Dieser Operator wird auch dazu verwendet, um fertig
trainierte Klassifikatoren, die mit
geschrieben wurden, einzulesen.
write_dl_classifier
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.
Der Klassifikator stellt mehrere Anforderungen an die Bilder,
wie die Bilddimensionen und den Grauwertbereich. Die
Defaultwerte sind in
aufgelistet. Mit
diesen Werten wurden die Netzwerke vortrainiert. Die
Netzwerkarchitekturen erlauben verschiedene Bilddimensionen, welche
über read_dl_classifier
gesetzt werden können, aber je
nach Netzwerk macht eine Änderung ein Nachtrainieren notwendig. Die
aktuellen Werte können mit
set_dl_classifier_param
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.
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.
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'
gesetzt.
Dieser Operator kann auch verwendet werden, um Hyperparameter, die
für das Training wichtig sind (z.B. 'batch_size'
und
'learning_rate'
), zu setzen. Für eine detailliertere
Erklärung siehe das Kapitel Deep Learning und die
Dokumentation von
.
set_dl_classifier_param
Sobald der Klassifikator und der Datensatz vorbereitet sind, kann der Klassifikator für die neue Aufgabe nachtrainiert werden.
Setzen der Hyperparameter, die für das Training verwendet werden, mit dem Operator
Für einen Überblick über mögliche Hyperparameter siehe
. Zusätzliche Erklärungen können im
Kapitel Deep Learning gefunden werden.
set_dl_classifier_param
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
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_batch
zu trainieren. Dieser Prozess wird
für so viele Epochen wiederholt, bis das Trainingsergebnis
zufriedenstellend ist.
train_dl_classifier_batch
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.
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.
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.
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.
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.
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:
Als Name des letzten Ordners, der das Bild enthält
Als Dateiname.
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
abgefragt werden. Eine Orientierung
bei der Implementierung einer entsprechenden Vorverarbeitung gibt die
Prozedur get_dl_classifier_param
preprocess_dl_classifier_images
.
apply_dl_classifier
clear_dl_classifier
clear_dl_classifier_result
clear_dl_classifier_train_result
deserialize_dl_classifier
get_dl_classifier_param
get_dl_classifier_result
get_dl_classifier_train_result
read_dl_classifier
serialize_dl_classifier
set_dl_classifier_param
train_dl_classifier_batch
write_dl_classifier