[PYTHON] GradCAM mit 22 Codezeilen. tf_explain ist möglicherweise einfach zu bedienen, ich empfehle es!

Zweck

Es scheint ** tf_explain ** zu geben. Es scheint, dass ** GradCAM ** dort als Modul enthalten ist. Betrachtet man den Github, der ihn benutzt, ** GradCAM ** konnte mit nur 22 Zeilen (mit Leerzeilen) ausgeführt werden. Ich denke es ist wundervoll Ich habe versucht, es zu bewegen.

22 Codezeilen

Sie finden diesen Code auf Github unten. https://github.com/sicara/tf-explain/blob/master/examples/core/grad_cam.py

Der Code unten ist alles, also

python grad_cam_py.py

Es funktioniert einfach.

grad_cam.py


import tensorflow as tf

from tf_explain.core.grad_cam import GradCAM

IMAGE_PATH = "./cat.jpg "

if __name__ == "__main__":
    model = tf.keras.applications.vgg16.VGG16(weights="imagenet", include_top=True)

    img = tf.keras.preprocessing.image.load_img(IMAGE_PATH, target_size=(224, 224))
    img = tf.keras.preprocessing.image.img_to_array(img)

    model.summary()
    data = ([img], None)

    tabby_cat_class_index = 281
    explainer = GradCAM()
    # Compute GradCAM on VGG16
    grid = explainer.explain(
        data, model, class_index=tabby_cat_class_index, layer_name="block5_conv3"
    )
    explainer.save(grid, ".", "grad_cam.png ")

Ausführungsergebnis

Das Bild der Katze ("Tabby-Katze" darin) stammt aus Wikipedia. https://en.wikipedia.org/wiki/Tabby_cat Diese Art von Katze scheint dadurch gekennzeichnet zu sein, dass der Buchstabe M um die Augen in der Mitte des Gesichts liegt ~~ ** der Buchstabe M auf der "Stirn" *. ( "Es gibt einen Buchstaben M, um die Augen in der Mitte des Gesichts zu umgeben" (falsch), aber für M nicht unsichtbar ...)

sample1

cat_sample1.jpg grad_cam_sample1.png

sample2

cat_sample2.jpg grad_cam_sample2.png

Kommentare zu den Ergebnissen

Das Ergebnis von GradCAM scheint richtig zu sein. (Jedoch, Der Zweck dieses Artikels ist, dass tf_explain einfach zu verwenden ist Kein Kommentar zur Qualität von GradCAM selbst. Nur für den Fall, ** Wenn Sie zu viel Gefühl in die Anzeige von GradCAM einbringen, wird es der Psychologie nahe kommen, dass die Wahrsagerei der Wahrsagerin an der Tagesordnung ist. Ich denke, Sie sollten sie so kalt wie möglich betrachten, was eine völlige Seite ist. **)

Umgebung

Es ist Windows 10. Es gibt keine GPU. tensorflow 2.0.0 tf-explain 0.2.1

Die obige tf-EXPLAIN ist wahrscheinlich nicht enthalten. Installieren Sie sie daher mit pip oder einer anderen normalen Methode. ** Ich denke, dass 2.1.x jetzt (11. März 2020) das neueste für Tensorflow ist, aber ich habe einen schrecklichen Fehler erhalten. ** **. ** Ich weiß nicht, wie ich es heilen soll, ich habe eine vollständige Idee! Als ich es auf 2.0.0 eingestellt habe, hat es funktioniert. ** **.

Dieser Abschnitt ist ein Abschnitt, in dem die Natur von CNN und nicht tf_explain angezeigt wird (abgesehen von diesem Artikel?).

cat2_2nd_224.jpggrad_cam_cat2_2nd_224.png

cat2_3rd_224.jpggrad_cam_cat2_3rd_224.png

cat2_4th_224.jpggrad_cam_cat2_4th_224.png

cat2_5th_224.jpggrad_cam_cat2_5th_224.png

cat2_6th_224.jpggrad_cam_cat2_6th_224.png

Im Fall dieses Beispiels Ist es der Bereich von ungefähr 60 x 60 Pixel, der die Funktionen auf einmal erfasst? ⇒ Im letzten Bild haben Sie das Gefühl, auf jeden Bereich einzeln zu reagieren. Es kann auch genauer sein, das Bild und den interessierenden Punkt auch im nicht überlappenden Modus anzuzeigen (gibt es?). (Weil es schwer zu verstehen ist, ob es von der Helligkeit des Originalbildes beeinflusst wird.) ⇒⇒ CNN ist anfällig für "mehr Bilder (Bilder nach oben)". ⇒⇒⇒ Ich bin beeindruckt, wenn ein Modell erscheint, das die Gesamtkonfiguration verfolgt und eine Anzeige zeigt, die von GradCAM erfasst zu werden scheint. .. .. (Ob es von GradCAM ausgedrückt werden kann, ist eine andere Geschichte ... Abgesehen von der Tatsache, dass es nicht von GradCAM ausgedrückt werden kann, denke ich, dass es großartig wäre, wenn ein solches Modell herauskommen würde. Kapselsystem usw. Wenn ein Modell angezeigt wird. )

Bezogen auf den obigen Abschnitt (daher beiseite). CNN ist "schwach zum Neigen (schwach zum Vergrößern)".

Wir haben auch Diagramme hinzugefügt, damit Sie den Fokus von GradCAM besser verstehen. Ich habe auch die Wahrscheinlichkeit hinzugefügt.

cat2_2nd_224.jpggrad_cam_cat2_2nd_224.pnggrad_cam_cat2_2nd_224ex.png

[[('n02123045', 'tabby', 0.40362296),
  ('n02124075', 'Egyptian_cat', 0.34350035),
  ('n02123159', 'tiger_cat', 0.1646882),
  ('n02747177', 'ashcan', 0.022324266),
  ('n02127052', 'lynx', 0.009675921),
  ('n03223299', 'doormat', 0.008641529),
  ('n02123394', 'Persian_cat', 0.00528028),
  ('n02909870', 'bucket', 0.0034843169),
  ('n04040759', 'radiator', 0.0028082374),
  ('n03958227', 'plastic_bag', 0.002630277),
  ('n04265275', 'space_heater', 0.002209679),
  ('n04493381', 'tub', 0.0015652123),
  ('n04049303', 'rain_barrel', 0.001464855),
  ('n04553703', 'washbasin', 0.0014180988),
  ('n04589890', 'window_screen', 0.0012623073),
  ('n03887697', 'paper_towel', 0.0012330494),
  ('n04522168', 'vase', 0.0012083148),
  ('n02123597', 'Siamese_cat', 0.0010707852),
  ('n03950228', 'pitcher', 0.0010204213),
  ('n03255030', 'dumbbell', 0.00096622825)]]

cat2_6th_224.jpggrad_cam_cat2_6th_224.pnggrad_cam_cat2_6th_224ex.png

[[('n03958227', 'plastic_bag', 0.23590706),
  ('n04209133', 'shower_cap', 0.117050014),
  ('n02124075', 'Egyptian_cat', 0.068308175),
  ('n01968897', 'chambered_nautilus', 0.052455623),
  ('n03825788', 'nipple', 0.042889122),
  ('n02123597', 'Siamese_cat', 0.040462725),
  ('n02120079', 'Arctic_fox', 0.02897999),
  ('n03868863', 'oxygen_mask', 0.018255476),
  ('n04370456', 'sweatshirt', 0.018049669),
  ('n02123045', 'tabby', 0.017420992),
  ('n04525038', 'velvet', 0.01728542),
  ('n02123394', 'Persian_cat', 0.0140852835),
  ('n03534580', 'hoopskirt', 0.012244948),
  ('n03724870', 'mask', 0.0106809465),
  ('n03045698', 'cloak', 0.007704126),
  ('n02120505', 'grey_fox', 0.0072637224),
  ('n02326432', 'hare', 0.006367313),
  ('n04127249', 'safety_pin', 0.006034479),
  ('n03887697', 'paper_towel', 0.0056772656),
  ('n04033995', 'quilt', 0.0056173983)]]

** Tabby ist ungefähr 10 .. .. .. ** **. ⇒ Man kann sagen, dass Sie es in verschiedenen Größen tun sollten, aber ich denke, es ist besser, sich der Komposition, CNN, etwas bewusster zu sein. ** Ich habe ein Beispiel gemacht, indem ich die Position des Buchstabens M, der ein Merkmal von Tabby ist, falsch verstanden habe **, sodass der Buchstabe M, der wesentlich ist, außerhalb des Bildbereichs liegt. (Eigentlich ist es besser, von vorne zu beginnen ... Ich denke, es ist immer noch nutzlos, selbst wenn ich es noch einmal versuche, also werde ich es für einen Moment verschieben.)

Ich bezog mich auf das Folgende, um die Rate zu erhalten. https://medium.com/@gkadusumilli/image-recognition-using-pre-trained-xception-model-in-5-steps-96ac858f4206

Zeigt die geänderte Quelle an.

import tensorflow as tf

import numpy as np ##
import pprint ##

from tf_explain.core.grad_cam import GradCAM

from tensorflow.keras.applications.vgg16 import decode_predictions ##

IMAGE_PATH = "./cat2_2nd_224.jpg "

if __name__ == "__main__":
    model = tf.keras.applications.vgg16.VGG16(weights="imagenet", include_top=True)

    img = tf.keras.preprocessing.image.load_img(IMAGE_PATH, target_size=(224, 224))
    img = tf.keras.preprocessing.image.img_to_array(img)
    
    predictions=model.predict(np.array([img])) ##
    pprint.pprint(decode_predictions(predictions,top=20))##

    model.summary()
    data = ([img], None)

    tabby_cat_class_index = 281
    explainer = GradCAM()
    # Compute GradCAM on VGG16
    grid = explainer.explain(
        data, model, class_index=tabby_cat_class_index, layer_name="block5_conv3"
    )
    explainer.save(grid, ".", "grad_cam_cat2_2nd_224.png ")
    
    grid = explainer.explain( ##
        data, model, class_index=tabby_cat_class_index, layer_name="block5_conv3", image_weight=0.01 ##
    ) ##
    explainer.save(grid, ".", "grad_cam_cat2_2nd_224ex.png ") ##

Zusammenfassung

Die Umgebung entwickelt sich jeden Tag weiter (** tf_explain **). Wenn Sie Kommentare haben, lassen Sie es uns bitte wissen.

Recommended Posts

GradCAM mit 22 Codezeilen. tf_explain ist möglicherweise einfach zu bedienen, ich empfehle es!
Das Geräusch von Mr. Tick am Arbeitsplatz ist ... Ich habe es mit dem Code geschafft
Vergleich von GCP-Computerdiensten [Ich möchte es serverlos verwenden]
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Verwendung von VS Code (Codeserver) mit Google Colab in nur 3 Zeilen
Der tree.plot_tree von scikit-learn war sehr einfach und bequem, daher habe ich versucht, zusammenzufassen, wie man es einfach benutzt.
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Ich möchte nur verschiedene Zeilen der Textdatei mit diff anzeigen
Ich habe versucht, Java mit Termux unter Verwendung von Termux Arch zu verwenden, aber es hat nicht funktioniert
Machen Sie es sich einfach, die Zeit von AWS CloudWatch-Ereignissen mit CDK anzugeben.
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich möchte MATLAB feval mit Python verwenden
Ich habe Flask mit Remote-Containern von VS Code ausprobiert
Ich möchte OREMO mit setParam sein!
Die Geschichte des Versuchs, Tensorboard mit Pytorch zu verwenden
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Ich möchte -inf nicht mit np.log verwenden
Ich möchte ip vrf mit SONiC verwenden
Ich habe versucht, es einfach zu machen, die Einstellung des authentifizierten Proxys auf Jupyter zu ändern
Ich mag es nicht, mit der Veröffentlichung von Pokemon Go frustriert zu sein, deshalb habe ich ein Skript erstellt, um die Veröffentlichung zu erkennen und zu twittern
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Vorbereiten der Verwendung von Tensorflow (Anaconda) mit Visual Studio Code
[Einführung in Word Cloud] Einfache Verwendung mit Jetson-nano ♬
Einfache Erstellung von C ++ - Code mit CMake auf Docker
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
[Python] Ich habe einen Test von "Streamlit" geschrieben, der das Erstellen von Visualisierungsanwendungen erleichtert.
Es kann ein Problem sein, Japanisch für Ordnernamen und Notizbuchnamen in Databricks zu verwenden