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.
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 ")
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
sample2
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. **)
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. ** **.
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. )
Wir haben auch Diagramme hinzugefügt, damit Sie den Fokus von GradCAM besser verstehen. Ich habe auch die Wahrscheinlichkeit hinzugefügt.
[[('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)]]
[[('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 ") ##
Die Umgebung entwickelt sich jeden Tag weiter (** tf_explain **). Wenn Sie Kommentare haben, lassen Sie es uns bitte wissen.
Recommended Posts