Este documento describe el diseño de un agente inteligente que puede detectar y reconocer señales de tránsito usando una cámara infrarroja. El agente es reactivo y usa redes neuronales entrenadas para clasificar las imágenes de las señales y advertir al conductor a través de señales visuales. El documento explica los componentes del agente, los algoritmos y herramientas de desarrollo utilizadas como MATLAB y redes neuronales backpropagation.
4. Tipo de Agente y Componentes Agente reactivo simple.- Las acciones de nuestro agente solo dependen de la percepción actual pues ignoran las percepciones históricas, para advertir nuestro sistema solo tiene que percibir la imagen (señales de tránsito), reconocerla y actuar generando una advertencia.
5. Tipo de Agente y Componentes (Cont.) Ambiente: El entorno serán las señales de tránsito Sensores: Simulador de cámaras infrarrojas, el cual permitirá percibir las imágenes de las señales de tránsito en cualquier momento. ¿Cómo es el mundo ahora?: Esto se refiere a que el entorno va a cambiar conforme el vehículo se desplaza. Regla de percepciones-acciones: Aquí se utilizará el modelo de redes neuronales en las cuales una percepción será tomada mediante las entradas y mediante una clasificación se generarán las respectivas acciones que el agente deberá advertir. Esto luego que de que la red neuronal haya sido entrenada
6. Tipo de Agente y Componentes (Cont.) Que acción debo emprender: Nuestro agente para realizar una acción se basará en las percepciones leídas a través de las entradas de la red neuronal para generar una clasificación que más se aproxime a la acción más correcta que nuestro agente deberá realizar. Actuadores: Son el resultado de una clasificación generada por la red neuronal y que serán impresas por el agente para advertir al usuario.
7. definición DEL PROBLEMA En la actualidad manejar un vehículo implica un nivel de concentración elevado, aunque se tenga todas las atenciones necesarias al momento de conducir, se pueden pasar por desapercibidas las señales de tránsito y así cometer contravenciones de transito o incluso provocar accidentes. Partiendo de esta problemática creemos conveniente el diseño e implementación de un agente que permita detectar y reconocer las señales de tránsito y según estas advertir al conductor mediante señales visuales de cómo debe actuar.
8. definición DEL PROBLEMA (Cont.) Los componentes para nuestro agente son los siguientes: Estados: El agente tendrá dos estados: Mostrar advertencias y no mostrar nada. Estado Inicial: No mostrar nada. Función sucesor: Cambiar estado (Acción). Test Objetivo: Si la percepción obtenida es una señal de transito. Costo de camino: Sumatoria de todos los niveles de confianza al cambiar de un estado a otro.
9. TIPOS DE ENTORNO SOBRE EL CUAL TRABAJARÁ EL AGENTE El entorno de nuestro agente son las señales de tránsito ya que el agente se integrará como un componente más del vehículo el cual ayudara al conductor mediante advertencias luego de hacer capturas y reconocimientos de las imágenes que representan las señales de tránsito. El entorno es totalmente observable ya que el agente tendrá simuladores de sensores los cuales permitirán tener capturas claras de las imágenes de tránsito Determinista: El entorno es de este tipo porque se sabe en todo momento cual debe ser la advertencia a mostrar al conductor sabiendo la acción que este deberá ejecutar al percibir cierta imagen.
10. TIPOS DE ENTORNO SOBRE EL CUAL TRABAJARÁ EL AGENTE (Cont.) Episódico: Por que la acción de advertir al conductor en un momento dado no influirá en ninguno de los siguientes episodios. Dinámico: El entorno es de este tipo porque la posición del vehículo cambia constantemente lo que origina un cambio en todo momento de las imágenes que percibe el agente. Continuo: Porque en todo momento el agente debe estar tratando de encontrar señales a través de las cámaras mientras se desplaza el vehículo. Agente es del tipo individual: El agente es individual ya que no interactuará con ningún otro agente.
11. HERRAMIENTAS DE DESARROLLO Para implementar nuestro agente utilizaremos la herramienta de desarrollo técnico MATLAB, hemos elegido esta herramienta por las grandes posibilidades que proporciona: Combina cálculos numéricos, manejo de imágenes y programación potente (como por ejemplo las estructuras de datos y matrices de celdas) y es fácil de usar. Las cajas de herramientas (los TOOLBOX) [4] proporcionan acceso a cientos de rutinas útiles. Tiene uso muy extendido en la educación de ingeniería. [1]
12. ALGORITMOS A UTILIZAR (BASADOS EN IA). Para implementar nuestro agente utilizaremos algoritmos inteligentes basados en redes neuronales, ya que un componente de nuestro sistema consiste en un reconocedor de las imágenes de las señales de tránsito, estos algoritmos son muy utilizados con este tipo de problemas por ser los mejores clasificadores cuando se trabaja con información que pueda contener ruido. Existen un gran número de API’s y frameworks que implementen por nosotros la estructura de la mayor parte de los tipos de redes y la funciones necesarias para trabajar con ellas. Uno de estos frameworks es el NEURONAL NETWORK TOOLBOX [5] que matlab posee, que nos ofrece una implementación genérica de redes neuronales, así como implementaciones de redes neuronales concretas como las perceptrón, backpropagation, Som, etc.
13. ALGORTIMO DE PROPAGACION HACIA atrás del toolbox neuronal network de matlab.[6] La implementación más simple de backpropagation es el aprendizaje que actualice los pesos y los prejuicios o valores de inicio de la red en la dirección en la cual la función decrece mas rápidamente, siguiendo el negativo de la gradiente. Hay dos formas diferentes en el cual el algoritmo de la gradiente descendente puede ser implementada: en un modo incremental y modo batch o lote. In modo incremental, la gradiente es calculada y los pesos son actualizados después de que cada entrada es aplicada a la red. En modo batch o lote, todas las entradas son aplicadas a la red antes de actualizar los pesos. La siguiente sección describe el entrenamiento en modo batch o lote.
14. ALGORTIMO DE PROPAGACION HACIA atrás del toolbox neuronal network de matlab.(Cont.) Entrenamiento Batch (train) En modo batch los pesos y prejuicios o valores de inicio de la red son actualizados solamente después que el conjunto de entrenamiento ha sido aplicado a la red. Los gradientes calculados para cada ejemplo de entrenamiento se suman para determinar el cambio en los pesos y prejuicios o valores de inicio. Batch con gradiente descendente (traingd) La función batch de entrenamiento descendente hacia el abismo es traingd. Los pesos y valores de inicio son actualizados en la dirección de la gradiente negativa de la función de rendimiento. Si se quiere entrenar una red usando batchsteepestdescent, se debe fijar en la red a trainFcn la cadena traingd, y solo entonces se debe llamar a la función train. Sólo hay una función de entrenamiento asociada a una determinada red.
15. REDES NEURONALES CONOCIDAS Normalmente a la hora de trabajar con redes neuronales, querremos trabajar con un tipo de red neuronal concreto, el cual se ajuste mejor a nuestras necesidades. En este caso en vez de utilizar la función “network” para la creación de la estructura base, podemos utilizar funciones específicas para cada tipo de red neuronal, de manera que la estructura base que matlab nos devuelva tenga una configuración de capas de entrada, ocultas, conexiones etc. apropiada para el tipo de red neuronal deseado. Perceptron: newp(P,S) Backpropagation: newff(P, [S1,…., Sn]) Radiales: newgrnm(P,T) Mapas Autoorganizados: newsom(P,S) .
16. DISEÑO DE ALTO NIVEL MEDIANTE LA DESCRIPCION DE CASOS DE USO
18. DISEÑO DE BAJO NIVEL [8] A la hora de aplicar redes neuronales, y en general para cualquier problema de reconocimiento de patrones, hay una serie de pasos que serán comunes a la mayoría de los problemas. 1. Representación original de los datos 2. Pre-procesamiento de los datos originales para codificarlos en un formato apropiado para la red neuronal. 3. Procesamiento de la información. (Aplicación de la red neuronal) 4. Interpretación de los resultados.
19. 1. Representación de la información original. Lo primero que deberemos tener en cuenta, será la representación original de los datos que deberemos procesar, en este caso, el de reconocimiento de señales de tránsito, vamos a partir de una imagen, o conjunto de píxeles en blanco y negro que contendrán la señal a reconocer.
20. 2. Pre procesamientode los datos originales para codificarlos en un formato apropiado para la red neuronal. Para aplicar la información con la señal de tránsito a la red neuronal, deberemos realizar algún tipo de procesamiento para obtener la información apropiada que le pasaremos como entrada a dicha red. En este caso, lo que haremos será generar un array de valores enteros 0 o 1, de manera que un 1 significa que hay algo pintado y 0 no, de manera que este array de valores discretos será la información que pasaremos a la entrada de la red neuronal.
21. 2. Pre procesamientode los datos originales para codificarlos en un formato apropiado para la red neuronal. (Cont.) Algo a tener en cuenta es el tamaño del vector generado a partir de la imagen, por ejemplo si la imagen original tiene un tamaño de 200×200 pixeles, y creamos un array con un valor para cada píxel de dicha imagen obtendríamos un array de 40.000 elementos siendo necesario una red neuronal con el mismo número de entradas. Para optimizar mejor esto, vamos a procesar tan solo aquella zona de la imagen donde esté dicha señal de tránsito y además, vamos a dividir esta zona en una cuadrícula de por ejemplo 7×5 en nuestro caso, de manera que generaremos un vector de 35 elementos, correspondiéndose cada elemento con una de esas zonas en las que hemos dividido la señal de tránsito y en caso de que algún píxel de dicha zona esté pintado pondremos un uno y en caso contrario un cero. Vector para el patron x = (1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0, 0,0,0,1,1,1,1,1)
22. 3. PROCESAMIENTO DE LA INFORMACIÓN Creación de la Red neuronal en matlab Una vez tenemos creado el vector representando por la señal de tránsito, queremos ser capaces de procesarlo para detectar la señal de tránsito real que el agente a leído. En este caso sencillo, nos centraremos en predecir las señal de tránsito, para lo cual vamos a utilizar una red neuronal de tipo backpropagation [10], y como implementación el toolbox de redes neuronales de matlab. Como hemos dicho, la entrada de la red neuronal, será un array de 35 elementos conteniendo la información de los píxeles pintados en la imagen, así que necesitaremos una red neuronales de 35 entradas, de manera que en cada entrada se le aplicará un uno o un cero indicando la existencia de un trazo en dicha zona de la imagen. Como el objetivo es reconocer algunas señal de tránsito, o mejor dicho, el objetivo es que la red neuronales aprenda a clasificar los patrones de entrada en 7 clases diferentes, la red neuronal dispondrá de 7 salidas, una para cada señal de tránsito, de manera que tan solo se activará la salida correspondiente a la señal de tránsito
23. 3.1 Creación de la red neuronal Para la creación y simulación de la red neuronal, hemos generado primero una serie de patrones de muestra para cada uno de las señal de tránsito que queremos reconocer (35 unidades). patrón(velocidad máxima) El patrón será tomado de las imágenes de entrenamiento. patrón(ceda el paso) El patrón será tomado de las imágenes de entrenamiento. patrón(pare) El patrón será tomado de las imágenes de entrenamiento. patrón(no virar en U) El patrón será tomado de las imágenes de entrenamiento. patrón(redonel) El patrón será tomado de las imágenes de entrenamiento. patrón(semáforo) El patrón será tomado de las imágenes de entrenamiento.
24. 3.1 Creación de la red neuronal (Cont.) En segundo lugar, también tenemos la información de la salida que la red neuronal deberá generar para cada uno de estos patrones (7 señales de tránsito). 1;0;0;0;0;0;0 : representa ‘velocidad máxima’ 0;1;0;0;0;0;0 : representa ‘ceda el paso’ 0;0;1;0;0;0;0 : representa ‘pare’ 0;0;0;1;0;0;0 : representa ‘no virar en U’ 0;0;0;0;1;0;0 : representa ‘mantenga su derecha’ 0;0;0;0;0;1;0 : representa ‘redondel’ 0;0;0;0;0;0;1 : representa ‘semáforo’
25. 3.1 Creación de la red neuronal (Cont.) Así, pues primero cargaremos dicha información en matlab. Carga de los patrones //Representa los patrones en un vector de 35 bits para cada una de las imágenes que se utilizarán en el entrenamiento o se procederá a reconocerla Carga de los destinos //Representa la clase a la cual pertenezca esos patrones al momento de entrenar la red. A continuación creamos la red neuronal con la función newff que es del tipo Backpropagation: La red neuronal Backpropagation presenta una gran variedad de opciones de configuración, dependiendo de la necesidad de aprendizaje y de la aplicación que se esté desarrollando.
26. 3.2 Entrenamiento de la red neuronal Para entrenar nuestra red corremos (run) el archivo AGENTE.m, luego nos aparece la siguiente pantalla, picamos en el botón Entrenar para que la aplicación proceda a entrenar la red neuronal artificial con cuatro set de las señales de tránsito es decir nuestro set contendrá cuatro formas diferentes por cada una de las señales de tránsito
27. 3.2 Entrenamiento de la red neuronal (Cont.) Después que la aplicación extrae las características de todo el set de entrenamiento se las almacena en una matriz, posterior a esto se procede a utilizar la función de entrenamiento traingdx para ajustar la red al conjunto de entrenamiento, a continuación podemos observar un pantallazo cuando a concluido el entrenamiento. Aquí se muestra la información del avance del algoritmo que se obtiene mientras se produce el ajuste de los pesos. TRAINGDX, Epoch 0/5000, SSE 49.5099/0.1, Gradient 24.5441/1e-006 TRAINGDX, Epoch 20/5000, SSE 20.6531/0.1, Gradient 8.82899/1e-006 TRAINGDX, Epoch 40/5000, SSE 13.177/0.1, Gradient 5.18409/1e-006 TRAINGDX, Epoch 60/5000, SSE 8.07868/0.1, Gradient 2.67985/1e-006 TRAINGDX, Epoch 80/5000, SSE 2.50587/0.1, Gradient 1.30006/1e-006 TRAINGDX, Epoch 100/5000, SSE 0.269944/0.1, Gradient 0.222204/1e-006 TRAINGDX, Epoch 109/5000, SSE 0.0948903/0.1, Gradient 0.0915937/1e-006 TRAINGDX, Performance goalmet. Finalmente podemos observar que el entrenamiento termina pues alcanza su objetivo deseado que era de conseguir un error cuadrático medio menor a 0.1 (SSE 0.0999952/0.1).
28. 3.3 Simulación de la red neuronal Una vez entrenada la red neuronal, ya podemos aplicar un patrón real a la entrada y ver en la salida la clase (o señal de tránsito) en la que se ha clasificado. [val,num] = sim(net, [1;1;1;0;0;1;0;1;1;...;1;1]);// Patrón a reconocer val =0.0000 0.0008 0.9213//Clase a la que más se aproxima 0.0005 0.0003 0.0012 0.0004 0.0004 En este caso, de las 7 salidas todas tienen un valor muy cercano a cero, excepto la salida correspondiente a la de la señal de tránsito en la posición dos (en este caso la de ceda el paso), que tiene un valor muy cercano a uno, siendo esta la señal reconocida.
29. 4. Interpretación de los resultados En este caso, los resultados son fáciles de interpretar como hemos visto en el apartado anterior, la salida de la red neuronal que tenga valor 1 (o que más se parezca al valor 1) será la que tomaremos como salida activa indicando la señal reconocida.
30. PRUEBAS DEL SISTEMA Una vez que se ha terminado el entrenamiento la red está lista para reconocer, para realizar un análisis de los resultados que se obtengan hemos seleccionado un conjunto test que contiene las señales de tránsito, esto con el fin de poder medir que tan eficiente es nuestra red a la hora de clasificar nuevas instancias las cuales no participaron en el entrenamiento previo:
31. PRUEBAS DEL SISTEMA Cont. Reconocimiento de la imagen que contiene la señal de transito Detenerse: Para poder reconocer lo que representa una imagen primero procedemos a cargar la imagen desde la aplicación al picar en el botón Cargar Imagen, luego ubicamos la imagen con el nombre t0.jpg y picamos en abrir. Una vez que hemos cargado la imagen picamos en reconocer para que la aplicación consulte a través de la red neuronal cual es la clase más próxima en la que puede ser ubicada la nueva instancia.
32. Reconocimiento de la imagen que contiene la señal de transito Semáforo: Para poder reconocer lo que representa una imagen primero procedemos a cargar la imagen desde la aplicación al picar en el botón Cargar Imagen, luego ubicamos la imagen con el nombre t5.jpg y picamos en abrir. Una vez que hemos cargado la imagen picamos en reconocer para que la aplicación consulte a través de la red neuronal cual es la clase más próxima en la que puede ser ubicada la nueva instancia. PRUEBAS DEL SISTEMA Cont.
33. REFERENCIAS: [1] Fundamentos básicos de Matlab ,http://mit.ocw.universia.net/13.00/NR/rdonlyres/27BBA896-7C03-4CCB-8810-B02382E5B5D0/0/matlab_handout.pdf [2] Detección y reconocimiento de señales de tránsito utilizando matching de chamfer, http://www.scielo.cl/pdf/ingeniare/v15n2/art08.pdf [3] Sistema de reconocimiento de señales de transito por Siemens, http://www.mitriplew.com/index.php/2006/10/19/sistema_de_reconocimiento_de_senales_de_ [4] The mathworks, accelerathing the pace of engineering and science, http://www.mathworks.com/products/product_listing/ [5] Howard Demuth, Mark Beale, Martin Hagan, Neural Network Toolbox™ 6 - User’s Guide, The MhatWorks, http://www.mathworks.com/access/helpdesk/help/pdf_doc/nnet/nnet.pdf [6] Poncos, Matlab: toolbox de redes neuronales, Introduccion, editado el 14 Abril 2008, http://poncos.wordpress.com/2008/04/14/matlab-toolbox-de-redes-neuronales/ [7] Poncos, Matlab: toolbox de redes neuronales, Introduccion, editado el 14 Abril 2008, http://poncos.wordpress.com/2008/04/14/matlab-toolbox-de-redes-neuronales/ [8]Poncos, Matlab: ejemplo backpropagation, editado el 15 Enero del 2009, http://poncos.wordpress.com/2009/01/15/matlab-ejemplo-backpropagation/ [9] Drob, Redes neuronales, Reconocimiento de patrones, editado el 06/28/2008 http://www.scribd.com/doc/3684177/Redes-Neuronales [10] Daniel Saucedo Aranda, Departamento de Ciencias de la Computación e Inteligencia Artificial, Escuela Técnica Superior de Ingeniería Informática, http://decsai.ugr.es/~castro/MCII/Transparencias/RN3.pdf [11] Maria Isabel Acosta, Halord Salazar, Camilo Zuluaga, Tutorial de redes neuronales, DESCRIPCIÓN DE LAS FUNCIONES UTILIZADAS EN MATLAB, universidad tecnológica de Pereira, facultad de ingeniería eléctrica,http://ohm.utp.edu.co/neuronales/Anexos/AnexoA.htm [12] DTREG, Software For Predictive Modeling and Forecasting - Multilayer Perceptron Neural Networks, http://www.dtreg.com/mlfn.htm [13] Julian Simon, a professor in the University of Maryland's Business School, Classification - Neural Networks Prediction, http://www.resample.com/xlminer/help/NNC/NNClass_intro.htm [14] José Talavera Herrera, Omar Vivas-Arapa, Ernesto Cuadros-Vargas, Optimización de Motores de Inferencia Conexionistas Mediante Algoritmos de Poda y Lógica Difusa, http://www.usp.edu.pe/~ecuadros/papers/Paper263CLEI2002.pdf