Centro de Investigación en Computación, CIC-IPN

Anuncio
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
Descargar