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:
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) |
DLSample beinhaltet das Bild
sowie Informationen über das Bild und seinen Inhalt.
Zu Darstellungszwecken ist die BatchSize auf drei gesetzt,
zudem sind nur wenige Einträge aufgelistet.
(2) Inferenz: DLSample beinhaltet das blanke Bild.
Diese Dictionaries können einzeln oder im Tupel übergeben werden.
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
BatchSize auf drei gesetzt,
zudem sind nur wenige Einträge aufgelistet.
In diesem Beispiel werden aus den insgesamt Samples drei
zufällig ausgewählt. Die entsprechenden DLSample werden
erstellt und im Tupel DLSampleBatch vereint.
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:
DLDatasetread_dl_dataset_from_coco (Objektdetektion mit
'instance_type' = 'rectangle1') und
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
DLDatasetdie 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:
'A': jede Methode
'D': Objektdetektion
Falls der Eintrag nur auf gewisse 'instance_type' zutrifft,
ist dieser spezifiziert mit 'r1': 'rectangle1',
'r2': 'rectangle2'
'S': 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
DLDatasetDLDataset speichert die generellen
Informationen zum Datensatz und sammelt die Dictionaries der
individuellen Samples.
Dabei sind ikonische Daten nicht in DLDataset
enthalten, aber dei Pfade zu den entsprechenden Bildern.
Das Dictionary hat die folgenden Schlüssel:
| Schlüssel | Beschreibung | Format | M |
|
Basispfad zu allen Bildern | String | A |
[1] |
Basispfad zu allen Sample Dateien (sofern vorhanden) | String | A |
|
Namen aller zu unterscheidenden Klassen | Tupeln von Strings | A |
|
IDs aller zu unterscheidenden Klassen (Bereich: 0-65534) | Tupel von ganzzahligen Werten | A |
[1] |
Alle während der Vorverarbeitung verwendeten Parameter | Dictionary | A |
[1] |
Gewichte der verschiedenen Klassen | Tupel von Gleitkommazahlen | S |
|
Basispfad zu allen Segmentierungsbildern | String | S |
Dieses Dictionary wird direkt erzeugt, wenn die Daten mit Hilfe des
MVTec Deep Learning Tools gelabelt werden.
Ebenso wird es von den Prozeduren erstellt:
read_dl_dataset_from_coco (Objektdetektion mit
'instance_type' = 'rectangle1') und
read_dl_dataset_segmentation (Semantische Segmentierung).
Die mit [1] markierten Einträge werden von den
Vorverarbeitungsprozeduren eingetragen.
samplessamples des Dictionary DLDataset
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 Schlüssel:
| Schlüssel | Beschreibung | Format | M |
|
Dateiname des Bildes und sein Pfad relativ zu |
String | A |
|
Eindeutige Bild-ID (Zeichenkodierungsformat: UINT8) | Ganzzahl | A |
[2] |
Gibt den bei der Aufteilung zugordneten Datensatz an ('train','validation','test') |
String | A |
[3] |
Dateiname des entsprechenden Dictionary und sein Pfad relativ zu |
String | A |
|
Dateiname des Ground Truth Segmentierungsbildes und sein Pfad relativ zu |
String | S |
|
Ground Truth Label für den Bildausschnitt innerhalb des umschließenden Rechtecks (als ID aus ) |
Tupel von Ganzzahlen | D |
[4] |
BBoxGT: Obere linke Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Obere linke Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Untere rechte Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Untere rechte Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
|
Optional. Für jede innerhalb dieses Bildes enthält dieser Wert ein Dictionary mit allen unverarbeiteten COCO Annotations-Informationen |
Tupel von Dictionaries | D:r1 |
[4] |
BBoxGT: Mittelpunkt, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Mittelpunkt, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Winkel phi | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Halbe Kantenlänge 1 | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Halbe Kantenlänge 2 | Tupel von Gleitkommazahlen | D:r2 |
DLDataset und werden als
solche zugleich erstellt.
Ausnahme sind dabei die markierten Einträge der Tabelle,
[2]: Die Prozedur split_dl_dataset fügt den Eintrag
split hinzu,
[3]: Die Prozedur preprocess_dl_samples fügt den Eintrag
dlsample_file_name hinzu.
[4]: Für die Parameter der umschließenden Ground Truth Rechtecke
(BBoxGT) werden pixel-zentrierte, subpixel-genaue Koordinaten
verwendet.
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 DLSamplegen_dl_samples aus den Daten in
erstellt.
Es enthält alle Ground Truth Annotationen eines Bildes.
Wird die Vorverarbeitung mit den Standard-Prozedur
DLDatasetpreprocess_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
DLSample hat folgende Schlüssel:
| Schlüssel | Beschreibung | Format | M |
|
Eingabebild | Bild | A |
|
Eindeutige Bild-ID (wie in ) |
Ganzzahl | A |
|
Bild mit den Ground Truth Segmentierungen, eingelesen von |
Bild | S |
[5] |
Bild mit den Pixel-Gewichten | Bild | S |
|
Ground Truth Label für den Bildausschnitt innerhalb des umschließenden Rechtecks (als ID aus ) |
Tupel von Ganzzahlen | D |
[4] |
BBoxGT: Obere linke Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Obere linke Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Untere rechte Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Untere rechte Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[4] |
BBoxGT: Mittelpunkt, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Mittelpunkt, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Winkel phi | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Halbe Kantenlänge 1 | Tupel von Gleitkommazahlen | D:r2 |
[4] |
BBoxGT: Halbe Kantenlänge 2 | Tupel von Gleitkommazahlen | D:r2 |
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 umschließenden Ground Truth Rechtecke
(BBoxGT) werden pixel-zentrierte, subpixel-genaue Koordinaten
verwendet.
Falls die Dictionaries gespeichert werden sollen,
kann die Prozedur DLSamplewrite_dl_samples verwendet werden.
Eingelesen können die gespeicherten Dictionaries
über die Prozedur DLSampleread_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 DLDatasetgen_dl_samples_from_images erstellt.
Diese Dictionaries können einzeln oder als Einträge des Tupels
übergeben werden .
DLSampleBatch
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
apply_dl_model gibt das Modell für
jedes Sample ein Dictionary DLResult.
Abhängig vom Modell-Typ kann dieses Dictionary die folgenden Einträge
haben:
| Schlüssel | Beschreibung | Format | M |
|
Bild mit dem Segmentierungsresultat | Bild | S |
|
Bild mit den Konfidenz-Werten des Segmentierungs-Resultats | Bild | S |
|
Vorhergesagte Klasse für das umschließende Rechteck (als ID aus ) |
Tupel von Ganzzahlen | D |
|
Konfidenz-Wert für die Vorhersage des umschließenden Rechteckes | Tupel von Gleitkommazahlen | D |
[6] |
BBoxInf: Obere linke Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[6] |
BBoxInf: Obere linke Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[6] |
BBoxInf: Untere rechte Ecke, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[6] |
BBoxInf: Untere rechte Ecke, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r1 |
[6] |
BBoxInf: Mittelpunkt, Zeilenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[6] |
BBoxInf: Mittelpunkt, Spaltenkoordinate | Tupel von Gleitkommazahlen | D:r2 |
[6] |
BBoxInf: Winkel phi | Tupel von Gleitkommazahlen | D:r2 |
[6] |
BBoxInf: Halbe Kantenlänge 1 | Tupel von Gleitkommazahlen | D:r2 |
[6] |
BBoxInf: Halbe Kantenlänge 2 | Tupel von Gleitkommazahlen | D:r2 |
Für weitere Informationen zu den Ausgabewerten wird auf das Kapitel Deep Learning / Semantische Segmentierung, bzw. Deep Learning / Objektdetektion verwiesen.
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_parampreprocess_dl_samples
durchgeführt werden.
Für eine selbst erstellte Vorverarbeitung liefert diese Prozedur eine
Anleitung für die Implementierung.
apply_dl_modelclear_dl_modeldeserialize_dl_modelget_dl_model_paramread_dl_modelserialize_dl_modelset_dl_model_paramtrain_dl_model_batchwrite_dl_model