Redes Neuronales ´
Reconocedor de frutas a través de una Red Neuronal Integrantes.
1. Introducción 1.1. Redes Neuronales para el reconocimiento de frutas Las redes neuronales pueden utilizarse en un gran número y variedad de aplicaciones, tanto comerciales como militares. La mayoría de estas aplicaciones consisten en realizar un reconocimiento de patrones, como como es: buscar un patrón en una serie de ejemplos, clasificar patrones, patrones, completar una señal a partir de valores parciales o reconstruir el patrón correcto partiendo de uno uno distorsionado. Desde el punto de vista de los casos de aplicación, la ventaja de las redes neuronales reside en el procesado paralelo, adaptativo y no lineal. El dominio de aplicación de las redes neuronales también se lo puede clasificar de la siguiente forma: asociación y clasificación, regeneración de patrones, regresión generalización, generalización, y optimización. Para este proyecto las redes neuronales serán utilizadas para el reconocimiento r econocimiento de parones determinados determinados por las siluetas siluetas de frutas determinadas. determinadas. La base base del proyecto está en en el adecuado adecuado entrenamiento de de la Red Neuronal, Neuronal, con la base de conocimiento adecuada, adecuada, para luego reconstruir la red mediante el Software de reconocimiento desarrollado.
1.2. Redes Neuronales Definición
Una red neuronal es un sistema de procesadores paralelos conectados conectados entre sí en forma de grafo dirigido. Esquemáticamente cada elemento de procesamiento (neuronas) de la red se representa como un nodo. Estas conexiones establecen establecen una estructura jerárquica que tratan de emular la fisiología del cerebro en busca nuevos modelos de procesamiento para solucionar problemas concretos del mundo real.
Elementos
" Un conjunto de sinapsis o ligas ligas de conexión, las cuales cuales son caracterizadas caracterizadas por un peso o potencia potencia propios a cada conexión. " Una función suma que se encarga encarga de sumar los productos productos de las señales de entrada por los pesos de las sinapsis que llegan a la neurona. " La función de activación activación o transferencia, se encarga encarga de determinar el nuevo estado estado de actividad de la neurona con base a la actividad actual de la red, condicionado de este modo la amplitud de una neurona.
Reseña histórica
En 1943, el neurobiólogo Warren McCulloch, y el estadístico Walter Pitss, publicaron el artículo "A logical calculus of Ideas Imminent in Nervous Activity". Este artículo constituyó la base y el inicio del desarrollo en diferentes campos como son los Ordenadores Digitales (John Von Neuman), la Inteligencia Artificial (Marvin Minsky con los Sistemas Expertos) y el funcionamiento del ojo (Frank Rosenblatt). En 1957, Frank Rosenblatt publicó el mayor trabajo tr abajo de investigación en computación neuronal realizado hasta esas fechas. Su trabajo consistía en el desarrollo de un elemento llamado "Perceptron". En 1982 John Hopfield con la publicación del artículo Hopfield Modelo Crossbar Associative Network, junto con la invención del algoritmo Backpropagation. Backpropagation. Reglas de Aprendizaje
Un algoritmo de aprendizaje es un método adaptable por medio del cual un RNA se auto organiza, implementando un comportamiento deseado. Dando un conjunto de muestras para la RNA, el algoritmo de aprendizaje reconfigura iterativamente los parámetros de la red hasta obtener obtener una respuesta respuesta deseada. Un paso de corrección corrección es ejecutado iterativamente hasta que la red aprende a producir la respuesta deseada. deseada.
Esencialmente, Esencialmente, un algoritmo de aprendizaje es un ciclo cerrado de presentación de ejemplos y correcciones de los parámetros de la red. Los algoritmos se dividen en dos diferentes tipos: " Supervisados " No-Supervisados
2. Desarrollo del Reconocedor de Imagen 2.1. Algoritmo BackPropagation En 1986, Rumelhart, Hinton y Williams, Wil liams, formalizaron un método para que una red neuronal aprendiera la asociación que existe entre los patrones de entrada y las clases correspondientes, utilizando varios niveles de neuronas. El algoritmo de aprendizaje backpropagation backpropagation conlleva una fase de propagación hacia adelante y otra fase de propagación hacia atrás. Ambas fases se realizan por cada patrón presentado en la sesión de entrenamiento. Desarrollo del algoritmo: Se tiene el siguiente problema: No se dispone de las respuestas deseadas para las neuronas ocultas.
Red Neuronal Multicapa, para aplicar el algoritmo Backpropagation
Se usa error derivado del error en la salida (propagado y escalado). El conocimiento queda almacenado almacenado en la matriz de pesos de la red o matriz de conexión. Paso 0: Inicializar los pesos y biases Establecerlos a valores pequeños y aleatorios Paso 1: Mientras la condición de parada sea falsa, hacer pasos 2-9 Paso 2: Para cada par entrada-salida de entrenamiento s:t, hacer pasos 3-8 Paso 3: Establecer la activación de cada unidad de entrada ¡=l,...,in x¡ = si y transmitir esta señal
a todas las unidades de la capa oculta Paso 4: Calcular la entrada neta de cada unidad oculta j= l,..,p uj= bj + £ Wp . x¡ Aplicar su función de activación para calcular su señal de salida Oj = f (Uj) Y enviar esta señal a todas las unidades de la capa siguiente Paso 5: Calcular la entrada neta de cada unidad de salida k=l,..,m uk = bk + £ wk] . Oj Aplicar su función de activación para calcular su señal de salida bk = f (bk) RETROPROPAGACION DEL ERROR (BACKPROPAGATION) Paso 6: Cada unidad de salida k= recibe r ecibe el valor deseado asociado al patrón de d e entrenamiento,
y calcula su gradiente loca ¡k = = (tk - yj . f' (uj (uj Calcula el término para la corrección de los pesos _wk] = n .¡k . Oj Calcula el término para la corrección de los biases _bk = = n . ¡k Y envía ¡k a a las unidades de la capa anterior Paso 7: Cada unidad oculta j= l,..,p suma sus entradas delta (desde las unidades de la capa de salida) ¡inj = £ ¡k . . Wj, calcula el término de gradiente local ¡j = ¡¡nj . f' (Uj) calcula el término de corrección del peso _wij = n ¡r .x¡ .x¡ y el del término de corrección del bias _ br = = n. ¡r ACTUALIZAR PESOS Y BIASES Paso 8: Cada unidad de salida k=
actualiza su bias y sus pesos (j=0,..,p) (j =0,..,p)
wkj (nuevo) = wkJ (anterior) + _w k] bk (nuevo) (nuevo) = b k (anterior) (anterior) + _b k Cada unidad oculta j= l f ..,p ..,p actualiza su bias y pesos (i=0,1,&. n) Wj (nuevo) = Wj, (anterior) + _Wji bj (nuevo) = bj (anterior) + _bj Paso 9: Verificar la condición de
parada Si se logró un error menor al error cuadrático o se llegó al número de Épocas de entrenamiento
En esta siguiente etapa, después de haber encontrado los pesos ideales en el entrenamiento, se aplica sólo la fase Feedforward del mismo Paso 0: Establecer los pesos ideales (Aplicar algoritmo de entrenamiento) FEEDFORWARD Paso 1: Para cada vector de entrada, hacer pasos 2-4 Paso 2: Para i=l hasta n, establecer la activación de la unidad de entrada x¡ Paso 3: Para j=l hasta p üj = bj + £ Wj¡ . x, Qj = f (Uj) Paso 4: Para k=l hasta m uk = = bk + + £ wkj. o j Yk = f K) |
C
2.2. Proceso de Entrenamiento El proceso de entrenamiento de la red neuronal se llevó a cabo mediante el uso del algoritmo Backpropagation, explicado anteriormente para redes multicapa. multi capa. Este entrenamiento necesitó de las entradas adecuadas, esto es: imágenes de las frutas a procesar y su adecuada representación representación para la Red Neuronal, además del uso de las herramientas de entrenamiento para la Red Neuronal, las etapas la describiremos a continuación. Procesamiento de imágenes para el entrenamiento
El artificio empleado es el de una matriz de NxN, para representar la silueta de las frutas a considerar. Por ejemplo en las siguientes figuras se observan una muestra de una fruta, y su respectiva representación en una matriz.
Fotografía de muestra de fruta
Imagen procesada y dispuesta en una matriz para la entrada de la Red Neuronal
Para la realización del proyecto se utilizó util izó la representación de la imagen en una matriz de 50x50. Este artificio consiste en representar cada sector perteneciente a la l a silueta de la imagen por un número, en nuestro caso el uno (1), y por los sectores vaciós el cero (0). De la siguente manera
Luego se realizó la linealización de la matriz a un vector de dimensión 50x50 = 2500. Por ejemplo tenemos tenemos esta sección sección de la matriz con su respectivo índice índice que representaría cada celda el vector
Distribución de celadas y posiciones del vector linealizado, en la matriz de la imagen
EL objetivo es poder obtener el vector que representará la entrada de la Red Neuronal. Obtención de entradas para el entrenamiento
La forma de poder obtener el vector que representa representa a la imagen para el entrenamiento, se realizó mediante el Software desarrollado: _Reconocedor de frutas_, con el análisis de la imagen y luego con con la opción _TXT_, así como se muestra en la siguiente imagen.
Generación del archivo de entrada para el entrenamiento
Red Neuronal para el reconocimiento de de peras y carambolas:
Para entrenar la red Se utilizará el archivo generado por el Software desarrollado, en la carpeta _TXT_ del del paquete del proyecto. Se utilizará un pequeño programa programa desarrollado para Matlab. Lo tenemos adjunto en la carpeta del proyecto como _NeuronTrainPattern00.m_ _NeuronTrainPattern00.m_ Entrenamiento
En el entorno del MATLAB ejecutar el programa NEURONTRAINPATTERN " Introducir nombre de archivo con data: frutentrena2.prn (Base de entrenamiento) " Resultados de la lectura del archivo con data " Número de entradas: 2500 " Número de salidas: 3 " Número de paquetes de datos entrada-salida: 9 " Seleccionar de la Ventana Nueva: Serán generados automáticamente automáticamente (SINAPSIS) " Introducir neuronas en capa intermedia: 150 " Seleccionar de la Ventana nueva: Considera Neurona bias: SI SI " Introducir ratio de aprendizaje: .0009 " Introducir momento: 0 " Introducir ratio de aprendizaje de exponente a: 0 " Introducir ratio de aprendizaje del centro c: 0 " Introducir el valor máximo del error (%): 10 " Introducir el máximo etapas de aprendizaje: 300
Gráfica de la disminución del error durante entrenamiento
Luego se solicitará guardar los valores de la l a Red entrenada. Lo realizamos en el archivo: _frutentrenado206.prn_, _frutentrenado206.prn_, de la carpeta carpeta _DataRedNeuronal_ _DataRedNeuronal_ del paquete del proyecto. Este archivo de texto _frutentrenado206.prn_, es el que nos permitirá el funcionamiento de nuestro software: _Reconocedor de Frutas_, ya que representa la información y estructura de nuestra Red Neuronal,
2.3. Tecnologías y plataformas usadas Las tecnologías utilizadas son: a. Java (versión 7): Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos y basado en clases que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para para aplicaciones de cliente-servidor de web.
Duke . La mascota de Java
Matlab versión 2012
Matlab es una una herramienta de software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M). Está disponible para las plataformas Unix, Windows, Mac OS X y GNU/Linux. Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con otros dispositivos hardware. Es un software muy usado en universidades y centros de investigación y desarrollo. En los últimos años ha aumentado el número de prestaciones, como la de programar directamente procesadores digitales de señal señal o crear código VHDL. VHDL. Netbeans versión versión 7.4
El IDE NetBeans es un entorno de desarrollo integrado - una herramienta para programadores pensada pensada para escribir, compilar, depurar depurar y ejecutar programas. programas. Está escrito en Java - pero puede servir para cualquier otro lenguaje de programación, de código abierto escrito escrito completamente completamente en Java. El El NetBeans IDE soporta el desarrollo de todos los tipos de aplicación Java (J2SE, web, EJB y aplicaciones móviles).
2.4. Software Reconocedor de Frutas Arquitectura:
Arquitectura del Software Reconocedor de Frutas y principales componentes
2.5. Modulo para la construcción de la Red Neuronal Ubicamos este componente en la arquitectura general del proyecto:
Ubicación del módulo de la construcción de la Red Neuronal, en la Arquitectura del proyecto
El módulo para la construcción construcción de la red neuronal, corresponde corresponde a las clases ubicadas en el paquete del código fuente _RedNeuronal_, Estas clases son: _BackPropagation.java_, que posee parte del algoritmo de entrenamiento
BackPropagation BackPropagation y operaciones de matrices matrices para el algoritmo. algoritmo. _InPutOutPutRNFile.java_ con métodos básicos lectura de archivos y tratamiento
de imágenes.
2.6. Módulo la para capturas de imágenes.
Ubicación del módulo para la captura de imágenes, en la Arquitectura del proyecto
Software utilizado para la captura de imágenes es yawcam es un software de cámara web para Windows escritas en Java. Las principales ideas para Yawcam son que sea sencillo y fácil de usar sino que incluye todas las características habituales. Caracteristicas Yawcam: " Reproducción de vídeo " fotos de la imagen " servidor web incorporado " La detección de movimiento
" FTP-upload " Texto y superposiciones de imágenes " Protección por contraseña " Anuncios en línea para las comunidades " Programador de tiempo en línea " películas de lapso de tiempo " Ejecutar como un servicio de Windows " Multi idiomas
2.7. Módulo para el procesador de imagen
Ubicación del módulo para el procesador de imagen, en la Arquitectura del proyecto
Este módulo se encarga de procesar la imagen tomada desde la webcam, haciendo los procesos de binarizar la imagen en dos colores (blanco y negro), obtener el contorno o cascara de la fruta, convertir la imagen en una matriz de 50x50 y obtener la salida binaria para generar el archivo para el matlab. FIGURA DE LA PERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.
1. Binarizar la imagen en dos colores en blanco y negro. 2. Obetner el contorno de la cascara de la fruta
3. Convertir la imagen en una matriz 50x50 4. Obtener la salida binaria 0s y 1s para generar el archivo para el software Matlab
3. Funcionamiento del reconocedor El software reconocedor es un archivo ejecutable java .jar que funciona en cualquier plataforma Windows, Linux Linux o Mac.
La ejecución del programa se despliega sobre las librerías de Swing de Java
Para comenzar el reconocimiento es necesario capturar la imagen.
Luego presionar el botón Reconocer Imagen para determinar si es una pera o carambola
Vista de la matriz de salida de un reconocimiento, visto en consola
4. Conclusiones " Las redes neuronales neuronales representan una una alternativa muy recomendable recomendable para el reconocimiento reconocimiento de patrones, sobre todo por la adaptabilidad a cualquier cualquier tipo de forma. " El trabajo aplicó las redes neuronales neuronales como aplicación aplicación para el reconocimiento de formas en este caso frutas, con el fin de determinar si un objeto era una pera, una carambola carambola o no se podía determinar. " El algoritmo Backprogation soluciona soluciona de manera efectiva el el aprendizaje de una red neuronal, hallando los pesos que le corresponden a las neuronas de la capa oculta. " El algoritmo BackPropagation BackPropagation es una excelente alternativa alternativa si se desea realizar aplicaciones aplicaciones de clasificación y reconocimiento de patrones. " La manipulación de cada cada una de las imágenes imágenes se realizó con arreglos de pixeles siendo un un método más directo para las transformaciones transformaciones de de escalado y renderizado.
Recomendaciones y trabajo futuro 5. Recomendaciones " Además de los módulos de entrenamiento entrenamiento y reconocimiento, reconocimiento, sería necesario necesario un módulo para modificar las configuraciones como son el porcentaje del contorno, el color discriminante, numero de columnas y filas de la matriz, etc. " Se planea implementar la funcionalidad funcionalidad de poder discriminar espacios espacios vacíos de una imagen, para que el procesamiento de la l a imagen sea más eficiente. " Utilizar un software de captura de imagen imagen más versátil que el YawCam, una buena alternativa alternativa seria utilizar la librería de Java Media Media Framework para la toma de imágenes. " Una mejora seria generar generar un applet para que los usuarios de un sitio sitio web puedan ejecutar ejecutar el software sin sin la necesidad de instalar y configurar configurar el software manualmente.