Diese Kapitel erklärt das generelle Konzept des Deep Learning-Modells in HALCON und die Daten Handhabung.
Ein Deep Learning-Modell ist in HALCON ein Neuronales Netzwerk. Jedes Neuronale Netzwerk hat seine Architektur, welche seine Funktion definiert und damit bestimmt, für welche Aufgaben es verwendet werden kann. Dabei sind verschiedene Netzwerk-Architekturen für eine Funktionalität möglich. Diese Funktionalitäten werden auch als Methoden oder Typ bezeichnet. Momentan sind folgende Funktionalitäten in HALCON als Modell implementiert:
Anomalieerkennung, siehe Deep Learning / Anomalieerkennung.
Klassifikation, siehe Deep Learning / Klassifikation.
Objektdetektion, siehe Deep Learning / Objektdetektion.
Semantische Segmentierung, siehe Deep Learning / Semantische Segmentierung.
Für die implementierten Methoden können weitere Informationen zum spezifischen Ablauf, den Daten-Anforderungen und Evaluierungsmöglichkeiten in den jeweiligen Kapiteln gefunden werden. Informationen zu Deep Learning (DL) im Allgemeinen befinden sich im Kapitel Deep Learning.
In diesem Kapitel finden sich Informationen, welche Daten ein DL Modell benötigt und zurück gibt sowie auch wie diese Daten übergeben werden.
Unabhängig von der Methode gelten gewisse Konventionen, wie die Daten
dem Modell übergeben werden.
Der Grundgedanke: Das Modell interagiert mit den Daten über Dictionaries.
Genauer gesagt, für jedes Eingabebild erhält das Modell ein Dictionary
. Dieses Dictionary enthält das Eingabebild selbst
und, im Falle des Trainings und der Evaluierung, Informationen wie z.B.
die Ground Truth Annotationen.
Als Ausgabe gibt das Modell ein Dictionary DLSample
mit den
Resultaten zurück. Eine Darstellung ist unten gegeben.
DLResult
(1) | (2) |
Für das Training und die Evaluierung dient ein weiteres Dictionary
als Datenbank, in welcher auch die Dictionaries
mit den Informationen zu den einzelnen Bildern
(gespeichert unter dem Schlüssel DLDataset
) gesammelt werden.
Aus dieser Datenbank werden die Eingabe-Dictionaries für das Modell
erstellt, die samples
. Siehe auch die folgende Darstellung
und den Abschnitt „Eingabedaten beim Training und der Evaluierung“.
DLSample
Obwohl für das Modell selbst nicht zwingend notwendig, wird das Dictionary
von den Trainings- und Evaluaierungs-Prozeduren
verwendet.
So wird stark empfohlen, aus den vorliegenden
Daten ein Dictionary DLDataset
zu erstellen.
Dieses Dictionary wird direkt erzeugt, wenn die Daten mit Hilfe des
MVTec Deep Learning Tools gelabelt werden.
Alternativ wird es erstellt, wenn zum Einlesen der Daten eine der
folgenden Prozeduren verwendet wird:
DLDataset
read_dl_dataset_anomaly
(Anomalieerkennung)
read_dl_dataset_classification
(Klassifikation)
read_dl_dataset_from_coco
(Objektdetektion mit
'instance_type'
= 'rectangle1'
)
read_dl_dataset_segmentation
(Semantische Segmentierung).
Bezüglich der genauen Datenanforderungen um diese Prozeduren zu verwenden
wird auf die jeweilige Prozedurendokumentation verwiesen.
Wird
auf anderen Wegen erstellt, muss es zumindest
die Einträge beinhalten, die in der unteren Erklärung nicht mit einer Zahl
markiert sind.
Während der Vorverarbeitung des Datensatzes werden dem Dictionary
DLDataset
die weiteren Einträge von den jeweiligen Prozeduren
hinzugefügt.
DLDataset
Im Folgenden werden die verschiedenen Daten erklärt sowie die dazugehörigen Dictionaries. Um zu markieren, welche Methoden (M) den jeweiligen Eintrag nutzen, verwenden wir folgende Abkürzungen:
'Any': Jede Methode
'AD': Anomalieerkennung
'CL': Klassifikation
'OD': Objektdetektion
Falls der Eintrag nur auf gewisse 'instance_type'
zutrifft,
ist dieser spezifiziert mit 'r1': 'rectangle1'
,
'r2': 'rectangle2'
'SE': Semantische Segmentierung
Die Einträge, die nur auf einzelne Methoden zutreffen, werden in den jeweiligen Kapiteln genauer beschrieben.
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 Informationen zu den Bildern und dem Datensatz werden im Dictionary
vermerkt. Dabei dient dieses Dictionary als
Datenbank.
Genauer gesagt, werden darin die generellen Informationen über den
Datensatz gespeichert sowie die Dictionaries der einzelnen Sample
unter dem Schlüssel DLDataset
gesammelt.
Werden die jeweiligen Bilddaten benötigt, wird für jedes erforderte Bild
ein Dictionary samples
erstellt (oder gelesen, falls dieses
bereits existiert).
Der Zusammenhang zwischen diesen Dictionaries ist in der obigen
Darstellung illustriert.
Im Folgenden werden die einzelnen Dictionaries mit ihren
Schlüssel/Wert-Paaren genauer erklärt.
DLSample
DLDataset
Das Dictionary
speichert die generellen
Informationen zum Datensatz und sammelt die Dictionaries der
individuellen Samples.
Dabei sind ikonische Daten nicht in DLDataset
enthalten, aber die Pfade zu den entsprechenden Bildern.
Das Dictionary hat die folgenden Einträge:
DLDataset
image_dir
: AnyBasispfad zu allen Bildern.
Format: String
dlsample_dir
: Any [1]Basispfad zu allen Sample Dateien (sofern vorhanden).
Format: String
class_names
: AnyNamen aller zu unterscheidenden Klassen.
Format: Tupel von Strings
class_ids
: AnyIDs aller zu unterscheidenden Klassen (Wertebereich: 0-65534).
Format: Tupel von ganzzahligen Werten
preprocess_param
: Any [1]Alle während der Vorverarbeitung verwendeten Parameter.
Format: Dictionary
anomaly_dir
: ADBasispfad zu allen Anomalieregionen (Regionen, die eine Anomalie auf dem Bild kennzeichnen).
Format: String
class_weights
: SE [1]Gewichte der verschiedenen Klassen.
Format: Tupel von Gleitkommazahlen
segmentation_dir
: SEBasispfad zu allen Segmentierungsbildern.
Format: String
Dieses Dictionary wird direkt erzeugt, wenn die Daten mit Hilfe des MVTec Deep Learning Tools gelabelt werden. Ebenso wird es von den oben erwähnten Prozeduren erstellt. Die mit [1] markierten Einträge werden von den Vorverarbeitungsprozeduren eingetragen.
samples
Der Schlüssel
des Dictionary samples
hat als Wert ein Tupel von Dictionaries, eines für jedes Sample
des Datensatzes.
Diese Dictionaries beinhalten die Information der jeweiligen Samples
und haben die folgenden Einträge:
DLDataset
image_file_name
: Any
Dateiname des Bildes und sein Pfad relativ zu
.image_dir
Format: String
image_id
: AnyEindeutige Bild-ID (Zeichenkodierungsformat: UINT8).
Format: Ganzzahl
split
: Any [2]
Gibt den bei der Aufteilung zugeordneten Datensatz an
('train'
,'validation'
,'test'
).
Format: String
dlsample_file_name
: Any [3]
Dateiname des entsprechenden Dictionary
und sein Pfad relativ zu DLSample
.dlsample_dir
Format: String
anomaly_file_name
: AD
Optional. Pfad zu den Dateien mit den Ground Truth Anomalieregionen
(relativ zu
).anomaly_dir
Format: String
anomaly_label
: AD
Ground Truth Anomalie Label
(als Name aus
).class_names
Format: String
image_label_id
: CL
Ground Truth Label des Bildes (als ID aus
).class_ids
Format: Tupel von Ganzzahlen
bbox_label_id
: OD
Ground Truth Label für den Bildausschnitt innerhalb des umschließenden
Rechtecks (als ID aus
).class_ids
Format: Tupel von Ganzzahlen
bbox_row1
: OD:r1 [4]Ground Truth umschließendes Rechteck: Obere linke Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col1
: OD:r1 [4]Ground Truth umschließendes Rechteck: Obere linke Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_row2
: OD:r1 [4]Ground Truth umschließendes Rechteck: Untere rechte Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col2
: OD:r1 [4]Ground Truth umschließendes Rechteck: Untere rechte Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
coco_raw_annotations
: OD:r1
Optional. Für jede
innerhalb dieses Bildes
enthält dieser Wert ein Dictionary mit allen unverarbeiteten COCO
Annotations-Informationen.bbox_label_id
Format: Tupel von Dictionaries
bbox_row
: OD:r2 [4]Ground Truth umschließendes Rechteck: Mittelpunkt, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col
: OD:r2 [4]Ground Truth umschließendes Rechteck: Mittelpunkt, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_phi
: OD:r2 [4]Ground Truth umschließendes Rechteck: Winkel phi.
Format: Tupel von Gleitkommazahlen
bbox_length1
: OD:r2 [4]Ground Truth umschließendes Rechteck: Halbe Kantenlänge 1.
Format: Tupel von Gleitkommazahlen
bbox_length2
: OD:r2 [4]Ground Truth umschließendes Rechteck: Halbe Kantenlänge 2.
Format: Tupel von Gleitkommazahlen
segmentation_file_name
: SE
Dateiname des Ground Truth Segmentierungsbildes und sein Pfad
relativ zu
.segmentation_dir
Format: String
Diese Dictionaries sind Teil von
und werden als
solche zugleich erstellt.
Ausnahme sind dabei die markierten Einträge der Tabelle,
[2]: Die Prozedur DLDataset
split_dl_dataset
fügt den Eintrag
hinzu,
[3]: Die Prozedur split
preprocess_dl_samples
fügt den Eintrag
hinzu.
[4]: Für die Parameter der umschließenden Ground Truth Rechtecke
(BBoxGT) werden pixel-zentrierte, subpixel-genaue Koordinaten
verwendet.
dlsample_file_name
DLSample
Das Dictionary
dient als Eingabewert des
Modells. Für einen Batch werden sie als Einträge des Tupels
DLSample
übergeben.
DLSampleBatch
Ein solches Dictionary
wird für jedes Bild von
der Prozedur DLSample
gen_dl_samples
aus den Daten in
erstellt.
Es enthält alle Ground Truth Annotationen eines Bildes.
Wird die Vorverarbeitung mit den Standard-Prozedur
DLDataset
preprocess_dl_samples
durchgeführt, werden sie automatisch
von dieser erstellt.
Es gilt zu beachten, dass die Vorverarbeitung zu Aktualisierungen des
entsprechenden
führen kann.
DLSample
Das Dictionary
hat folgende Einträge:
DLSample
image
: AnyEingabebild
Format: Bild
image_id
: Any
Eindeutige Bild-ID (wie in
).DLDataset
Format: Ganzzahl
anomaly_ground_truth
: AD
Bild oder Region, aus
.anomaly_file_name
Format: Bild oder Region
anomaly_label
: AD
Ground Truth Anomalie Label auf Bildebene
(als Name aus
).class_names
Format: String
anomaly_label_id
: AD
Ground Truth Anomalie Label auf Bildebene
(als ID aus
).class_ids
Format: Ganzzahl
image_label_id
: CL
Ground Truth Label des Bildes (als ID aus
).class_ids
Format: Tupel von Ganzzahlen
bbox_label_id
: OD
Ground Truth Label für den Bildausschnitt innerhalb des umschließenden
Rechtecks (als ID aus
).class_ids
Format: Tupel von Ganzzahlen
bbox_row1
: OD:r1 [4]Ground Truth umschließendes Rechteck: Obere linke Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col1
: OD:r1 [4]Ground Truth umschließendes Rechteck: Obere linke Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_row2
: OD:r1 [4]Ground Truth umschließendes Rechteck: Untere rechte Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col2
: OD:r1 [4]Ground Truth umschließendes Rechteck: Untere rechte Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_row
: OD:r2 [4]Ground Truth umschließendes Rechteck: Mittelpunkt, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col
: OD:r2 [4]Ground Truth umschließendes Rechteck: Mittelpunkt, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_phi
: OD:r2 [4]Ground Truth umschließendes Rechteck: Winkel phi.
Format: Tupel von Gleitkommazahlen
bbox_length1
: OD:r2 [4]Ground Truth umschließendes Rechteck: Halbe Kantenlänge 1.
Format: Tupel von Gleitkommazahlen
bbox_length2
: OD:r2 [4]Ground Truth umschließendes Rechteck: Halbe Kantenlänge 2.
Format: Tupel von Gleitkommazahlen
segmentation_image
: SE
Bild mit den Ground Truth Segmentierungen, eingelesen von
.segmentation_file_name
Format: Bild
weight_image
: SE [5]Bild mit den Pixel-Gewichten.
Format: Bild
Diese Dictionaries werden von der Prozedur gen_dl_samples
erzeugt.
Eine Ausnahme stellt der markierte Eintrag dar, [5]: wird von der
Prozedur gen_dl_segmentation_weights
erstellt.
[4]: Für die Parameter der Ground Truth umschließenden Rechtecke
werden pixel-zentrierte, subpixel-genaue Koordinaten verwendet.
Falls die Dictionaries
gespeichert werden sollen,
kann die Prozedur DLSample
write_dl_samples
verwendet werden.
Eingelesen können die gespeicherten
Dictionaries
über die Prozedur DLSample
read_dl_samples
.
Die Eingabedaten bei der Inferenz bestehen aus den blanken Bildern. Damit das Modell diese verarbeiten kann, müssen sie bestimmte Anforderungen erfüllen. Informationen zu den Bildanforderungen finden sich im unteren Abschnitt „Bilder“.
Das Modell ist so konzipiert, dass alle Daten über ein Dictionary
übergeben wird.
Für die Inferenz beinhaltet ein solches Dictionary nur das Bild und
wird von der Prozedur DLDataset
gen_dl_samples_from_images
erstellt.
Diese Dictionaries können einzeln oder als Einträge des Tupels
übergeben werden
.
DLSampleBatch
Die Trainingsresultate werden im Dictionary
gesammelt. Die spezifischen Einträge hängen vom Modell und damit vom
verwendeten Operator ab
(für weitere Informationen, siehe die Dokumentation des
entsprechendes Operators):
DLTrainResult
Der Operator
gibt folgende Einträge zurück:
train_dl_model_batch
total_loss
weitere mögliche Zielfunktionen des Modells
Der Operator
gibt folgende
Einträge zurück:
train_dl_model_anomaly_dataset
final_error
final_epoch
Als Ausgabe des Operators
gibt das Modell
ein Dictionary train_dl_model_batch
zurück.
In diesem Dictionary befinden sich der aktuelle Wert der
Gesamt-Zielfunktion unter dem Schlüssel DLTrainResult
sowie die
Werte aller weiteren im Modell enthaltenen Zielfunktionen.
total_loss
Als Ausgabe des Operators
gibt das Modell für
jedes Sample ein Dictionary apply_dl_model
.
Abhängig vom Modell-Typ kann dieses Dictionary die folgenden Einträge
haben:
DLResult
anomaly_image
: ADGrauwertbild mit Scores als Pixelwerte, die angeben wie warscheinlich der entsprechende Pixel im Eingabebild zu einer Anomalie gehört.
Format: Bild
anomaly_score
: AD
Score der Anomalie aufgrund der Werte in
.anomaly_image
Format: Gleitkommazahl
classification_class_ids
: CLIDs der vorhergesagten Klassen des Bildes sortiert nach Konfidenzwerten.
Format: Tupel von Ganzzahlen
classification_class_names
: CLVorhergesagte Klassennamen des Bildes sortiert nach Konfidenzwerten.
Format: Tupel von Strings
classification_confidences
: CLKonfidenzwerte für die Vorhersage des Bildes für jede Klasse.
Format: Tupel von Gleitkommazahlen
bbox_class_id
: OD
Vorhergesagte Klasse für das umschließende Rechteck
(als ID aus
).class_ids
Format: Tupel von Ganzzahlen
bbox_confidence
: ODKonfidenzwerte für die Vorhersage des umschließenden Rechtecks.
Format: Tupel von Gleitkommazahlen
bbox_row1
: OD:r1 [6]Inferiertes umschließendes Rechteck: Obere linke Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col1
: OD:r1 [6]Inferiertes umschließendes Rechteck: Obere linke Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_row2
: OD:r1 [6]Inferiertes umschließendes Rechteck: Untere rechte Ecke, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col2
: OD:r1 [6]Inferiertes umschließendes Rechteck: Untere rechte Ecke, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_row
: OD:r2 [6]Inferiertes umschließendes Rechteck: Mittelpunkt, Zeilenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_col
: OD:r2 [6]Inferiertes umschließendes Rechteck: Mittelpunkt, Spaltenkoordinate.
Format: Tupel von Gleitkommazahlen
bbox_phi
: OD:r2 [6]Inferiertes umschließendes Rechteck: Winkel phi.
Format: Tupel von Gleitkommazahlen
bbox_length1
: OD:r2 [6]Inferiertes umschließendes Rechteck: Halbe Kantenlänge 1.
Format: Tupel von Gleitkommazahlen
bbox_length2
: OD:r2 [6]Inferiertes umschließendes Rechteck: Halbe Kantenlänge 2.
Format: Tupel von Gleitkommazahlen
segmentation_image
: SEBild mit dem Segmentierungsresultat.
Format: Bild
segmentation_confidence
: SEBild mit den Konfidenzwerten des Segmentierungs-Resultats.
Format: Bild
[6]: Für die Parameter der inferierten umschließenden Rechtecke werden pixel-zentrierte, subpixel-genaue Koordinaten verwendet.
Für weitere Informationen zu den Ausgabewerten wird auf das Kapitel der entsprechenden Methode verwiesen, z.B. Deep Learning / Semantische Segmentierung.
Unabhängig von der Anwendung stellt das Netzwerk Anforderungen an die
Bilder. Die spezifischen Werte hängen vom Netzwerk selbst ab und können
mit
abgefragt werden.
Um diese Anforderungen zu erfüllen, müssen die Bilder evt.
vorverarbeitet werden.
Die Standard-Vorverarbeitung für den ganzen Datensatz und damit auch der
Bilder kann mit Hilfe der Prozedur get_dl_model_param
preprocess_dl_samples
durchgeführt werden.
Für eine selbst erstellte Vorverarbeitung liefert diese Prozedur eine
Anleitung für die Implementierung.
apply_dl_model
clear_dl_model
deserialize_dl_model
gen_dl_model_heatmap
get_dl_model_param
read_dl_model
serialize_dl_model
set_dl_model_param
train_dl_model_batch
write_dl_model