32

Entiendo cómo funcionan las redes neuronales, pero si quiero usarlas para el procesamiento de imágenes como el reconocimiento real de caracteres, no puedo entender cómo puedo ingresar los datos de imagen a la red neuronal.¿Cómo ingresar la imagen a la red neuronal?

Tengo una imagen muy grande de una letra A. ¿Tal vez debería intentar obtener información/especificaciones de la imagen y luego usar un vector de valores de esa especificación? ¿Y serán la entrada para la red neuronal?

¿Quién ya ha hecho algo así? ¿Puede explicarme cómo hacerlo?

+0

¿Ya tienes neuronet? Si no, esta es una pregunta extraña. En caso afirmativo, publique la interfaz al menos. –

+1

No es una pregunta extraña. En realidad, si tengo una interfaz, significa que al principio tomo la decisión de cómo ingresaré la imagen en la red neuronal. La pregunta es: ¿puedo ingresar datos de imágenes, como la letra A, en una red neuronal, incluso si es muy grande o pequeña, o debería dividirla en algunos parámetros que determinan de manera única la letra A! – Dzen

+0

Si debería dividirlo en parámetros, ¿qué tipo de parámetros debería usar? – Dzen

Respuesta

7

El nombre del problema que intenta resolver es "feature extraction". Es decididamente no trivial y un tema de investigación activa.

La manera ingenua de hacerlo es simplemente asignar cada píxel de la imagen a una neurona de entrada correspondiente. Obviamente, esto solo funciona para imágenes que son todas del mismo tamaño, y generalmente tiene una efectividad limitada.

Más allá de esto, hay una gran cantidad de cosas que puede hacer ... Filtros de Gabor, características similares a Haar, PCA e ICA, características dispersas, solo por nombrar algunos ejemplos populares. Mi consejo sería buscar un libro de texto sobre redes neuronales y reconocimiento de patrones o, específicamente, reconocimiento óptico de caracteres.

+0

¿Puede sugerir algunos buenos libros sobre OCR? – Dzen

+0

No es realmente mi especialidad, pero una búsqueda rápida muestra "Métodos de extracción de características para el reconocimiento óptico de caracteres" de Roman Yampolskiy, que parece que podría contener lo que busca. –

24

La solución más fácil sería normalizar todas sus imágenes, tanto para entrenamiento como para pruebas, para tener la misma resolución. Además, el personaje en cada imagen debe ser del mismo tamaño. También es una buena idea usar imágenes en escala de grises, por lo que cada píxel le daría un solo número. Entonces podría usar cada valor de píxel como una entrada a su red. Por ejemplo, si tiene imágenes de tamaño 16x16 píxeles, su red tendría 16 * 16 = 256 neuronas de entrada. La primera neurona vería el valor del píxel en (0,0), el segundo en (0,1), y así sucesivamente. Básicamente, coloca los valores de la imagen en un vector y alimenta este vector a la red. Esto ya debería funcionar.

Al extraer primero las características (por ejemplo, los bordes) de la imagen y luego usar la red en esas características, quizás podría aumentar la velocidad de aprendizaje y también hacer que la detección sea más robusta. Lo que haces en ese caso es incorporar conocimiento previo. Para el reconocimiento de caracteres, usted conoce ciertas características relevantes. Por lo tanto, al extraerlos como un paso de preprocesamiento, la red no tiene que aprender esas características. Sin embargo, si proporciona las funciones incorrectas, es decir, irrelevantes, la red no podrá aprender el mapeo de imágenes -> caracteres.

+1

¿Son buenos mis pasos para resolver esta pregunta? 1. imagen binarizada. 2. segmentación. encuentra partes conectadas de la imagen. puede estar usando contornos. 3. para cada segmento proceda por separado de otros segmentos. 3.1 extraer información del segmento de imagen. 3.2 comparar con algún patrón o ingresarlo a la red neuronal. así que tengo algunas preguntas. 1. si segoto la imagen y recibo una letra "i" allí, el punto sobre ella será separado del segmento. Entonces, ¿cómo manejar esta situación? Puede ser agregar un caso especial. 2. ¿Debo cambiar el tamaño del segmento si es muy grande o demasiado pequeño? – Dzen

+0

¿Puedo ingresar imágenes de diferentes tamaños a mi red neuronal? No creo que pueda, pero no estoy seguro. Entonces, la imagen puede contener letras de diferentes tamaños, ¿cómo manejarla? – Dzen

+3

Sus pasos de preprocesamiento parecen que esto podría funcionar; sin embargo, sugiero comenzar con lo que sugerí en el primer párrafo. Me parece que no tienes mucha experiencia con redes neuronales o reconocimiento de caracteres. Entonces, para tener una idea de lo que funciona y cómo funciona, debe comenzar con un caso simple. Agregar demasiados pasos a la vez aumentará las posibilidades de cometer algún error y, sin una idea real de qué esperar de cada paso individual, será difícil depurar el código. – ahans

1

Puede utilizar como entrada los píxeles reales. Esta es la razón por la cual a veces es preferible usar una resolución más pequeña de las imágenes de entrada.

Lo bueno de ANN es que de alguna manera son capaces de selección de características (ignorando los píxeles no importantes mediante la asignación de pesos cerca de cero para los nodos de entrada)

2

Todas estas consideraciones sobre la aplicación de los NN a las imágenes están cubiertos en nuestro 2002 review paper (basada pixel, la invariancia de escala basada funciones, etc.)

Su mayor desafío es la llamada 'maldición de la dimensionalidad'.

Compararía el rendimiento de NN con el de una máquina de vectores de soporte (complicado qué kernels usar).

Cuestiones relacionadas