Centro de Investigación en Computación, CIC-IPN Visión por computadora usando redes neuronales celulares Clave del Proyecto: 20062090 Marco A. Moreno-Armendariz Enero 2006 - Diciembre 2006 1 Contenido 1. Introducción 2. Redes Neuronales Celulares (a) Modelo discreto (b) Convolución discreta (c) Clonning templates 3. FPGA (a) Historia (b) Elementos básicos del FPGA (c) Elección del FPGA 4. Visión por Computadora (a) Montaje del sistema (b) Diseño de la CNN (c) CNN en matlab (d) CNN en VHDL (e) Resultados de desempeño 1. Introducción En este tutorial se presenta la implementación de un sistema de visión por computadora cuyas principales caracteristicas son: • El sistema completo se tendrá en un solo chip, llamado FPGA. • Para capturar las iamgenes se usará una camara digital portable. • Para el procesamiento de las imagenes se usará una estructura conocida como redes neuronales celulares. • Al unir estos elementos, se obtiene una plataforma de visión por computadora portable, capaz de trabajar en tiempo real y capaz de resolver gran cantidad de aplicaciones. 2 2. Redes CNN • Las redes neuronales celulares (CNNs) [1, 2, 3] son arreglos de neuronas (celdas) con conexiones invariantes y cuya transición es local, es decir depende solo del valor que tenga sus celdas vecinas. Esta caracteristica particular de las CNNs permite que se pueda llevar acabo implementaciones a larga escala en un solo chip tipo VLSI [4, 5] • Las celdas tipicamente estan organizadas en una malla de dos dimensiones, por lo que las CNNs pueden ser usadas para realizar procesamiento de imagenes en forma masiva y paralela asociando cada pixel de la imagen a una celda de la CNN. • Aún mas, al realizar una acción secuencial de este tipo de red con diferentes valores en sus parámetros, le permite realizar operaciones arbitrariamente complejas a la imagen de entrada. • Aunque existe una gran variedad de aplicaciones para las redes neuronales celulares, el objetivo de este trabajo es realizar la implementación en un hardware especializado (llamado FPGA) para ser usado como un sistema de visión por computadora para robots manipuladores o moviles [6, 7, 8]. 3 2.1. Modelo discreto Una red CNN en tiempo discreto es descrita por el siguiente sistema de ecuaciones: xij (n + 1) = P kl∈N (ij) Ak−i,l−j yij (n) + yij (n) = −1 1 P kl∈N (ij) xij (n) > 0 xij (n) ≤ 0 Bk−i,l−j uij (n) + I (1) donde: xij (n) es el estado de la celda (neurona) en la posición ij, que corresponde a la misma posición del pixel de la imagen. uij (n) es la entrada a la misma celda, representado el valor de luminosidad del correspondiente pixel en la imagen, comunmente normalizado. A es la matriz que representa la iteración entre las celdas, la cual es local (soló con las celdas vecinas) e invariante en el tiempo. B es la matriz que representa las conexiones que van desde los vecinos de la celda y la entrada A. I es el bias. N (i, j) es el conjunto de indices correspondiente a la celda ij y su correspondiente vecindad. (e.g. la celda ij y sus ocho vecinos). 2.2. Convolución discreta • La forma mas cercana para emular una CNN serı́a implementando un sistema completamente paralelo basado en neuronas individuales. Este tipo de procedimiento es posible aplicarlo en redes muy pequeñas (es decir, con pocas neuronas). 4 • Por ejemplo, para procesar una imagen de 128x96 pixeles se requiere una CNN compuesta por 12,288 celdas, una neurona por cada pixel. Esto demandaria una cantidad de area que no esta disponible ni si quiera en un dispositivo con el FPGA. • Sin embargo, La operación que lleva acabo la evolución de una CNN tiene intrisicamente una estructura convolucional que se ajusta bien con el hardware paralelo (es capaz de realizar operaciones concurrentes) de un FPGA. • La implementación de esta operación será llevada acabo aplicando el cloning template de forma local a pequeños bloques de la imagen, hasta terminar con la imagen completa. 3. FPGA 3.1. Historia • El FPGA (Field Programmable Gate Array) es un circuito cuya tecnologı́a se encuentra en los PALs y los arreglos dedicados de compuertas. • Los PALs fueron desarrollados en los 70t’s, usados para remplazar a los circuitos TTL para el diseño de sistemas dinámicos. Estos pueden ser programados una sola vez. • Por otra parte, los arreglos dedicados de compuertas fueron diseñados para producción a gran escala. • Un FPGA esta basado en estas tecnológias, pero las interconexiones (elementos lógicos) pueden ser definidas por el usuario y son reprogramables. 3.2. Dispositivos lógicos programables • Los dispositivos lógicos programables (PLD) surgen en 1975 con la creación de los Arreglos Lógicos Programables en Campo (FPGA), pero la historia de la lógica programable comienza algunos años atrás. 5 • Estos dispositivos tienen la capacidad de implementar una gran cantidad de funciones lógicas, combinacionales o secuenciales. • Los componentes lógicos programables se pueden separar en dos categorı́as con base en su estructura interna: 1. Dispositivos Lógicos programables: Tienen pocas compuertas, ruteo interno fijo y propagación de retrasos determinista. 2. Arreglos de Compuertas Programables en Campo: Tienen una gran cantidad de compuertas, cuentan con interconexiones seleccionables por el usuario (ruteo). La diferencia más importante entre estas categorı́as, radica en las estrategias de ruteo[12]. 3.3. Elementos básicos del FPGA Los arreglos de compuertas programables en campo (FPGA) son PLDs de alto nivel de integración se crearon con el objeto de integrar mayor cantidad de dispositivos en un circuito (sistema en un chip SOC). Estos dispositivos se basan en lo que se conoce como arreglos de compuertas, los cuales consisten en la parte de la arquitectura que contiene tres elementos configurables [11]: 1. Bloques lógicos configurables (CLB). 2. Bloques de entrada y de salida (IOB). 3. Canales de comunicación. 6 3.3.1. Los bloques lógicos: 1. Están configurados para procesar cualquier aplicación lógica. 2. Estos bloques tienen la caracterı́stica de ser funcionalmente completos; es decir, permiten la implementación de cualquier función booleana representada en la forma de suma de productos. 3. El diseño lógico se implementa mediante bloques conocidos como generadores de funciones o LUT (Look Up Table: tabla de busqueda). 4. Las LUT permiten alamacenar la lógica requerida, ya que cuentan con una pequeña memoria interna -por lo general de 16 bits- [11]. 4. Visión por computadora 4.1. Montaje del sistema Se diseño una tarjeta de comunicación entre la FPGA que trabaja a 3.3 volts. conectada a la camara digital, modelo M3188A de Quasar que funciona a 5 volts. Mostrar animacion del montado. 7 4.2. Diseño de la CNN Para implementar la red discreta CNN (1) en el FPGA, se tiene el siguiente diagrama general: Las memorias RAM se usan para almacenar la imagen a ser procesada. La librerı́a de cloning templates se guarda en una memoria 8 ROM. 5. CNN en matlab Parte del código escrito en matlab para implementar la CNN es: % Se repite hasta el número de iteraciones % La imagen de entrada u, se convierte en y, donde -1=blanco; 1=negro; % Se agrega el contorno a la imagen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Aqui se lleva acabo la opereción de la CNN % Si es la primera iteracion se calcula el termino u_prim, para las % demas iteraciones su valor se mantiene constante if (ban_cnn == 1), if sum(sum(B)) ~= 0, u_prim = conv2(ImgY,B,’same’)+ I; else u_prim = I; end %u_Test_prim = Img_Conv(ImgY,B) + I; ban_cnn = 0; end % Este es el calculo de la CNN : x(k+1) = A*y(k) + u’ Img_X1 = conv2(ImgY,A,’same’) + u_prim; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Algunas observaciones de la realización del programa son: 1. Se implementa la CNN en matlab, para establecer una comparación con la versión en lenguaje VHDL. 2. Se usa la instrucción conv2 de MATLAB, la cual convoluciona la imagen con el cloning template seleccionado. 3. El tiempo de procesamiento se mide mediante las instrucciones tic y toc. 9 4. Para tener una comparación válida, únicamente tomamos el tiempo real del procesamiento, es decir, sin considerar el tiempo requerido para la lectura del archivo y el despliegue de la imagen. 6. CNN en VHDL Para explotar las ventajas del FPGA se usan los multiplicadores que ya tiene incluido para realizar la convolución y obtener el siguiente estado de la CNN discreta. 6.0.1. Entidad de la CNN ENTITY CNN IS PORT( CLK nReset : : IN STD_LOGIC; IN STD_LOGIC; CNN_TIME_iter : OUT std_logic; 10 -- Tiempo de una iteracion Template MaxIter Start : : : IN STD_LOGIC_Vector (7 DOWNTO 0); IN STD_LOGIC_VECTOR (7 DOWNTO 0); IN STD_LOGIC; -- Ejemplo de las conexiones con las 3 memorias DataInR1 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); AddressR1 : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); WrEnR1 : OUT STD_LOGIC; DataOutR1 : IN STD_LOGIC_VECTOR (7 DOWNTO 0); -- Resultados NumOfMem : OUT STD_LOGIC; EndOfCNN : OUT STD_LOGIC; -- Indica si hay decimales en la division Dividir : IN STD_LOGIC ); END ENTITY; 6.0.2. Entidad de la convolucion discreta entity conv is port ( clk : in std_logic; Los 25 registros para de la imagen - valores x x11,x12,x13,x14,x15 x21,x22,x23,x24,x25 x31,x32,x33,x34,x35 x41,x42,x43,x44,x45 x51,x52,x53,x54,x55 : : : : : in in in in in std_logic_vector std_logic_vector std_logic_vector std_logic_vector std_logic_vector (7 (7 (7 (7 (7 downto downto downto downto downto 0); 0); 0); 0); 0); Los 25 registros para de la entrada - valores u u11,u12,u13,u14,u15 u21,u22,u23,u24,u25 u31,u32,u33,u34,u35 u41,u42,u43,u44,u45 u51,u52,u53,u54,u55 : : : : : in in in in in std_logic_vector std_logic_vector std_logic_vector std_logic_vector std_logic_vector 11 (7 (7 (7 (7 (7 downto downto downto downto downto 0); 0); 0); 0); 0); A11,A12,A13,A14,A15 A21,A22,A23,A24,A25 A31,A32,A33,A34,A35 A41,A42,A43,A44,A45 A51,A52,A53,A54,A55 : : : : : in in in in in std_logic_vector std_logic_vector std_logic_vector std_logic_vector std_logic_vector (7 (7 (7 (7 (7 downto downto downto downto downto 0); 0); 0); 0); 0); B11,B12,B13,B14,B15 B21,B22,B23,B24,B25 B31,B32,B33,B34,B35 B41,B42,B43,B44,B45 B51,B52,B53,B54,B55 : : : : : in in in in in std_logic_vector std_logic_vector std_logic_vector std_logic_vector std_logic_vector (7 (7 (7 (7 (7 downto downto downto downto downto 0); 0); 0); 0); 0); I : in std_logic_vector (7 downto 0); conv_resultado : out std_logic_vector (7 downto 0); Dividir : in std_logic ); end entity; 6.1. Resultados de desempeño El bloque de pre-procesamiento de la imagen, prepara a la imagen para ser convolucionada con el cloning template. Para ello, extrae un bloque de 5x5 pixeles del pixel a ser procesado y sus vecinos. Este tiempo será tLoad y se calcula como: tLoad = (2 ∗ Columnas + 3) ∗ tClk (2) El tiempo total tIter que se requiere para calcular una iteración completa de la CNN es: tIter = tLoad + P ixeles ∗ tConv , tIter = tLoad + P ixeles ∗ N cycConv ∗ tClk , tIter = [(N cycConv ∗ F ilas + 2) ∗ Columnas + 3] ∗ tClk , donde: • tConv es el tiempo usado para realizar la convolución de un pixel. 12 (3) • N cycConv es el número de ciclos de reloj necesarios para terminar la convolución de ma imagen completa. • Columnas/Renglones/P ixeles son el número total de columnas /renglones/ pixeles de la imagen, respectivamente. En la siguiente gráfica se muestra el comportamiento del tiempo tIter con respecto al número de columnas y renglones de la imagen. Valores estan expresados µs. Tamaño de la imagen Valor Teórico Valor 32 x 32 32.02 32 x 96 96.03 64 x 64 127.04 64 x 96 190.55 128 x 96 379.59 Experimental 33.25 96.26 129.27 192 384.57 Para medición experimental se programo una señal de salida del FPGA que cambia al inicio y fin del proceso. Esto permite la medición mediante un osciloscopio con detector de flancos. 6.1.1. Gráficas de desempeño Se presentan las gráficas de desempeño (tiempo tIter ) de la CNN en VHDL y luego comparada con la implementación en matlab. 13 7. Publicaciones del proyecto 1. Stable Training cellular neural networks for computer vision, Marco A. Moreno-Armendariz, Wen Yu, Juan Humberto Sossa-Azuela, Congreso Nacional de Control Automático 2006, 206-210,México, DF. 2. Implementación de una Red Neuronal Celular en un FPGA para Visión por computadora (Tutorial), Marco A. Moreno-Armendariz, Mauricio Martı́nez, Fifth Mexican Internacional Conference on Artificial Intelligence, Instituto Tecnológico de Apizaco, Tlaxcala. 3. Training Cellular Neural Networks with Stable Learning Algorithm, M. A. Moreno-Armendariz, G. E. Pazienza, W. Yu, International Symposium on Neural Networks, Lecture Notes in Computer Science (0302-9743), LNCS 3971, pp. 558-563. 4. System identification using hierarchical fuzzy CMAC neural networks, Floriberto Ortiz Rodriguez, Wen Yu, Marco A. Moreno-Armendariz, International Conference on Intelligent Computing, Lecture Notes in Computer Science (0302-9743), LNAI 4114, pp. 230-235. 14 Bibliografı́a [1] Chua, L.O., Yang, L.: Cellular Neural Networks Theory. IEEE Trans. Circuits and Systems, 35 (10) (1988) 1257–1272. [2] Chua, L.O., Roska, T.: The CNN Paradigm. IEEE Trans. Circuits and Systems—I, Fundamental Theory and Appl., 40 (3) (1993) 147–156. [3] Harrer, H., Nossek, J.A. (1992) Discrete-time Cellular Neural Networks. Int. J. of Circ. Th. Appl.20 453-467. [4] Liñan, L., Espejo, S., Domı́nguez-Castro, R., Rodrı́guez-Vázquez, A. (2002) ACE4K: An Analog I/O 64x64 Visual MicroProcessor Chip with 7-bit Analog Accuracy. Int. J. of Circ. Th. Appl., 30 89-116. [5] Kananen, A., Paasio, A., Laiho, M., Halonen, K. (2002) CNN Applications from the Hardware Point of View: Video Sequence Segmentation. Int. J. of Circ. Th. Appl., 30 117-137. [6] Vilası́s-Cardona, X., Luengo, S., Solsona, J., Apicella, G., Maraschini, A., Balsi, M. (2002) Guiding a mobile robot with Cellular Neural Networks, Int. J. of Circ. Th. Appl. 30 611-624. 15 [7] Balsi, M., Vilası́s-Cardona, X. (2002) Robot Vision using Cellular Neural Networks mobile robot vision. Zhou, C., Maravall, D., Ruan, D. Eds. Autonomous Robotic Systems, Physica-Verlag. [8] Balsi, M., Bellachioma, D., Graziani, S., Vilası́s-Cardona, X.(2003) Robot Vision by CNNs emulated in FPGAs, Proc. of European Conference on Circuit Theory and Design Cracow, Poland. [9] T. Roska, T. KéK, L. Nemes, A. Zarándy, and P. Szolgay. (1999) CSL-CNN software library, version 7.3. [Online]. Available: http://lab.analogic.sztaki.hu/Candy/csl.html [10] X.Vilası́s-Cardona, S.Luengo, J.Solsona, A.Maraschini, G.Apicella, and M.Balsi, Guiding a mobile robot with cellular neural networks, International Journal of Circuit Theory and Applications, vol. 30, pp. 611Ű624, 2002. [11] Van den Bout Dave,The practical Xilinx Designer Lab Book, Prentice Hall, 1998. [12] Seals R.C., Programmable Logic, PLDs and FPGAs, pp. 1-2, McGraw Hill, USA, 1997. [13] (2006) Pasqual8: a CNN guided autonomous robot. [Online]. Available: http://salle.url.edu/ Ÿ de16393/cnn/pasqual8.html 16