create_dl_layer_anchors — Erstellen eines Layer zur Generierung von Anchor-Boxes.
create_dl_layer_anchors( : : DLLayerInput, DLLayerInputImage, LayerName, AspectRatios, NumSubscales, Angles, GenParamName, GenParamValue : DLLayerAnchors)
Der Operator create_dl_layer_anchors erzeugt einen Layer zur
Generierung von Anchor-Boxes, dessen Handle in DLLayerAnchors
zurückgegeben wird.
Der Parameter DLLayerInput bestimmt den zuführenden Eingabelayer,
der verwendet wird, um die Breite und Höhe des räumlichen Gitters zu
bestimmen, auf dem die Anchors erzeugt werden. Dies kann zum Beispiel der
letzte oder ein beliebiger zwischenliegender Merkmalslayer eines CNN sein.
Bei der Verwendung von Anchors führt normalerweise derselbe Layer
einen Klassifikations- und einen Box-Regressionszweig zu, welche dazu
verwendet werden, die Klasse eines jeden Anchors zu bestimmen und
seine Form zu verfeinern (siehe auch create_dl_layer_box_proposals
und create_dl_layer_box_targets).
Der Parameter DLLayerInputImage bestimmt den zuführenden
Eingabelayer der verwendet wird, um den Skalierungsfaktor des Gitters und
die Größe der Anchors zu bestimmen. In der Regel ist dies der
Bildeingabelayer des Netzwerks.
Wenn zum Beispiel die Breite und Höhe von DLLayerInput
halb so groß wie die Breite und Höhe von DLLayerInputImage sind,
werden das Gitter und die Größe des Anchors mit dem Faktor zwei skaliert.
Das Verhältnis zwischen der Größe (Breite und Höhe) von
DLLayerInputImage und DLLayerInput muss immer eine
Potenz von zwei sein, zum Beispiel 1, 2, 4, 8, 16 und so weiter.
Der Parameter LayerName legt einen individuellen Layernamen fest.
Es ist zu beachten, dass beim Erstellen eines Modells mit
create_dl_model jeder Layer des erstellten Netzes einen
eindeutigen Namen haben muss.
Der Parameter AspectRatios bestimmt die Seitenverhältnisse der
Anchor-Boxes (Höhe zu Breite für den Typ 'rectangle1' und
length1 zu length2 für den Instanztyp
'rectangle2').
Der Parameter NumSubscales bestimmt die Anzahl der verschiedenen
Skalierungen bei denen Anchor-Boxes für jedes Seitenverhältnis erzeugt werden.
Zur Bestimmung der Anchor-Skalierungen wird die Grundskalierung der
Anchor-Boxes, die über den generischen Parameter 'scale' gegeben
ist, mit jeder Subskalierung multipliziert.
Die Subskalierungen werden wie folgt berechnet
wobei
.
Der Parameter Angles bestimmt die Orientierung der Anchor-Boxes
für den Instanztyp 'rectangle2'. Die Werte müssen in
Bogenmaß angegeben werden. Wenn Angles ein leeres Tupel ist,
wird der Instanztyp implizit auf 'rectangle1' gesetzt, wenn nicht
anders über den generischen Parameter 'instance_type' angegeben.
Für jeden Punkt im Anchor-Gitter und jede Kombination von Seitenverhältnis,
Subskalierung und Winkel wird eine Anchor-Box erzeugt, die das
Eingabebild gleichmäßig abdecken.
Typischerweise ist der Ausgabelayer DLLayerAnchors ein
zuführender Eingabelayer für einen Box-Target- und einen Box-Proposal-Layer,
um ein Detektions-Modell zu erstellen.
Weitere Informationen zu Anchors und 'instance_type' sind
im Kapitel Deep Learning / Objektdetektion und Instanz-Segmentierung zu finden.
Die folgenden generischen Parameter GenParamName und die
entsprechenden Werte GenParamValue werden unterstützt:
Instanztyp der Anchors. Mögliche Werte:
'rectangle1': achsenparallele Rechtecke.
'rectangle2': orientierte Rechtecke.
Default: 'rectangle1'.
Bestimmt, ob apply_dl_model die Ausgabe dieses Layers im
Dictionary DLResultBatch zurückgibt, auch ohne den
Layer in Outputs anzugeben ('true'), oder
nur falls er angegeben wird ('false').
Default: 'false'
Grundskalierung der Anchor-Boxes. Siehe die obige Beschreibung für weitere Informationen.
Default: 4.0
Bestimmte Parameter von Layern, die mit create_dl_layer_anchors
erzeugt wurden, können mit weiteren Operatoren gesetzt und abgerufen werden.
Die folgenden Tabellen geben einen Überblick, welche Parameter mit
set_dl_model_layer_param gesetzt werden können und welche mit
get_dl_model_layer_param oder get_dl_layer_param ausgelesen
werden können. Es ist zu beachten, dass die Operatoren
set_dl_model_layer_param und get_dl_model_layer_param ein
Modell benötigen, das mit create_dl_model erzeugt wurde.
| Layer-interne Parameter | set |
get
|
|---|---|---|
'anchor_angles' (Angles) |
x
|
|
'anchor_aspect_ratios' (AspectRatios) |
x
|
|
'anchor_num_subscales' (NumSubscales) |
x
|
|
'input_layer' (DLLayerInput) |
x
|
|
'name' (LayerName) |
x |
x
|
'output_layer' (DLLayerAnchors) |
x
|
|
| 'shape' | x
|
|
| 'type' | x
|
| Generische Layer-Parameter | set |
get
|
|---|---|---|
| 'instance_type' | x
|
|
| 'is_inference_output' | x |
x
|
| 'num_trainable_params' | x
|
|
| 'scale' | x
|
DLLayerInput (input_control) dl_layer → (handle)
Zuführender Layer zur Ermittlung der Anchor-Gittergröße.
DLLayerInputImage (input_control) dl_layer → (handle)
Zuführender Layer zur Ermittlung der Gitterskalierung und Anchorgröße.
LayerName (input_control) string → (string)
Name des Ausgabelayers.
AspectRatios (input_control) number-array → (real / integer)
Anchor-Seitenverhältnisse.
Default: [0.5,1.0,2.0]
NumSubscales (input_control) number → (integer)
Anzahl Anchor-Subskalierungen.
Default: 3
Restriktion:
NumSubscales > 0
Angles (input_control) number-array → (real / integer)
Anchor-Orientierungen.
Default: []
GenParamName (input_control) attribute.name(-array) → (string)
Namen der generischen Eingabeparameter.
Default: []
Werteliste: 'instance_type', 'is_inference_output', 'scale'
GenParamValue (input_control) attribute.value(-array) → (string / integer / real)
Werte der generischen Eingabeparameter.
Default: []
Wertevorschläge: 'rectangle1', 'rectangle2', 'true', 'false'
DLLayerAnchors (output_control) dl_layer → (handle)
Anchors-Layer.
* Minimal example for the usage of layers
* - create_dl_layer_anchors
* - create_dl_layer_box_proposals
* - create_dl_layer_box_targets
* for creating a model to perform object detection.
*
* Define the input image layer.
create_dl_layer_input ('image', [224,224,3], [], [], DLLayerInputImage)
* Define the input ground truth box layers.
create_dl_layer_input ('bbox_row1', [1, 1, 10], ['allow_smaller_tuple'], \
['true'], DLLayerInputRow1)
create_dl_layer_input ('bbox_row2', [1, 1, 10], ['allow_smaller_tuple'], \
['true'], DLLayerInputRow2)
create_dl_layer_input ('bbox_col1', [1, 1, 10], ['allow_smaller_tuple'], \
['true'], DLLayerInputCol1)
create_dl_layer_input ('bbox_col2', [1, 1, 10], ['allow_smaller_tuple'], \
['true'], DLLayerInputCol2)
create_dl_layer_input ('bbox_label_id', [1, 1, 10], \
['allow_smaller_tuple'], ['true'], \
DLLayerInputLabelID)
* Concatenate all box coordinates.
create_dl_layer_concat ([DLLayerInputRow1, DLLayerInputCol1, \
DLLayerInputRow2, DLLayerInputCol2, \
DLLayerInputLabelID], 'gt_boxes', \
'height', [], [], DLLayerGTBoxes)
*
* Perform some operations on the input image to extract features.
create_dl_layer_convolution (DLLayerInputImage, 'conv', 3, 1, 1, 32, 1, \
'half_kernel_size', 'relu', [], [], \
DLLayerConvolution)
create_dl_layer_pooling (DLLayerConvolution, 'pool', 2, 2, 'none', \
'maximum', [], [], DLLayerPooling)
*
* Create the anchor boxes.
create_dl_layer_anchors (DLLayerPooling, DLLayerInputImage, 'anchor', \
[0.5,1.0,2.0], 3, [], [], [], DLLayerAnchors)
*
* Generate the class and box regression targets for the anchors
* according to the ground truth boxes.
Targets := ['cls_target', 'box_target']
NumClasses := 3
create_dl_layer_box_targets (DLLayerAnchors, DLLayerGTBoxes, [], \
Targets, 'anchors', Targets, NumClasses, \
[], [], DLLayerClassTarget, _, \
DLLayerBoxTarget, _, _, _, _)
*
* For this example, we treat the targets as predictions and
* apply them directly to the anchors to get the ground truth
* boxes as output.
create_dl_layer_box_proposals (DLLayerClassTarget, DLLayerBoxTarget, \
DLLayerAnchors, DLLayerInputImage, \
'box_proposals', [], [], \
DLLayerBoxProposals)
*
* Create the model.
OutputLayers := DLLayerBoxProposals
create_dl_model (OutputLayers, DLModelHandle)
*
* Prepare the model for using it as a detection model.
set_dl_model_param (DLModelHandle, 'type', 'detection')
ClassIDs := [0,1,2]
set_dl_model_param (DLModelHandle, 'class_ids', ClassIDs)
*
* Create a sample.
create_dict (DLSample)
gen_image_const (Image, 'real', 224, 224)
gen_circle (Circle, [50., 100.], [50., 120.], [20., 30.])
overpaint_region (Image, Circle, 255, 'fill')
compose3 (Image, Image, Image, Image)
set_dict_object (Image, DLSample, 'image')
smallest_rectangle1 (Circle, Row1, Col1, Row2, Col2)
set_dict_tuple (DLSample, 'bbox_row1', Row1)
set_dict_tuple (DLSample, 'bbox_row2', Row2)
set_dict_tuple (DLSample, 'bbox_col1', Col1)
set_dict_tuple (DLSample, 'bbox_col2', Col2)
set_dict_tuple (DLSample, 'bbox_label_id', [1,2])
*
* Apply the detection model.
apply_dl_model (DLModelHandle, DLSample, [], DLResult)
*
* Display ground truth and result.
create_dict (DLDatasetInfo)
set_dict_tuple (DLDatasetInfo, 'class_ids', ClassIDs)
set_dict_tuple (DLDatasetInfo, 'class_names', \
['class_0', 'class_1', 'class_2'])
create_dict (WindowHandleDict)
dev_display_dl_data (DLSample, DLResult, DLDatasetInfo, \
['image', 'bbox_ground_truth', 'bbox_result'], \
[], WindowHandleDict)
stop ()
dev_close_window_dict (WindowHandleDict)
create_dl_layer_box_targets,
create_dl_layer_box_proposals
Deep Learning Professional