Il semble y avoir ** tf_explain **. Il semble que ** GradCAM ** y soit inclus en tant que module. En regardant le github qui l'utilise, ** GradCAM ** peut être exécuté avec seulement 22 lignes (avec des lignes vides). Je pense que c'est merveilleux J'ai essayé de le déplacer.
Vous pouvez trouver ce code sur github ci-dessous. https://github.com/sicara/tf-explain/blob/master/examples/core/grad_cam.py
Le code ci-dessous est tout, donc
python grad_cam_py.py
Cela fonctionne juste.
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 ")
L'image du chat ("chat tigré" dedans) est tirée de wikipedia. https://en.wikipedia.org/wiki/Tabby_cat Ce type de chat semble être caractérisé par la lettre M autour des yeux au milieu du visage ~~ ** la lettre M sur le «front» *. ( "Il y a une lettre M pour qu'elle entoure les yeux au milieu du visage" (faux), mais elle n'est pas invisible pour M ...)
sample1
sample2
Le résultat de GradCAM semble être juste. (Pourtant, Le but de cet article est que tf_explain est facile à utiliser, donc Aucun commentaire sur la qualité de GradCAM lui-même. Au cas où, ** Si vous mettez trop de sentiments sur l'écran GradCAM, vous aurez l'impression que la bonne aventure du diseur de bonne aventure viendra à vous, alors je pense que vous devriez le regarder aussi froid que possible, ce qui est un aparté complet. **)
C'est Windows 10. Il n'y a pas de GPU. tensorflow 2.0.0 tf-explain 0.2.1
Le tf-describe ci-dessus n'est probablement pas inclus, donc installez-le en utilisant pip ou une autre méthode normale. ** En ce qui concerne tensorflow, je pense que 2.1.x est le dernier maintenant (2020/3/11), mais j'ai eu une terrible erreur. ** ** ** Je ne sais pas comment le guérir, j'ai une idée complète! Donc, quand je l'ai mis à 2.0.0, cela a fonctionné. ** **
Dans le cas de cet exemple Est-ce la plage d'environ 60x60 pixels qui capture les fonctionnalités en même temps? ⇒ Dans la dernière image, vous avez l'impression de réagir individuellement à chaque zone. De plus, il peut être plus précis d'afficher l'image et le point d'intérêt même en mode sans chevauchement (y a-t-il?). (Parce qu'il est difficile de comprendre s'il est affecté par la luminosité de l'image d'origine.) ⇒⇒ CNN est vulnérable à "plus d'images (images en haut)". ⇒⇒⇒ Je suis impressionné quand un modèle qui poursuit la configuration globale et montre un écran qui semble être saisi par GradCAM apparaît. .. .. (Qu'elle puisse être exprimée par GradCAM est une autre histoire ... Hormis le fait qu'elle ne peut pas être exprimée par GradCAM, je pense que ce serait génial si un tel modèle sortait. Système de capsule etc. S'il y a un modèle qui apparaît. )
Nous avons également ajouté des diagrammes pour vous aider à mieux comprendre l'objectif de GradCAM. J'ai également ajouté la probabilité.
[[('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 est environ 10e. .. .. ** ** ⇒ On peut dire que vous devriez le faire dans différentes tailles, mais je pense qu'il vaut mieux être un peu plus conscient de la composition, CNN. ** J'ai fait un échantillon en comprenant mal l'emplacement de la lettre M, qui est une caractéristique de tabby **, donc la lettre M, qui est importante, est en dehors de la zone de l'image. (En fait, il vaut mieux recommencer ... Je pense que c'est toujours inutile même si j'essaye à nouveau, donc je vais remettre ça un moment.)
Je me suis référé à ce qui suit pour obtenir le taux. https://medium.com/@gkadusumilli/image-recognition-using-pre-trained-xception-model-in-5-steps-96ac858f4206
Indique la source modifiée.
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 ") ##
L'environnement évolue chaque jour (** tf_explain **). Si vous avez des commentaires, veuillez nous le faire savoir.