TensorFlow és una eina versàtil per crear models d'aprenentatge automàtic.
En aquesta publicació, veurem com crear un sistema de reconeixement facial amb TensorFlow, un marc d'aprenentatge automàtic de codi obert. Repassarem els processos essencials per crear un sistema de reconeixement facial d'èxit, des de la recollida i preparació de dades fins a la formació i l'avaluació d'un model.
Obtindreu experiència de primera mà amb TensorFlow per crear reconeixement facial amb l'ajut de fragments de codi i exemples del món real. Us convidem a seguir-nos mentre avancem.
Introducció a TensorFlow
TensorFlow és una biblioteca gratuïta i de codi obert. És una caixa d'eines matemàtiques simbòliques que utilitza el flux de dades i la programació diferenciable. Podeu gestionar una sèrie de tasques amb ell, incloses les profundes xarxa neural entrenament.
TensorFlow és potent i adaptable. Així mateix, és una gran eina per desenvolupar i implementació de models d'aprenentatge automàtic. Podeu crear models complicats amb diverses capes i operacions de tensor. A més, els models preconstruïts a la biblioteca es poden ajustar per a necessitats específiques.
A més, TensorFlow té una comunitat d'usuaris enorme i en expansió. Per tant, hi ha una gran quantitat d'informació i ajuda per a persones que són noves a la plataforma.
TensorFlow és popular per màquina d'aprenentatge en part perquè proporciona un flux de treball d'extrem a extrem. Així, podeu construir, entrenar i desplegar models fàcilment. Proporciona eines i estratègies per millorar i escalar models per adaptar-se a demandes específiques. Varia des del preprocessament de dades fins al desplegament del model.
Què és el reconeixement facial?
El reconeixement facial és a visió per computadora tasca que identifica la identificació d'una persona a partir del seu rostre. Aquesta tècnica reconeix trets facials, com ara la forma i la textura dels ulls, el nas i la boca.
I, els compara amb una base de dades de cares conegudes per identificar una coincidència. El reconeixement facial té diversos usos, inclosos els sistemes de seguretat, l'organització de fotografies i l'autenticació biomètrica.
La precisió dels algorismes de reconeixement facial ha augmentat substancialment en els darrers anys com a resultat dels avenços en l'aprenentatge automàtic.
Importació de les biblioteques necessàries
Abans de començar qualsevol cosa, hem d'importar les biblioteques necessàries per al nostre model. Tensorflow (tf) s'importa i s'utilitza per crear i entrenar el model. <(p>
"numpy" realitza càlculs matemàtics i processament de dades.
“matplotlib.pyplot” s'importa com a plt i s'utilitza per gràfics i visualitzacions de dades.
Finalment, "fetch lfw people" s'importa de sklearn. conjunts de dades i s'utilitzen per carregar el conjunt de dades de reconeixement facial. Aquesta funció forma part del conjunt d'eines scikit-learn. Gràcies a aquesta funció no hem hagut de pujar un altre conjunt de dades. Això ja està integrat a sckit-learn.
I, us dóna accés a una àmplia gamma de conjunts de dades per a l'aprenentatge automàtic aplicacions. En aquest escenari, utilitzem el mètode fetch lfw people per recuperar el conjunt de dades "Labeled Faces in the Wild" (LFW). Comprèn fotos de les cares de les persones, així com les etiquetes que les acompanyen.
Aquestes biblioteques són crítiques en la implementació i avaluació del nostre model de reconeixement facial.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Preprocessament i càrrega del conjunt de dades de reconeixement facial
En aquesta part, utilitzem la funció "fer lfw people" per preprocessar les dades de reconeixement facial. En primer lloc, utilitzem fetch lfw people amb l'opció "min cares per person=60". Això indica que només volem incloure persones al conjunt de dades que tinguin almenys 60 fotos. Per tant, ens assegurem que el nostre model tingui dades adequades per aprendre. A més, això redueix el perill de sobreajustament.
Les dades i les etiquetes de l'objecte cares s'extreuen i s'assignen a les variables X i y. X hol.
Ara estem preparats per entrenar el nostre model de reconeixement facial mitjançant dades i etiquetes preprocessades.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Divisió de conjunts d'entrenament i proves
En aquest pas, dividim el nostre conjunt de dades de reconeixement facial en dues meitats mitjançant el mètode de divisió de prova de tren de la selecció de sklearn.model. L'objectiu d'aquesta divisió és avaluar el rendiment del nostre model després de l'entrenament
La funció de divisió de prova del tren accepta com a entrades les dades X i les etiquetes y. I, els divideix en conjunts d'entrenament i de proves. Seleccionem la mida de la prova=0.2 en aquest exemple. Això implica que el 20% de les dades s'utilitzaran com a conjunt de prova i el 80% com a conjunt d'entrenament. A més, utilitzem l'estat aleatori = 42 per assegurar-nos que les dades es divideixen de manera coherent cada vegada que es realitza el codi.
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)
Preparació de les dades
La finalitat del preprocessament de les dades és preparar-les per a l'entrada al model. Les dades es preprocessen en aquest codi dividint cada punt de dades per 255.
Què ens va motivar a aconseguir-ho? La normalització és un procediment de preprocessament utilitzat en l'aprenentatge automàtic per garantir que totes les funcions estiguin a la mateixa escala. En aquest escenari, dividir per 255 escala les dades a un rang de 0 a 1, que és un pas habitual de normalització de dades d'imatge.
Això accelera la convergència del model i pot augmentar el seu rendiment.
X_train = X_train / 255.0
X_test = X_test / 255.0
Creació del mode
Volem identificar l'individu el rostre del qual apareix en una imatge. En aquest cas, utilitzarem una xarxa totalment connectada, sovint coneguda com a xarxa densa. És una xarxa neuronal artificial que es va utilitzar per crear el model.
Les xarxes neuronals artificials es modelen segons com funciona i s'organitza el cervell humà. Estan formats per nodes o neurones de processament de la informació que estan enllaçats. Cada neurona d'una capa d'una xarxa densa està vinculada a cada neurona de la capa superior.
El model té quatre capes en aquest codi. Per introduir-les a la següent capa, les dades d'entrada s'aplanen a la primera capa en una matriu unidimensional. En conseqüència, les neurones 128 i 64 de les dues capes següents estan completament enllaçades.
La funció d'activació de ReLU és una funció d'activació única utilitzada per aquestes capes. Amb això, podem aconseguir que el model aprengui correlacions no lineals entre les entrades i les sortides. L'última capa utilitza la funció d'activació de softmax per fer prediccions. I, és una capa totalment connectada amb tantes neurones com classes potencials hi ha.
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')
])
Elaboració del model
El model es compila mitjançant la funció "compilar". Hem de preparar el model per a la formació. Així doncs, definirem l'optimitzador, la funció de pèrdua i les mètriques que s'utilitzaran per avaluar el model.
Durant l'entrenament, l'optimitzador s'encarrega de canviar els paràmetres del model. L'optimitzador "adam" és una tècnica popular d'optimització d'aprenentatge profund.
Utilitzem la funció de pèrdua per avaluar el rendiment del model a les dades d'entrenament. Com que les etiquetes de destinació són nombres enters que reflecteixen la classe de la imatge en lloc de vectors codificats en calent, la funció de pèrdua de "entropia categòrica escassa" és favorable.
Finalment, definim les mètriques per avaluar el model, en aquest cas, “exactitud”.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Formació de models
Utilitzarem la funció "ajust" per entrenar el model.
Proporcionarem les dades d'entrenament (tren X) i les etiquetes relacionades (tren y), així com establirem el nombre d'èpoques (iteracions) per executar-se en 10. El procediment d'entrenament modifica els pesos del model per reduir una pèrdua (la diferència entre etiquetes previstes i reals) i millorar la precisió de les dades d'entrenament.
model.fit(X_train, y_train, epochs=10)
Avaluació del model
Ara, hem d'avaluar el model entrenat a partir de les dades de la prova. Utilitzem la pèrdua de prova i la precisió de la prova s'utilitzen per avaluar el rendiment del model. A la prova X de dades de prova i a les etiquetes de prova y prova, hem d'anomenar "la funció model.evaluate"
La funció mostra la precisió de la prova i la pèrdua de la prova. Les variables pèrdua de prova i precisió de prova, respectivament, contenen aquests valors. Finalment, utilitzem la funció "impressió" per mostrar la precisió de la prova.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Predicció de classes i obtenció de classes predites
Utilitzant el model d'entrenament i les dades de prova, l'algoritme fa prediccions. Quan les dades de prova es passen al mètode "model.predict", produeix una sèrie de prediccions per a cada imatge del conjunt de prova.
El nom de la classe objectiu per a cada imatge es recupera de la llista de "noms de destinació" mitjançant la funció "np.argmax" per identificar l'índex amb la probabilitat prevista més gran. Aquest índex s'utilitza llavors per determinar la classe prevista per a cada imatge.
Mitjançant una comprensió de llista, totes les prediccions de la matriu "prediccions" estan sotmeses a aquest mètode, donant lloc a la llista de "classes predites".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Visualització de les prediccions
Ara podem veure com queda el nostre model.
Per avaluar el rendiment del model, es mostraran les 10 primeres fotos i les seves prediccions. Traçarà les fotos en escala de grisos i mostrarà tant la classe real de la imatge com la classe prevista pel model mitjançant el mòdul matplotlib.pyplot.
El bucle for utilitza la funció "imshow" per dibuixar cadascuna de les 10 primeres fotos del conjunt de prova. Els noms de destinació[y test[i]] i les classes predites[i] s'utilitzen per determinar la classe real i la classe prevista de la imatge, respectivament. Els títols de cada parcel·la s'indiquen llavors mitjançant aquestes classificacions.
Finalment, la trama es mostra amb el mètode 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()
Embolicar
TensorFlow ofereix un entorn complet i flexible per crear models d'aprenentatge automàtic.
Ajustant el model per satisfer requisits particulars o afegint nous desenvolupaments en l'aprenentatge automàtic, la precisió del model es pot augmentar encara més.
TensorFlow i el reconeixement facial s'utilitzaran cada cop més en indústries com els sistemes de seguretat, l'autenticació biomètrica i l'assistència sanitària en el futur. En breu veurem innovacions fascinants.
Deixa un comentari