gen_dl_model_heatmap
— Inferieren eines Samples und generieren einer Heatmap.
gen_dl_model_heatmap( : : DLModelHandle, DLSample, HeatmapMethod, TargetClasses, GenParam : DLResult)
Der Operator gen_dl_model_heatmap
inferiert das Sample
DLSample
und generiert eine Heatmap der in
TargetClasses
angegebenen Klasse.
Dabei kann DLSample
ein einzelnes Dictionary oder ein Tupel von
Dictionaries verschiedener Samples sein.
Dafür wird das in DLModelHandle
gegebene Modell verwendet.
Der Parameter HeatmapMethod
bestimmt, mit welcher Methode die
Heatmap berechnet wird.
Die Resultate werden in DLResult
zurückgegeben mit einem
Ergebnis-Dictionary für jedes übergebene Sample.
Es gilt zu bemerken, dass DLResult
jeweils neu angelegt wird und
somit bereits existierende Parameter dieses Namens überschrieben werden.
Eine Heatmap kann nützlich sein bei der Analyse, welche Teile eines Bildes
bei seiner Inferenz in eine bestimmte Klasse einen starken Einfluss haben.
Form und Größe dieser Bereiche und somit die Heatmaps können sich für
verschiedene Netzwerke stark von einander unterscheiden, insbesondere wenn
sich die Architekturen unterscheiden.
Es gibt verschiedene Methoden um eine Heatmap zu berechnen.
Die folgenden Methoden können über den Parameter HeatmapMethod
ausgewählt werden:
Steht für "Gradient-weighted Class Activation Mapping (Grad-CAM)". Für weitere Informationen zu dieser Methode wird auf die unten zitierte Referenz verwiesen.
Der Eingabeparameter TargetClasses
bestimmt die Zielklasse,
die Klasse, für welche die Heatmap generiert wird.
Als Wert wird die Klassen-ID gesetzt.
Alternativ kann auch ein leeres Tupel angegeben werden. In diesem Fall wird
die Heatmap für die Klasse mit höchstem Konfidenzwert generiert, also
die Klasse der besten Vorhersage.
Folgende Werte können über das Dictionary GenParam
gesetzt werden:
target_conv_layer
:
Legt fest, von welchem Faltungs-Layer die Aktivierung und
der Gradient zur Erstellung der Heatmap verwendet werden sollen.
Der Faltungs-Layer kann über seinen Namen NAME
bestimmt werden,
wie er von 'summary' in get_dl_model_param
zurückgegeben wird, z.B. 'conv10' .
Als Standardwert wird der letzte (tiefste) Faltungs-Layer mit einer
nicht-trivialen Aktivierung (Weite und Höhe ungleich 1) verwendet.
Es wird empfohlen den Standardwert zu verwenden, da sich die
Aktivierung des tiefsten Faltungs-Layer in der Regel am besten zum
Erzeugen der Heatmap eignet.
use_conv_only
:
Falls der ausgewählte Faltungs-Layer (mittels target_conv_layer
)
mit einem direkt folgenden ReLU-Layer fusioniert ist,
kann mit diesem Parameter angegeben werden, von welchem dieser beiden
Layer die Aktivierung und die Gradienten für die Heatmap genutzt werden
sollen. Die folgenden Werte werden unterstützt:
'true' : Faltungs-Layer
'false' : ReLU-Layer
Der Standardwert für use_conv_only
ist 'true' .
scaling
:Bestimmt die Art der Skalierung der Heatmap. Die folgenden Werte werden unterstützt:
'scale_after_relu' : Alle negativen Werte der Heatmap werden auf 0 gesetzt. Anschließend werden alle Werte auf den Wertebereich [0,1] skaliert. Dadurch können auch Bereiche mit schwacher Aktivierung sehr hohe Werte nahe 1 erhalten.
'scale_before_relu' : All Werte der Heatmap werden durch den maximalen Wert der Absolutbeträge dividiert und anschließend alle negativen Werte auf 0 gesetzt. Dadurch werden die Werte in den Bereich [0,1] skaliert. Im Vergleich zu 'scale_after_relu' müssen schwach aktivierte Bereiche jedoch nicht hohe Werte nahe der 1 bekommen.
'none' : Die Werte der Heatmap werden nicht skaliert.
Der Standardwert für scaling
ist 'scale_after_relu' .
Jedes Ergebnis-Dictionary in DLResult
beinhaltet die
Inferenz-Resultate wie sie mit apply_dl_model
erhalten werden.
Zusätzlich beinhaltet es ein verschachteltes Dictionary unter dem Schlüssel
heatmap_method
, wobei method
der Name der Methode zur
Berechnung der Heatmap ist, wie in HeatmapMethod
gegeben.
In diesem verschachtelten Dictionary ist die Heatmap unter dem Schlüssel
heatmap_image_class_classID
abgespeichert, wobei classID
die ID der Zielklasse ist.
Um diesen Operator ausführen zu können, werden cuDNN und cuBLAS benötigt und
'runtime' muss auf 'gpu' gesetzt sein
(siehe get_dl_model_param
).
Für weitere Details wird auf den „Installation Guide“
, Abschnitt
„Requirements for Deep Learning“, verwiesen.
Die Heatmap dient als Hilfe um Klassifikationsergebnisse besser zu
verstehen und ist nicht zur Segmentierung geeignet.
Außerdem sei bemerkt, dass gen_dl_model_heatmap
derzeit nur
Modelle mit 'type' ='classification' unterstützt.
DLModelHandle
(input_control) dl_model →
(handle)
Handle des Deep Learning-basierten Modells.
DLSample
(input_control) dict-array →
(handle)
Dictionaries mit den Eingabedaten der Samples.
HeatmapMethod
(input_control) string →
(string)
Methode nach der die Heatmap berechnet wird.
Defaultwert: 'grad_cam'
TargetClasses
(input_control) tuple(-array) →
(integer)
IDs der Zielklasse.
Defaultwert: []
GenParam
(input_control) dict →
(handle)
Dictionary für generische Parameter.
Defaultwert: []
DLResult
(output_control) dict(-array) →
(handle)
Dictionaries mit den Resultaten.
R. R. Selvaraju, M. Cogswell, A. Das, R. Vedantam, D. Parikh, D. Batra: "Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization," 2017 IEEE International Conference on Computer Vision (ICCV), Venice, 2017, pp. 618-626. doi: 10.1109/ICCV.2017.74
Deep Learning Inference