Το TensorFlow είναι ένα ευέλικτο εργαλείο για τη δημιουργία μοντέλων μηχανικής μάθησης.
Σε αυτήν την ανάρτηση, θα δούμε πώς να δημιουργήσουμε ένα σύστημα αναγνώρισης προσώπου με το TensorFlow, ένα πλαίσιο μηχανικής μάθησης ανοιχτού κώδικα. Θα εξετάσουμε τις βασικές διαδικασίες για τη δημιουργία ενός επιτυχημένου συστήματος αναγνώρισης προσώπου, από τη συλλογή και την προετοιμασία δεδομένων έως την εκπαίδευση και την αξιολόγηση ενός μοντέλου.
Θα αποκτήσετε εμπειρία από πρώτο χέρι με το TensorFlow για τη δημιουργία αναγνώρισης προσώπου με τη βοήθεια αποσπασμάτων κώδικα και παραδειγμάτων πραγματικού κόσμου. Είστε ευπρόσδεκτοι να ακολουθήσετε καθώς προχωράμε.
Εισαγωγή στο TensorFlow
Το TensorFlow είναι μια δωρεάν βιβλιοθήκη ανοιχτού κώδικα. Είναι μια συμβολική εργαλειοθήκη μαθηματικών που χρησιμοποιεί ροή δεδομένων και διαφοροποιήσιμο προγραμματισμό. Μπορείτε να χειριστείτε μια σειρά εργασιών με αυτό, συμπεριλαμβανομένων των deep νευρικό σύστημα εκπαίδευση.
Το TensorFlow είναι ισχυρό και προσαρμόσιμο. Ομοίως, είναι ένα εξαιρετικό εργαλείο για την ανάπτυξη και ανάπτυξη μοντέλων μηχανικής μάθησης. Μπορείτε να δημιουργήσετε περίπλοκα μοντέλα με πολλά επίπεδα και λειτουργίες τανυστήρα. Επίσης, τα προκατασκευασμένα μοντέλα στη βιβλιοθήκη μπορούν να ρυθμιστούν με ακρίβεια για συγκεκριμένες ανάγκες.
Επιπλέον, το TensorFlow έχει μια τεράστια και διευρυνόμενη κοινότητα χρηστών. Έτσι, υπάρχει πληθώρα πληροφοριών και βοήθειας για άτομα που είναι νέοι στην πλατφόρμα.
Το TensorFlow είναι δημοφιλές για μάθηση μηχανής εν μέρει επειδή παρέχει μια ροή εργασίας από άκρο σε άκρο. Έτσι, μπορείτε εύκολα να κατασκευάσετε, να εκπαιδεύσετε και να αναπτύξετε μοντέλα. Παρέχει εργαλεία και στρατηγικές για τη βελτίωση και την κλιμάκωση μοντέλων ώστε να ανταποκρίνονται σε συγκεκριμένες απαιτήσεις. Διαφέρει από την προεπεξεργασία δεδομένων έως την ανάπτυξη του μοντέλου.
Τι είναι η Αναγνώριση Προσώπου;
Η αναγνώριση προσώπου είναι α όραση υπολογιστή εργασία που προσδιορίζει την ταυτότητα ενός ατόμου με βάση το πρόσωπό του. Αυτή η τεχνική αναγνωρίζει χαρακτηριστικά του προσώπου, όπως το σχήμα και την υφή των ματιών, της μύτης και του στόματος.
Και, τα συγκρίνει με μια βάση δεδομένων γνωστών προσώπων για να αναγνωρίσει ένα ταίριασμα. Η αναγνώριση προσώπου έχει πολλές χρήσεις, συμπεριλαμβανομένων συστημάτων ασφαλείας, οργάνωσης φωτογραφιών και βιομετρικού ελέγχου ταυτότητας.
Η ακρίβεια των αλγορίθμων αναγνώρισης προσώπου έχει αυξηθεί σημαντικά τα τελευταία χρόνια ως αποτέλεσμα των καινοτομιών στη μηχανική μάθηση.
Εισαγωγή Απαραίτητων Βιβλιοθηκών
Πριν ξεκινήσουμε οτιδήποτε, πρέπει να εισάγουμε τις βιβλιοθήκες που απαιτούνται για το μοντέλο μας. Το Tensorflow (tf) εισάγεται και χρησιμοποιείται για τη δημιουργία και την εκπαίδευση του μοντέλου. <(p>
Το "numpy" εκτελεί μαθηματικούς υπολογισμούς και επεξεργασία δεδομένων.
Το "matplotlib.pyplot" εισάγεται ως plt και χρησιμοποιείται για χαρτογράφηση και οπτικοποιήσεις δεδομένων.
Τέλος, το "fetch lfw people" εισάγεται από το sklearn. σύνολα δεδομένων και χρησιμοποιούνται για τη φόρτωση του συνόλου δεδομένων αναγνώρισης προσώπου. Αυτή η λειτουργία είναι μέρος της εργαλειοθήκης scikit-learn. Χάρη σε αυτή τη λειτουργία δεν χρειάστηκε να ανεβάσουμε άλλο σύνολο δεδομένων. Αυτό είναι ήδη ενσωματωμένο στο scit-learn.
Και, σας δίνει πρόσβαση σε ένα ευρύ φάσμα σύνολα δεδομένων για μηχανική μάθηση εφαρμογές. Σε αυτό το σενάριο, χρησιμοποιούμε τη μέθοδο fetch lfw people για να ανακτήσουμε το σύνολο δεδομένων "Labeled Faces in the Wild" (LFW). Περιλαμβάνει φωτογραφίες των προσώπων των ανθρώπων καθώς και τις ετικέτες που τους συνοδεύουν.
Αυτές οι βιβλιοθήκες είναι κρίσιμες για την εφαρμογή και την αξιολόγηση του μοντέλου μας αναγνώρισης προσώπου.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Προεπεξεργασία και φόρτωση του συνόλου δεδομένων αναγνώρισης προσώπου
Σε αυτό το μέρος, χρησιμοποιούμε τη λειτουργία "fetch lfw people" για την προεπεξεργασία των δεδομένων αναγνώρισης προσώπου. Αρχικά, χρησιμοποιούμε fetch lfw άτομα με την επιλογή «ελάχ. πρόσωπα ανά άτομο=60». Αυτό υποδηλώνει ότι θέλουμε να συμπεριλάβουμε μόνο άτομα στο σύνολο δεδομένων που έχουν τουλάχιστον 60 φωτογραφίες. Ως εκ τούτου, διασφαλίζουμε ότι το μοντέλο μας έχει επαρκή δεδομένα για εκμάθηση. Επίσης, αυτό μειώνει τον κίνδυνο υπερβολικής τοποθέτησης.
Στη συνέχεια εξάγονται τα δεδομένα και οι ετικέτες από το αντικείμενο faces και αντιστοιχίζονται στις μεταβλητές X και y. X hol.
Τώρα είμαστε έτοιμοι να εκπαιδεύσουμε το μοντέλο αναγνώρισης προσώπου χρησιμοποιώντας προεπεξεργασμένα δεδομένα και ετικέτες.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Διαχωρισμός σετ προπόνησης και δοκιμών
Σε αυτό το βήμα, χωρίζουμε το σύνολο δεδομένων μας για την αναγνώριση προσώπου σε δύο μισά χρησιμοποιώντας τη μέθοδο διαχωρισμού δοκιμής τρένου από την επιλογή sklearn.model. Ο στόχος αυτού του διαχωρισμού είναι να αξιολογήσουμε την απόδοση του μοντέλου μας μετά την προπόνηση
Η συνάρτηση διαχωρισμού δοκιμής αμαξοστοιχίας δέχεται ως είσοδο δεδομένα X και ετικέτες y. Και, τα χωρίζει σε σετ εκπαίδευσης και δοκιμών. Επιλέγουμε μέγεθος δοκιμής=0.2 σε αυτό το παράδειγμα. Αυτό σημαίνει ότι το 20% των δεδομένων θα χρησιμοποιηθεί ως σύνολο δοκιμών και το 80% ως σετ εκπαίδευσης. Επιπλέον, χρησιμοποιούμε τυχαία κατάσταση=42 για να διασφαλίσουμε ότι τα δεδομένα διαιρούνται με συνέπεια κάθε φορά που εκτελείται ο κώδικας.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Προετοιμασία των Δεδομένων
Ο σκοπός της προεπεξεργασίας δεδομένων είναι να προετοιμαστούν για εισαγωγή στο μοντέλο. Τα δεδομένα υποβάλλονται σε προεπεξεργασία σε αυτόν τον κώδικα διαιρώντας κάθε σημείο δεδομένων με 255.
Τι μας παρακίνησε να το πετύχουμε αυτό; Η κανονικοποίηση είναι μια διαδικασία προεπεξεργασίας που χρησιμοποιείται στη μηχανική εκμάθηση για να εγγυηθεί ότι όλα τα χαρακτηριστικά είναι στην ίδια κλίμακα. Σε αυτό το σενάριο, η διαίρεση με το 255 κλιμακώνει τα δεδομένα σε ένα εύρος από 0 έως 1, το οποίο είναι ένα συνηθισμένο βήμα κανονικοποίησης δεδομένων εικόνας.
Αυτό επιταχύνει τη σύγκλιση του μοντέλου και μπορεί να αυξήσει την απόδοσή του.
X_train = X_train / 255.0
X_test = X_test / 255.0
Δημιουργία του Mode
Θέλουμε να αναγνωρίσουμε το άτομο του οποίου το πρόσωπο εμφανίζεται σε μια εικόνα. Σε αυτήν την περίπτωση, θα χρησιμοποιήσουμε ένα πλήρως συνδεδεμένο δίκτυο, συχνά γνωστό ως πυκνό δίκτυο. Είναι ένα τεχνητό νευρωνικό δίκτυο που χρησιμοποιήθηκε για τη δημιουργία του μοντέλου.
Τα τεχνητά νευρωνικά δίκτυα διαμορφώνονται σύμφωνα με τον τρόπο λειτουργίας και οργάνωσης του ανθρώπινου εγκεφάλου. Αποτελούνται από κόμβους επεξεργασίας πληροφοριών ή νευρώνες που συνδέονται μεταξύ τους. Κάθε νευρώνας σε ένα στρώμα σε ένα πυκνό δίκτυο συνδέεται με κάθε νευρώνα στο στρώμα πάνω από αυτό.
Το μοντέλο έχει τέσσερα επίπεδα σε αυτόν τον κώδικα. Για να τροφοδοτηθούν στο επόμενο στρώμα, τα δεδομένα εισόδου ισοπεδώνονται στο πρώτο στρώμα σε μια μονοδιάστατη διάταξη. Οι νευρώνες 128 και 64 στα ακόλουθα δύο στρώματα, αντίστοιχα, συνδέονται πλήρως.
Η λειτουργία ενεργοποίησης ReLU είναι μια μοναδική συνάρτηση ενεργοποίησης που χρησιμοποιείται από αυτά τα επίπεδα. Με αυτό, μπορούμε να κάνουμε το μοντέλο να μάθει μη γραμμικούς συσχετισμούς μεταξύ των εισόδων και των εξόδων. Το τελευταίο επίπεδο χρησιμοποιεί τη λειτουργία ενεργοποίησης softmax για να κάνει προβλέψεις. Και, είναι ένα πλήρως συνδεδεμένο στρώμα με τόσους νευρώνες όσες υπάρχουν πιθανές κατηγορίες.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Σύνταξη του Μοντέλου
Το μοντέλο μεταγλωττίζεται χρησιμοποιώντας τη συνάρτηση «compile». Πρέπει να προετοιμάσουμε το μοντέλο για εκπαίδευση. Έτσι, θα ορίσουμε το βελτιστοποιητή, τη συνάρτηση απώλειας και τις μετρήσεις που θα χρησιμοποιηθούν για την αξιολόγηση του μοντέλου.
Κατά τη διάρκεια της εκπαίδευσης, ο βελτιστοποιητής είναι υπεύθυνος για την αλλαγή των παραμέτρων του μοντέλου. Ο βελτιστοποιητής "adam" είναι μια δημοφιλής τεχνική βελτιστοποίησης βαθιάς μάθησης.
Χρησιμοποιούμε τη συνάρτηση απώλειας για να αξιολογήσουμε την απόδοση του μοντέλου στα δεδομένα εκπαίδευσης. Επειδή οι ετικέτες στόχου είναι ακέραιοι αριθμοί που αντικατοπτρίζουν την κλάση της εικόνας αντί για κωδικοποιημένα διανύσματα με ένα καυτό, η συνάρτηση απώλειας «αραιής κατηγορικής διασταυρούμενης εντροπίας» είναι ευνοϊκή.
Τέλος, ορίζουμε τις μετρήσεις για την αξιολόγηση του μοντέλου, σε αυτήν την περίπτωση, την «ακρίβεια».
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Εκπαίδευση μοντέλων
Θα χρησιμοποιήσουμε τη λειτουργία "fit" για να εκπαιδεύσουμε το μοντέλο.
Θα παρέχουμε τα δεδομένα εκπαίδευσης (X τρένο) και τις σχετικές ετικέτες (y τρένο), καθώς και θα ορίσουμε τον αριθμό των εποχών (επαναλήψεις) να τρέχουν ως 10. Η διαδικασία εκπαίδευσης τροποποιεί τα βάρη του μοντέλου για να μειώσει μια απώλεια (η διαφορά μεταξύ προβλεπόμενες και πραγματικές ετικέτες) και βελτιώνουν την ακρίβεια των δεδομένων εκπαίδευσης.
model.fit(X_train, y_train, epochs=10)
Αξιολόγηση μοντέλου
Τώρα, πρέπει να αξιολογήσουμε το εκπαιδευμένο μοντέλο στα δεδομένα δοκιμής. Χρησιμοποιούμε την απώλεια δοκιμής και η ακρίβεια δοκιμής χρησιμοποιείται για την αξιολόγηση της απόδοσης του μοντέλου. Στη δοκιμή δεδομένων δοκιμής X και στις ετικέτες δοκιμής y δοκιμή, πρέπει να καλέσουμε τη συνάρτηση model.evaluate
Η λειτουργία εξάγει την ακρίβεια δοκιμής και την απώλεια δοκιμής. Οι μεταβλητές test loss και test accuracy, αντίστοιχα, περιέχουν αυτές τις τιμές. Τέλος, χρησιμοποιούμε τη λειτουργία «εκτύπωση» για να εξάγουμε την ακρίβεια της δοκιμής.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Πρόβλεψη τάξεων και λήψη των προβλεπόμενων τάξεων
Χρησιμοποιώντας το μοντέλο εκπαίδευσης και τα δεδομένα δοκιμής, ο αλγόριθμος κάνει προβλέψεις. Όταν τα δεδομένα δοκιμής διαβιβάζονται στη μέθοδο "model.predict", αυτή παράγει μια σειρά προβλέψεων για κάθε εικόνα στο σύνολο δοκιμής.
Στη συνέχεια, το όνομα της κλάσης στόχου για κάθε εικόνα ανακτάται από τη λίστα «ονομάτων στόχων» χρησιμοποιώντας τη συνάρτηση «np.argmax» για τον προσδιορισμό του ευρετηρίου με τη μεγαλύτερη προβλεπόμενη πιθανότητα. Αυτός ο δείκτης χρησιμοποιείται στη συνέχεια για τον προσδιορισμό της προβλεπόμενης κλάσης για κάθε εικόνα.
Χρησιμοποιώντας μια κατανόηση λίστας, όλες οι προβλέψεις στον πίνακα "προβλέψεων" υπόκεινται σε αυτήν τη μέθοδο, με αποτέλεσμα τη λίστα "προβλεπόμενες κλάσεις".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Οπτικοποίηση των Προβλέψεων
Μπορούμε τώρα να δούμε πώς φαίνεται το μοντέλο μας.
Για να αξιολογήσετε πόσο καλά τα πάει το μοντέλο, θα εμφανιστούν οι πρώτες 10 φωτογραφίες και οι προβλέψεις τους. Θα σχεδιάσει τις φωτογραφίες σε κλίμακα του γκρι και θα εμφανίσει τόσο την πραγματική κλάση της εικόνας όσο και την κλάση που προβλέπεται από το μοντέλο χρησιμοποιώντας τη λειτουργική μονάδα matplotlib.pyplot.
Η συνάρτηση "imshow" χρησιμοποιείται από τον βρόχο for για να σχεδιάσει καθεμία από τις 10 πρώτες φωτογραφίες σετ δοκιμής. Τα ονόματα στόχων[y test[i]] και οι προβλεπόμενες κλάσεις[i] χρησιμοποιούνται για τον προσδιορισμό της πραγματικής κλάσης και της προβλεπόμενης κλάσης της εικόνας, αντίστοιχα. Στη συνέχεια, οι τίτλοι κάθε οικοπέδου υποδεικνύονται από αυτές τις ταξινομήσεις.
Τέλος, η γραφική παράσταση εμφανίζεται χρησιμοποιώντας τη μέθοδο plt.show().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Τύλιξε
Το TensorFlow προσφέρει ένα πλήρες και ευέλικτο περιβάλλον για τη δημιουργία μοντέλων μηχανικής μάθησης.
Προσαρμόζοντας το μοντέλο ώστε να ανταποκρίνεται σε συγκεκριμένες απαιτήσεις ή προσθέτοντας νέες εξελίξεις στη μηχανική εκμάθηση, η ακρίβεια του μοντέλου μπορεί να αυξηθεί ακόμη περισσότερο.
Το TensorFlow και η αναγνώριση προσώπου πιθανότατα θα χρησιμοποιούνται όλο και περισσότερο σε βιομηχανίες όπως τα συστήματα ασφαλείας, ο βιομετρικός έλεγχος ταυτότητας και η υγειονομική περίθαλψη στο μέλλον. Σύντομα θα δούμε συναρπαστικές καινοτομίες.
Αφήστε μια απάντηση