Computing Image Saliency via Neural Network Classifier

Angenommen, wir haben ein Faltungs-Neuronales Netz, das darauf trainiert ist, Bilder (mit oder ohne Graustufen) in @ zu klassifiziere Tensor-Flow.

Gegeben das trainierte Netz und ein Testbild, kann man verfolgen, welche Pixel davon hervorstechend sind, oder "gleichwertig", welche Pixel am meisten für die Ausgabeklassifizierung des Bildes verantwortlich sind. Eine nette Erklärung und Implementierungsdetails in Theano finden Sie in diesemArtike.

Angenommen, für die erste Ebene von Faltungen, die direkt mit dem Eingabebild verknüpft ist, haben wir den Gradienten für die Parameter jedes Faltungskernels. die Klassifizierungsfunktion.

Wie kann man den Farbverlauf zurück auf die Eingabeebene übertragen, um für jedes Pixel des Bildes eine partielle Ableitung zu berechnen?

Propagieren und Akkumulieren des Gradienten würde uns die hervorstechenden Pixel geben (dies sind die mit einer großen Ableitung der Größe).

Um den Gradienten zu finden. die kerne der ersten schicht, die ich bisher gemacht habe:

Ersetzt den üblichen Verlustoperator durch den Ausgabe-Layer-Operator.Benutzt die Funktion "compute_gradient",

lles in allem sieht es so aus:

opt = tf.train.GradientDescentOptimizer (1)grads = opt.compute_gradients (Ausgabe)grad_var = [(grad1) für grad in grads] g1 = sess.run ([grad_var [0]])

Wo ist die "Ausgabe" das Maximum der Ausgabeschicht des NN. Und g1 ist ein (k, k, 1, M) -Tensor, da ich M: k x k Faltungskerne auf der ersten Schicht verwendet habe.

Jetzt muss ich den richtigen Weg finden, um g1 auf jedem Eingabepixel zu verbreiten, um deren Ableitung wrt zu berechnen. die Ausgabe

Antworten auf die Frage(2)

Ihre Antwort auf die Frage