Algoritmo de reconocimiento de patrones de aprendizaje de una sola vez

Introduccion


Quiero presentarles el resultado de mis experimentos con algoritmos de reconocimiento de imágenes con aprendizaje por primera vez (el llamado Aprendizaje One-Shot). Como resultado de los experimentos, se desarrollaron ciertos enfoques para la estructuración de imágenes y, como resultado, se incorporaron en varios algoritmos interconectados y una aplicación de prueba en Android, con la que puede verificar la calidad y el rendimiento de los algoritmos.


Mi objetivo era crear un algoritmo con un principio de funcionamiento claro que pueda encontrar dependencias abstractas en una imagen la primera vez (para aprender) y mostrar una calidad de reconocimiento aceptable (buscar tales dependencias abstractas) en los ciclos de reconocimiento posteriores. Al mismo tiempo, la lógica de la toma de decisiones debe ser transparente, susceptible de análisis, más cercana a un algoritmo lineal. En una escala condicional donde en un extremo el cerebro y en el otro es una máquina CNC, está mucho más cerca de la máquina que la red neuronal.


¿Por qué no una red neuronal?


Por el momento, las redes neuronales reinan en tareas de reconocimiento, en particular CNN es un tipo de estándar para el reconocimiento de patrones. Sin embargo, en mi opinión, su aplicación no es ilimitada y es necesario buscar otros enfoques.


Daré varias razones contra las redes neuronales:


  1. Se requieren grandes conjuntos de datos para la capacitación, que simplemente pueden no estar disponibles.
  2. Gran poder de aprendizaje y gran tiempo de aprendizaje para cada imagen.
  3. La opacidad del algoritmo, la incapacidad para depurar e influir directamente en el resultado. Es muy difícil, si no imposible, comprender la lógica de la distribución de pesos. Esto es tanto fuerza como debilidad.

Como funciona


La idea básica es esta: la muestra de la imagen debe estar estructurada, es decir la información que contiene debe reducirse al mínimo necesario, pero para que no se pierda el significado. Por ejemplo, los artistas dibujan bocetos: en solo unas pocas líneas precisas, un artista puede representar la cara de una persona o algún objeto y el espectador comprenderá lo que se representa. Una fotografía contiene una matriz de N * M píxeles, cada píxel contiene algunos bits de información de color, y si imagina todo esto en forma de parámetros de línea, la cantidad de información disminuye bruscamente y el procesamiento de dicha información es mucho más simple. El algoritmo debería hacer aproximadamente lo mismo. Debe resaltar los detalles principales en el marco: el que contiene la información básica y descartar todo lo innecesario.



El algoritmo encuentra la estructura de los vectores a lo largo de los límites de los objetos en la muestra y la misma estructura en la imagen reconocida.



Para obtener un vector, una imagen pasa por varias etapas de procesamiento:


  • Traducido al monocromo usando la fórmula simple (Rojo + Verde + Azul) / 3
  • El gradiente se calcula para cada punto de la matriz.
  • Se encuentran las regiones de peso más significativas del gradiente
  • Buscamos cadenas de vectores que cubran estas áreas.
  • A continuación, los pasos se repiten para obtener el número mínimo de vectores que transportan la información máxima.


Lo mismo sucede en el algoritmo analizado. A continuación, se comparan las matrices de vectores resultantes:


  • Primero, el algoritmo intenta aferrarse a algunas partes similares (grupos locales). Por ejemplo, puede encontrar una ceja similar a una ceja en una muestra, y luego encontrar una nariz que se parezca a una nariz.
  • Y luego se busca una relación similar entre los grupos locales. Por ejemplo, una ceja + nariz + otra ceja. Ya obtuve un clúster más complejo.
  • Etc. hasta que obtenga una imagen de las relaciones entre los grupos que recopilan todos o casi todos los vectores de imágenes. Es decir Por ejemplo, cejas, ojos, nariz, etc. La cara no funcionará.

Por lo tanto, se incluyen pequeños detalles en la imagen general y se produce un reconocimiento de patrón similar a una avalancha.
La clasificación en sí se basa en el principio de encontrar la imagen más similar de la almacenada. El más similar es el que tiene el mayor número de vectores coincidentes con las menores desviaciones con respecto al volumen total de vectores en la muestra.


El esquema general del funcionamiento de los algoritmos:



Entrenamiento de etapas múltiples


A pesar de que el algoritmo puede funcionar de manera eficiente a partir de una muestra, es posible aumentar la precisión del reconocimiento analizando varias muestras. No está implementado en la versión demo, así que solo hablaré sobre esta característica, es muy simple. El principio del entrenamiento en varias muestras es descartar vectores innecesarios. Los adicionales son aquellos que no están incluidos en un grupo de vectores mutuamente encontrado. Por ejemplo, puede haber una sombra en la muestra que se reconoce como un borde, pero puede no estar en la siguiente muestra.


Por lo tanto, si el vector es parte de un grupo que se encuentra en la muestra guardada y en la analizada, obtiene +1 punto, y si no, no obtendrá nada. Después de varios entrenamientos, los vectores que obtuvieron pequeños puntos se eliminan de la muestra guardada y ya no se usan para el análisis.


También puede crear un editor visual que simplemente le permita eliminar vectores no deseados del marco después del primer entrenamiento.


Que se puede usar


Honestamente, concentré todos mis esfuerzos en el algoritmo mismo. Aunque desde Trabajo con el entorno de soluciones empresariales y la automatización de la producción, luego veo una aplicación: reconocimiento de productos en almacenes y líneas de producción, simplemente no hay grandes conjuntos de datos aquí, luego la muestra debe mostrarse una vez y luego reconocerse. Como enlace de código de barras solo sin códigos de barras. Pero en general, la aplicación es la misma que con cualquier otro algoritmo de reconocimiento. La aplicación se debe a las capacidades y limitaciones del algoritmo.


Aplicación de prueba



La aplicación funciona con una matriz de 100 * 100 píxeles, convierte la imagen en una matriz monocromática de este tamaño. Al algoritmo no le importa en qué ángulo está la muestra y sus dimensiones también están dentro de ciertos límites.


A la izquierda, se muestra el resultado de resaltar áreas significativas de la imagen actual y los vectores coincidentes en ella (verde), y a la derecha se muestra la estructura de los vectores encontrados y el más adecuado de los guardados y vectores similares se resaltan en rojo en la estructura guardada. Por lo tanto, las estructuras vectoriales resaltadas en rojo y verde que el algoritmo considera similares.


Puede guardar múltiples muestras. Y mostrando una nueva imagen, el algoritmo encontrará la más adecuada y mostrará partes similares.

Source: https://habr.com/ru/post/es414425/


All Articles