gen_dl_model_heatmapT_gen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmapgen_dl_model_heatmap (Operator)

Name

gen_dl_model_heatmapT_gen_dl_model_heatmapGenDlModelHeatmapGenDlModelHeatmapgen_dl_model_heatmap — 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)

def gen_dl_model_heatmap(dlmodel_handle: HHandle, dlsample: Sequence[HHandle], heatmap_method: str, target_classes: MaybeSequence[int], gen_param: HHandle) -> Sequence[HHandle]

def gen_dl_model_heatmap_s(dlmodel_handle: HHandle, dlsample: Sequence[HHandle], heatmap_method: str, target_classes: MaybeSequence[int], gen_param: HHandle) -> HHandle

Beschreibung

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

'grad_cam'"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 TargetClassesTargetClassesTargetClassesTargetClassestargetClassestarget_classes 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 GenParamGenParamGenParamGenParamgenParamgen_param 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'"summary""summary""summary""summary""summary" in get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param zurückgegeben wird, z.B. 'conv10'"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_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'"true""true""true""true""true": Faltungs-Layer

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

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

scaling:

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

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

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

Jedes Ergebnis-Dictionary in DLResultDLResultDLResultDLResultDLResultdlresult beinhaltet die Inferenz-Resultate wie sie mit apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModelapply_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 HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethodheatmap_method gegeben. In diesem verschachtelten Dictionary ist die Heatmap unter dem Schlüssel heatmap_image_class_classID abgespeichert, wobei classID die ID der Zielklasse ist.

Achtung

Systemvoraussetzungen: Um diesen Operator auf der GPU auszuführen, indem 'runtime'"runtime""runtime""runtime""runtime""runtime" auf 'gpu'"gpu""gpu""gpu""gpu""gpu" gesetzt ist (siehe get_dl_model_paramget_dl_model_paramGetDlModelParamGetDlModelParamGetDlModelParamget_dl_model_param), werden cuDNN und cuBLAS benötigt. Für weitere Details wird auf den „Installation Guide“, Abschnitt „Requirements for Deep Learning and Deep-Learning-Based Methods“, verwiesen. Alternativ kann dieser Operator auch auf der CPU ausgeführt werden, indem man 'runtime'"runtime""runtime""runtime""runtime""runtime" auf 'cpu'"cpu""cpu""cpu""cpu""cpu" setzt.

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_heatmapGenDlModelHeatmapGenDlModelHeatmapGenDlModelHeatmapgen_dl_model_heatmap derzeit nur Modelle mit 'type'"type""type""type""type""type"='classification'"classification""classification""classification""classification""classification" unterstützt.

Ausführungsinformationen

Parameter

DLModelHandleDLModelHandleDLModelHandleDLModelHandleDLModelHandledlmodel_handle (input_control)  dl_model HDlModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Deep Learning-basierten Modells.

DLSampleDLSampleDLSampleDLSampleDLSampledlsample (input_control)  dict-array HDict, HTupleSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionaries mit den Eingabedaten der Samples.

HeatmapMethodHeatmapMethodHeatmapMethodHeatmapMethodheatmapMethodheatmap_method (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Methode nach der die Heatmap berechnet wird.

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

TargetClassesTargetClassesTargetClassesTargetClassestargetClassestarget_classes (input_control)  tuple(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

IDs der Zielklasse.

Defaultwert: []

GenParamGenParamGenParamGenParamgenParamgen_param (input_control)  dict HDict, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionary für generische Parameter.

Defaultwert: []

DLResultDLResultDLResultDLResultDLResultdlresult (output_control)  dict(-array) HDict, HTupleSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Dictionaries mit den Resultaten.

Vorgänger

apply_dl_modelapply_dl_modelApplyDlModelApplyDlModelApplyDlModelapply_dl_model

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