El aprendizaje automático: reconocer caras utilizando eigenfaces

El reconocimiento facial es importante para el aprendizaje de la máquina. La capacidad de reconocer un rostro en la multitud se ha convertido en una herramienta esencial para muchas profesiones. Por ejemplo, los militares y la policía dependen de ella en gran medida. Por supuesto, el reconocimiento facial tiene usos para la seguridad y otras necesidades también.

En este ejemplo se ve en el reconocimiento facial en un sentido más general. Es posible que haya preguntado cómo las redes sociales logran etiquetar las imágenes con la etiqueta o nombre apropiado. El siguiente ejemplo muestra cómo realizar esta tarea mediante la creación de las características adecuadas utilizando Eigenfaces.

Eigenfaces es un enfoque para el reconocimiento facial basado en la apariencia general de una cara, no en sus detalles particulares. Por medio de la técnica que puede interceptar y remodelar la varianza presente en la imagen, la información reconformado es tratado como el ADN de una cara, permitiendo así la recuperación de caras similares (debido a que tienen variaciones similares) en una serie de imágenes faciales.

Es una técnica menos eficaz que la extracción de características de los detalles de una imagen, aún funciona, y se puede aplicar de forma rápida en su ordenador. Este enfoque demuestra cómo el aprendizaje máquina puede funcionar con píxeles primas, pero es más eficaz cuando se cambia los datos de imagen en otro tipo de datos. Usted puede aprender más acerca Eigenfaces o tratando el tutorial que explora descomposiciones de la varianza en Scikit-learn.

En este ejemplo, se utiliza Eigenfaces asociar imágenes presentes en un conjunto de entrenamiento con los de un equipo de prueba, inicialmente utilizando algunas medidas estadísticas simples.

importar numpy como NP

de fetch_olivetti_faces sklearn.datasets importación

conjunto de datos = fetch_olivetti_faces (shuffle = Verdadero,

random_state = 101)

train_faces = dataset.data [: 350 ,:]

test_faces = dataset.data [350:,:]

train_answers = dataset.target [: 350]

test_answers = dataset.target [350:]

El ejemplo comienza con el conjunto de datos se enfrenta a Olivetti, un conjunto de imágenes de dominio público fácilmente disponibles a partir scikit-learn. Para este experimento, el código divide el conjunto de imágenes etiquetadas en un entrenamiento y un conjunto de prueba. Es necesario pretender que conoce las etiquetas del conjunto de entrenamiento, pero no sabe nada de la prueba. Como resultado de ello, se quiere asociar imágenes del set de ensayo a la imagen más similar del conjunto de entrenamiento.

impresión (dataset.DESCR)

El conjunto de datos Olivetti consta de 400 fotos tomadas de 40 personas (por lo que hay 10 fotos de cada persona). A pesar de que las fotos representan la misma persona, cada foto ha sido tomada en diferentes momentos durante el día, con diferentes expresiones faciales o ligeras y detalles (por ejemplo, con gafas y sin ella). Las imágenes son de 64 x 64 píxeles, por lo que se desarrolla todos los píxeles en las características crea un conjunto de datos hecha de 400 casos y 4.096 variables. Parece que un gran número de características, y, de hecho, lo es. Utilizando RandomizedPCA, se puede reducir a un número más pequeño y más manejable.

de sklearn.decomposition RandomizedPCA importación

n_components = 25

Rpca = RandomizedPCA (n_components = n_components,

blanquee = True,

random_state = 101) .fit (train_faces)

imprimir ( `varianza explicada por los componentes de% i:% 0.3f` %

(n_components,

Video: Funcionamiento Algoritmo EigenFaces Matlab

np.sum (Rpca.explained_variance_ratio_)))

compressed_train_faces = Rpca.transform (train_faces)

compressed_test_faces = Rpca.transform (test_faces)

varianza explicada por 25 componentes: 0,794

los RandomizedPCA clase es una versión aproximada ACC, que funciona mejor cuando el conjunto de datos es grande (tiene muchas filas y variables). La descomposición crea 25 nuevas variables (parámetros n_components) y (blanqueamientoblanquee = True), La eliminación de algo de ruido constante (creado por textual y granularidad foto) y la información irrelevante a partir de imágenes de una manera diferente de los filtros que acabamos de mencionar. La descomposición resultante utiliza 25 componentes, que es aproximadamente 80 por ciento de la información contenida en 4.096 características.

matplotlib.pyplot importación como PLT

foto = 17 # Esta es la foto en la prueba

print ( `Estamos en busca de la cara de id =% i`

% test_answers [foto])

plt.subplot (1, 2, 1)

plt.axis ( `off`)

plt.title ( `Unknown cara `+ str (foto) +` en el equipo de prueba`)

plt.imshow (test_faces [foto] .reshape (64,64),

CMAP = plt.cm.gray, la interpolación = `cercano`)

plt.show ()

Aquí está la foto elegida, sujeto número 34, a partir del conjunto de prueba.

Eigenfaces
El ejemplo de aplicación le gustaría encontrar fotos similares.

Después de la descomposición del equipo de prueba, el ejemplo toma los datos relativos sólo para la foto 17 y lo resta de la descomposición del conjunto de entrenamiento. Ahora el conjunto de entrenamiento está hecho de las diferencias con respecto a la foto de ejemplo. Los codificarlas cuadrados (para eliminar los valores negativos) y los resume por fila, que se traduce en una serie de errores sumados. Las fotos más similares son los que tienen los errores de cuadrados mínimos, es decir, aquellos cuyas diferencias son los menos.

#Just el vector de componentes de valor de nuestra foto

mask = compressed_test_faces [foto,]

squared_errors = np.sum ((compressed_train_faces -

máscara) ** 2, eje = 1)

minimum_error_face = np.argmin (squared_errors)

most_resembling = Lista (np.where (squared_errors lt; 20) [0])

print ( `cara que se parezca mejor en la prueba de tren:% i` %

train_answers [minimum_error_face])

Mejor cara que se parezca en la prueba de tren: 34

Como lo hacía antes, el código puede ahora mostrar foto 17, que es la foto que mejor se asemeja a las imágenes del juego de trenes.

matplotlib.pyplot importación como PLT

plt.subplot (2, 2, 1)

plt.axis ( `off`)

plt.title ( `Unknown cara `+ str (foto) +` en el equipo de prueba`)

plt.imshow (test_faces [foto] .reshape (64,64),

CMAP = plt.cm.gray, la interpolación = `cercano`)

para k, m en enumerate (most_resembling [: 3]):

plt.subplot (2, 2, 2 + k)

plt.title ( `Match en tren establece ningún`. + str (m))

plt.axis ( `off`)

plt.imshow (train_faces [m] .reshape (64,64),

CMAP = plt.cm.gray, la interpolación = `cercano`)

plt.show ()

aprendizaje automático Eigenfaces
La salida muestra los resultados que se asemejan a la imagen de prueba.

Video: "PROSOPAGNOSIA": el no reconocimiento de los rostros

A pesar de que la foto más similar es similar (es sólo ligeramente diferente escala), las otras dos fotos son bastante diferentes. Sin embargo, a pesar de que esas fotos no coinciden con la imagen de la prueba, así, que realmente muestran la misma persona que en la foto 17.

Artículos Relacionados