Cómo implementar el reconocimiento de imágenes para crear una aplicación para organizar imágenes

Desde mi limitado conocimiento, puedo sugerirle que use lo que se conoce como arquitectura siamesa. Los modelos de arquitectura siameses aprenden una representación de características latentes que agrupa imágenes similares donde usted define la similitud. En su caso, la similitud sería imágenes de la misma persona. Para otro caso, es posible que desee separar caras y casas en dos grupos, por lo que la similitud es la estructura de la cara en sí y la estructura de la casa. La misma idea se puede utilizar para la verificación de firma.

A continuación se muestra una representación de la arquitectura siamesa:

La similitud se encuentra usando esta representación oculta.

Aunque otras respuestas sugieren usar un modelo de aprendizaje profundo pre-entrenado y su vector de representación de espacio latente para encontrar una similitud, es posible que no obtenga la similitud que USTED desea. La representación del espacio latente es súper generalizada porque, a menudo, estos modelos se entrenan en el conjunto de datos ImageNet. Entonces la tarea es bastante diferente. Pero si realmente quieres aprovechar un modelo pre-entrenado, es muy simple convertir una red como VGG16 a una arquitectura siamesa.

Para implementar algo en estas líneas, puede llevarlo a cualquier lugar entre un par de días o un mes, dependiendo de su conjunto de datos, la infraestructura de aprendizaje profundo que tenga y su experiencia en el tema.

¡Espero que esto ayude!

Si desea agrupar según la persona en la foto, necesitará algo que pueda detectar caras y luego etiquetar la cara como perteneciente a alguna persona. Por lo tanto, está buscando algo similar a las cascadas HAAR [1] y algo que pueda resolver el problema de YaleFaces [2] (las CNN son populares. Sin embargo, existen otras técnicas).

En caso de que no desee eso y solo desee agrupar según la similitud, puede usar SOM o Kmeans para hacerlo [3] [4] [5].

Este no es un problema simple, por lo que tendrá que escribir un poco de código usted mismo.

Notas al pie

[1] Detección de rostros usando cascadas Haar

[2] Página de inicio de reconocimiento facial – Bases de datos

[3] Segmentación de imagen en color basada en mapas autoorganizados con clustering de k-medias y mapa de prominencia

[4] http://thesai.org/Downloads/IJAR

[5] https://arxiv.org/pdf/1206.0104.pdf

Puede usar redes neuronales profundas previamente entrenadas para obtener el “vector de características” que generalmente tiene alrededor de 2000 dimensiones.

Este vector de características captura todo el significado semántico de la imagen y puede usarse para medir la similitud entre imágenes.

Las imágenes anteriores son de Introducción a la búsqueda de similitud en Flickr, donde muestran cómo ellos (Yahoo Research) han implementado una función de fotos similares en Flickr utilizando DNN.

Puede usar davidsandberg / facenet para incrustaciones preformadas para caras.

Pero aquí es posible que no conozca el número de grupos (número de personas) para el agrupamiento, por lo tanto, puede decidir un umbral de similitud (puede ser coseno) y decir que dos fotos son de la misma persona si la similitud entre dos fotos es menos del umbral

Puede usar el siguiente código para obtener similitud entre dos vectores.

desde scipy import espacial

img1_embed = [3, 45, 7, 2]
img2_embed = [2, 54, 13, 15]
similitud = 1 – spatial.distance.cosine (img1_embed, img2_embed)