gen_dl_model_heatmapT_gen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmap (Operator)

Name

gen_dl_model_heatmapT_gen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmap — Inferieren eines Samples und generieren einer Heatmap.

Signatur

gen_dl_model_heatmap( : : DLModelHandle, DLSample, HeatmapMethod, TargetClasses, GenParam : DLResult)

Herror T_gen_dl_model_heatmap(const Htuple DLModelHandle, const Htuple DLSample, const Htuple HeatmapMethod, const Htuple TargetClasses, const Htuple GenParam, Htuple* DLResult)

void GenDlModelHeatmap(const HTuple& DLModelHandle, const HTuple& DLSample, const HTuple& HeatmapMethod, const HTuple& TargetClasses, const HTuple& GenParam, HTuple* DLResult)

HDictArray HDlModel::GenDlModelHeatmap(const HDictArray& DLSample, const HString& HeatmapMethod, const HTuple& TargetClasses, const HDict& GenParam) const

HDictArray HDlModel::GenDlModelHeatmap(const HDictArray& DLSample, const char* HeatmapMethod, const HTuple& TargetClasses, const HDict& GenParam) const

HDictArray HDlModel::GenDlModelHeatmap(const HDictArray& DLSample, const wchar_t* HeatmapMethod, const HTuple& TargetClasses, const HDict& GenParam) const   (Nur Windows)

static void HOperatorSet.GenDlModelHeatmap(HTuple DLModelHandle, HTuple DLSample, HTuple heatmapMethod, HTuple targetClasses, HTuple genParam, out HTuple DLResult)

HDict[] HDlModel.GenDlModelHeatmap(HDict[] DLSample, string heatmapMethod, HTuple targetClasses, HDict genParam)

Beschreibung

Der Operator gen_dl_model_heatmapgen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmapGenDlModelHeatmap inferiert das Sample DLSampleDLSampleDLSampleDLSampleDLSample und generiert eine Heatmap der in TargetClassesTargetClassesTargetClassesTargetClassestargetClasses angegebenen Klasse. Dabei kann DLSampleDLSampleDLSampleDLSampleDLSample ein einzelnes Dictionary oder ein Tupel von Dictionaries verschiedener Samples sein. Dafür wird das in DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle gegebene Modell verwendet. Der Parameter HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethod bestimmt, mit welcher Methode die Heatmap berechnet wird. Die Resultate werden in DLResultDLResultDLResultDLResultDLResult zurückgegeben mit einem Ergebnis-Dictionary für jedes übergebene Sample. Es gilt zu bemerken, dass DLResultDLResultDLResultDLResultDLResult 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 HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethod ausgewählt werden:

'grad_cam'"grad_cam""grad_cam""grad_cam""grad_cam":

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 TargetClassesTargetClassesTargetClassesTargetClassestargetClasses 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 GenParamGenParamGenParamGenParamgenParam gesetzt werden:

target_conv_layertarget_conv_layertarget_conv_layertarget_conv_layertargetConvLayer:

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'"summary""summary""summary""summary" in get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam zurückgegeben wird, z.B. 'conv10'"conv10""conv10""conv10""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_onlyuse_conv_onlyuse_conv_onlyuse_conv_onlyuseConvOnly:

Falls der ausgewählte Faltungs-Layer (mittels target_conv_layertarget_conv_layertarget_conv_layertarget_conv_layertargetConvLayer) 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'"true""true""true""true": Faltungs-Layer

'false'"false""false""false""false": ReLU-Layer

Der Standardwert für use_conv_onlyuse_conv_onlyuse_conv_onlyuse_conv_onlyuseConvOnly ist 'true'"true""true""true""true".

scalingscalingscalingscalingscaling:

Bestimmt die Art der Skalierung der Heatmap. Die folgenden Werte werden unterstützt:

'scale_after_relu'"scale_after_relu""scale_after_relu""scale_after_relu""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'"scale_before_relu""scale_before_relu""scale_before_relu""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'"scale_after_relu""scale_after_relu""scale_after_relu""scale_after_relu" müssen schwach aktivierte Bereiche jedoch nicht hohe Werte nahe der 1 bekommen.

'none'"none""none""none""none": Die Werte der Heatmap werden nicht skaliert.

Der Standardwert für scalingscalingscalingscalingscaling ist 'scale_after_relu'"scale_after_relu""scale_after_relu""scale_after_relu""scale_after_relu".

Jedes Ergebnis-Dictionary in DLResultDLResultDLResultDLResultDLResult beinhaltet die Inferenz-Resultate wie sie mit apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel erhalten werden. Zusätzlich beinhaltet es ein verschachteltes Dictionary unter dem Schlüssel heatmap_methodheatmap_methodheatmap_methodheatmap_methodheatmapMethod, wobei method der Name der Methode zur Berechnung der Heatmap ist, wie in HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethod gegeben. In diesem verschachtelten Dictionary ist die Heatmap unter dem Schlüssel heatmap_image_class_classIDheatmap_image_class_classIDheatmap_image_class_classIDheatmap_image_class_classIDheatmapImageClassClassID abgespeichert, wobei classID die ID der Zielklasse ist.

Achtung

Um diesen Operator ausführen zu können, werden cuDNN und cuBLAS benötigt und 'runtime'"runtime""runtime""runtime""runtime" muss auf 'gpu'"gpu""gpu""gpu""gpu" gesetzt sein (siehe get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParam). 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_heatmapgen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmapGenDlModelHeatmap derzeit nur Modelle mit 'type'"type""type""type""type"='classification'"classification""classification""classification""classification" unterstützt.

Ausführungsinformationen

Parameter

DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandle (input_control)  dl_model HDlModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-basierten Modells.

DLSampleDLSampleDLSampleDLSampleDLSample (input_control)  dict-array HDict, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionaries mit den Eingabedaten der Samples.

HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethod (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Methode nach der die Heatmap berechnet wird.

Defaultwert: 'grad_cam' "grad_cam" "grad_cam" "grad_cam" "grad_cam"

TargetClassesTargetClassesTargetClassesTargetClassestargetClasses (input_control)  tuple(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

IDs der Zielklasse.

Defaultwert: []

GenParamGenParamGenParamGenParamgenParam (input_control)  dict HDict, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionary für generische Parameter.

Defaultwert: []

DLResultDLResultDLResultDLResultDLResult (output_control)  dict(-array) HDict, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionaries mit den Resultaten.

Vorgänger

apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModel

Literatur

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

Modul

Deep Learning Inference