Εισαγωγή στον χάρτη Saliency σε μια εικόνα με API TensorFlow 2.x

Αυτό το άρθρο δημοσιεύτηκε ως μέρος του Data Science Blogathon.
Εισαγωγή στο Tensorflow 2.χ

Ας υποθέσουμε ότι θέλουμε να εστιάσουμε σε ένα συγκεκριμένο μέρος μιας εικόνας από το ποια έννοια θα μας βοηθήσει. Ναι, είναι ένας σημαντικός χάρτης. Εστιάζει κυρίως σε συγκεκριμένα pixel εικόνων, ενώ αγνοεί άλλα.
Χάρτης Saliency
Ο χάρτης προεξοχής μιας εικόνας αντιπροσωπεύει το πιο εμφανές και εστιασμένο pixel μιας εικόνας. Μερικές φορές, τα πιο φωτεινά εικονοστοιχεία μιας εικόνας μας λένε για το σημαντικό των pixel. Αυτό σημαίνει ότι η φωτεινότητα του εικονοστοιχείου είναι ευθέως ανάλογη με την προεξοχή μιας εικόνας.
Ας υποθέσουμε ότι θέλουμε να δώσουμε προσοχή σε ένα συγκεκριμένο μέρος μιας εικόνας, όπως να θέλουμε να εστιάσουμε στην εικόνα ενός πουλιού και όχι στα άλλα μέρη όπως ο ουρανός, η φωλιά κ.λπ. Στη συνέχεια, υπολογίζοντας τον χάρτη εξέχουσας σημασίας, θα το πετύχουμε αυτό. Θα βοηθήσει καθοριστικά στη μείωση του υπολογιστικού κόστους. Είναι συνήθως μια εικόνα σε κλίμακα του γκρι, αλλά μπορεί να μετατραπεί σε άλλη μορφή έγχρωμης εικόνας ανάλογα με την οπτική μας άνεση. Οι χάρτες εξέχουσας σημασίας ονομάζονται επίσης «χάρτες θερμότητας», καθώς η ζεστασιά/φωτεινότητα της εικόνας έχει σημαντικό αντίκτυπο στον προσδιορισμό της κατηγορίας του αντικειμένου. Ο χάρτης προεξοχής στοχεύει στον προσδιορισμό των περιοχών στο βοθρίο που είναι εμφανείς ή παρατηρήσιμες σε κάθε σημείο και να επηρεάσει την απόφαση των προσεκτικών περιοχών με βάση το χωρικό μοτίβο της εξέχουσας θέσης. Χρησιμοποιείται σε μια ποικιλία μοντέλων Visual Attention. Το Υπολογιστικό Πλαίσιο Οπτικής Προσοχής «ITTI and Koch» βασίζεται στην έννοια του χάρτη εξέχουσας σημασίας.
Πώς να υπολογίσετε τον Χάρτη Saliency με το Tensorflow;
Ο χάρτης προεξοχής μπορεί να υπολογιστεί λαμβάνοντας τις παραγώγους της κλάσης πιθανότητας Pκ σε σχέση με την εικόνα εισόδου Χ.
saliency_map = dpκ/dX
Περίμενε ένα λεπτό! Φαίνεται αρκετά γνωστό! Ναι, είναι η ίδια backpropagation που χρησιμοποιούμε για την εκπαίδευση του μοντέλου. Χρειάζεται μόνο να κάνουμε ένα ακόμη βήμα: η κλίση δεν σταματά στο πρώτο επίπεδο του δικτύου μας. Αντίθετα, πρέπει να το επιστρέψουμε στην εικόνα εισόδου X.

Ως αποτέλεσμα, οι χάρτες προεξοχής παρέχουν έναν κατάλληλο χαρακτηρισμό για κάθε εικονοστοιχείο εισόδου σύμφωνα με μια συγκεκριμένη πρόβλεψη κλάσης PΕγώ. Τα εικονοστοιχεία που είναι σημαντικά για την πρόβλεψη λουλουδιών θα πρέπει να συγκεντρώνονται γύρω από τα εικονοστοιχεία λουλουδιών. Κατά τα άλλα, κάτι πραγματικά περίεργο συμβαίνει με το εκπαιδευμένο μοντέλο.
Το πλεονέκτημα των χαρτών εξέχουσας θέσης είναι ότι, δεδομένου ότι εξαρτώνται αποκλειστικά από υπολογισμούς κλίσης, πολλά κοινά χρησιμοποιούμενα μοντέλα βαθιάς εκμάθησης μπορούν να μας παρέχουν δωρεάν χάρτες προεξοχής. Δεν χρειάζεται να τροποποιήσουμε καθόλου τις αρχιτεκτονικές του δικτύου. Απλώς πρέπει να τροποποιήσουμε ελαφρώς τους υπολογισμούς της κλίσης.
Διαφορετικοί τύποι του χάρτη Saliency
1. Στατική προεξοχή: Εστιάζει σε κάθε στατικό εικονοστοιχείο της εικόνας για να υπολογίσει τη σημαντική περιοχή ενδιαφέροντος για την ανάλυση του χάρτη προεξοχής.
2. Προεξοχή κίνησης: Επικεντρώνεται στα δυναμικά χαρακτηριστικά των δεδομένων βίντεο. Ο χάρτης προεξοχής σε ένα βίντεο υπολογίζεται με τον υπολογισμό της οπτικής ροής ενός βίντεο. Οι κινούμενες οντότητες/αντικείμενα θεωρούνται εμφανή αντικείμενα.
Κώδικας
Θα εκτελέσουμε βήμα προς βήμα έρευνες της αρχιτεκτονικής ResNet50, η οποία έχει προεκπαιδευτεί στο ImageNet. Αλλά μπορείτε να πάρετε άλλα προεκπαιδευμένα μοντέλα βαθιάς μάθησης ή να φέρετε το δικό σας εκπαιδευμένο μοντέλο. Θα δείξουμε πώς να αναπτύξετε έναν βασικό χάρτη εξέχουσας σημασίας χρησιμοποιώντας το πιο διάσημο μοντέλο DL στο TensorFlow 2.x. Χρησιμοποιήσαμε την εικόνα του Wikimedia ως δοκιμαστική εικόνα κατά τη διάρκεια των σεμιναρίων.
Ξεκινάμε δημιουργώντας ένα ResNet50 με βάρη ImageNet. Με τις απλές βοηθητικές λειτουργίες, εισάγουμε την εικόνα στο δίσκο και την προετοιμάζουμε για τροφοδοσία στο ResNet50.
# Import necessary packages import tensorflow as tf import numpy as np import matplotlib.pyplot as plt def input_img(path): image = tf.image.decode_png(tf.io.read_file(path)) image = tf.expand_dims(image, axis=0) image = tf.cast(image, tf.float32) image = tf.image.resize(image, [224,224]) return image def normalize_image(img): grads_norm = img[:,:,0]+ img[:,:,1]+ img[:,:,2] grads_norm = (grads_norm - tf.reduce_min(grads_norm))/ (tf.reduce_max(grads_norm)- tf.reduce_min(grads_norm)) return grads_norm def get_image(): import urllib.request filename="image.jpg" img_url = r"https://upload.wikimedia.org/wikipedia/commons/d/d7/White_stork_%28Ciconia_ciconia%29_on_nest.jpg" urll)

test_model = tf.keras.applications.resnet50.ResNet50() #test_model.summary() get_image() img_path = "image.jpg" input_img = input_img(img_path) input_img = tf.keras.applications.densenet.preprocess_input(input_img) plt.imshow(normalize_image(input_img[0]), cmap = "ocean")
result = test_model(input_img) max_idx = tf.argmax(result,axis = 1) tf.keras.applications.imagenet_utils.decode_predictions(result.numpy())
with tf.GradientTape() as tape: tape.watch(input_img) result = test_model(input_img) max_score = result[0,max_idx[0]] grads = tape.gradient(max_score, input_img) plot_maps(normalize_image(grads[0]), normalize_image(input_img[0]))

fig2: (1) Saliency_map, (2) input_image, (3) overlayed_image
Ενάντιος
Σε αυτό το ιστολόγιο, έχουμε ορίσει τον χάρτη εξέχουσας σημασίας από διάφορες πτυχές. Προσθέσαμε μια εικονογραφική αναπαράσταση για να κατανοήσουμε σε βάθος τον όρο «χάρτης προεξοχής». Επίσης, το έχουμε καταλάβει υλοποιώντας το σε python χρησιμοποιώντας το TensorFlow API. Τα αποτελέσματα φαίνονται πολλά υποσχόμενα και είναι εύκολα κατανοητά.
Σε αυτό το άρθρο, μάθατε για τον χάρτη προεξοχής για μια εικόνα με ροή τάσης.
Ένας κώδικας python υλοποιείται επίσης σε μια εικόνα t
Το μαθηματικό υπόβαθρο του χάρτη εξέχουσας σημασίας καλύπτεται επίσης σε αυτό το άρθρο.
Αυτό είναι! Συγχαρητήρια, μόλις υπολογίσατε έναν σημαντικό χάρτη.
github_repo.
https://github.com/Rabusi/Saliency_Map_in_DL
Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.