Convolucionador SIMD acoplado a HALCON

Página creada Sergio Torres
 
SEGUIR LEYENDO
Convolucionador SIMD acoplado a HALCON

       Liz N. Castillo Jiménez, Gerardo Sosa Ramírez y René A. Cumplido Parra.

    Coordinación de Ciencias Computacionales – INAOE, Luis Enrique Erro No. 1,
                        Tonantzintla, Puebla, 72840. México
       nicandi@ccc.inaoep.mx, sosa@ccc.inaoep.mx, rcumplido@inaoep.mx.

      Resumen. La operación de convolución es muy utilizada en el procesamiento de
      imágenes, consiste en operaciones que a pesar de no ser muy complejas, son muy
      repetitivas. Para agilizar la ejecución de dichas tareas, se hace uso del cómputo
      paralelo, el cual consiste en utilizar múltiples procesadores. Una alternativa para
      la implantación de una arquitectura paralela, es hacer uso de los FPGA’s. En el
      presente trabajo, se añade un operador de convolución a la herramienta
      HALCON, utilizando la tarjeta RC1000 de Celoxica, la cual cuenta con un FPGA
      Xilinx Virtex XCV2000EBG560-6C. De acuerdo a los resultados obtenidos
      postsíntesis, a una frecuencia de operación de 20Mhz, el tiempo que emplearía la
      arquitectura para efectuar la convolución de una imagen de 640x480 píxeles, es
      de 53 imágenes por segundo.

      Palabras Clave : Procesamiento de imágenes, Convolución, FPGA,
      Arquitectura SIMD.

1 Introducción

El procesamiento de imágenes involucra operaciones que aunque no sean muy
complejas, generalmente son muy repetitivas, las cuales llegan a consumir gran parte
de los recursos de una computadora convencional. Para agilizar la ejecución de dichas
tareas, se puede hacer uso del cómputo paralelo, el cual se basa en utilizar múltiples
procesadores para llevar a cabo tales operaciones.

  Existen computadoras que se basan en arquitecturas paralelas, pero tanto sus costos
como disponibilidad, pueden resultar inalcanzables, además de no aprovechar todo su
potencial en tareas tan específicas, de modo, que una alternativa para la implantación
de una arquitectura paralela es hacer uso de los FPGA’s, los cuales permiten diseñar
múltiples elementos procesadores a un bajo costo y de una forma más rápida.

  Por otro lado, existen herramientas de software especializadas para el procesamiento
de imágenes, que permiten construir sistemas de alto desempeño y gran flexibilidad.
Entre estas, se encuentra MVTec HALCON, la cual cuenta con alrededor de 1000
operadores, que pueden ser combinados para resolver problemas relacionados con
visión computacional.
El operador de convolución es muy utilizado como una operación básica en el
procesamiento de imágenes. En el presente trabajo se añade un operador de
convolución a la herramienta HALCON, haciendo uso de la tarjeta RC1000 de
Celoxica, la cual cuenta con un FPGA Xilinx Virtex XCV2000EBG560-6C.

2 Trabajo relacionado

En el procesamiento de imágenes, la operación de convolución se utiliza en tareas de
filtrado, tal como suavizamiento y detección de contornos. Debido a que la operación
de convolución consiste en sumas y multiplicaciones, el uso de un FPGA para
paralelizar estas operaciones, permite una reducción significativa en el tiempo de
procesamiento.

  En [1], se muestra el desarrollo de una arquitectura validada en una FPGA , que
realiza la convolución de al menos 30 imágenes por segundo, utilizando un FPGA
Xilinx Virtex VCX800FG680.

  En [2], se muestra la implantación del algoritmo SUSAN en un FPGA para la
detección de contornos, el cual logra un procesamiento de hasta 120 imágenes por
segundo, basado en elementos de procesamiento muy simples. Se utiliza un FPGA
Xilinx XC4062XL.

  Tanto en [1] cómo en [2] se utiliza VHDL para la implantación de ambas
arquitecturas.

3 Metodología

La metodología para el desarrollo del convolucionador, inició recopilando información
sobre las arquitecturas SIMD (Single instruction stream, multiple data stream), para
definir una arquitectura que llevará a cabo las operaciones necesarias para la
convolución.

   Al mismo tiempo, se buscó información para añadir nuevos operadores a HALCON
y los requerimientos para que este se comunicara con la tarjeta RC1000.

  Posteriormente, se diseñó y programó la mayor parte de la funcionalidad de la
arquitectura SIMD en Handel C, delimitando los tamaños para las máscaras de
convolución a 3x3, 5x5, 7x7, 9x9 y 11x11.

  Para verificar que los resultados del convolucionador en la tarjeta RC1000 fueran
correctos, se utilizó el operador de convolución de HALCON convol_image.
Finalmente, se realizó la síntesis y validación en el FPGA evaluando su
funcionamiento con los resultados obtenidos por HALCON.

3.1 Arquitectura SIMD

La arquitectura propuesta consiste en un arreglo bidimensional de Elementos
Procesadores (PE, por sus siglas en inglés), debido a que la lectura de la imagen se
efectúa por columnas, se trata de minimizar el número de accesos a memoria, entre más
elementos procesadores se definan en anchura, menor número de accesos a memoria se
tienen que efectuar, por otro lado, el número de elementos procesadores en profundidad
se definió de acuerdo al mínimo tamaño de la máscara (3x3), ya que, por el diseño
efectuado, si se tuvieran más de tres elementos procesadores en profundidad, pero una
máscara de 3x3, únicamente tres de estos procesadores estarían efectuando el cálculo
de un valor. En la figura 1 se muestra gráficamente dicho arreglo bidimensional.

                         PE20                  PE21                          PE2m

                     PE10                  PE11                          PE1m

                 PE00 MemPE20          PE01 MemPE 21                  PE0m MemPE 2m

                  MemPE10               MemPE11                       MemPE1m

               MemPE00               MemPE01                       MemPE0m

                                                                                ad
                                                                            ndid
                                                                         ofu
                                    Anchura                            Pr

                Fig. 1. Arreglo bidimensional de los elementos procesadores.

  En la figura 2 se presenta el diagrama a bloques de los elementos que conforman la
arquitectura. El funcionamiento de tales bloques se describe a continuación:

  Driver. Unidad que establecerá la comunicación con la tarjeta FPGA, encargándose
de la transmisión y recepción de las imágenes.

  Interfaz. Unidad en el FPGA que se encargará de capturar la información
proporcionada por el driver y su transmisión hacia la arquitectura SIMD. También se
encargará de la transmisión hacia el driver y de los resultados arrojados por la
Arquitectura.

  PE. Encargado de efectuar el proceso de convolución para cada una de las máscaras
que se hacen pasar por la imagen.

   MemPE. Memoria del elemento de procesamiento, la cual está limitada únicamente
a registros de almacenamiento locales a cada PE.
Unidad de Control. Unidad encargada de enviar tanto los datos como las diferentes
palabras de control a cada elemento procesador; dentro de sus módulos principales se
encuentra: la generación de direcciones y el control de datos.

       PC                                                  TARJETA FPGA
                                                                   ARQUIT.             RAM
              Driver       BUS PCI        INTERFAZ
                                                                     SIMD

  HALCON

                                                                                       RAM
  Operador

                                                                                                                                                                    WMask[3:0]
                                                                                               WMask
                                                                                                 Inic                                                            WE

                                                                                                             0        1                                                 It[3:0]

                                                                                                 RST                  0

                                                                                                                                0    0
                                                                                               Enable                                                0
                                                                                                                     1
                       PE 20                               PE21                        PE 2m                                         1
                                                                                                                     It                     0        1
                 PE10                                PE 11                         PE1 m
                                                                                                                                    WMask
             PE00 MemPE 2 0                       PE 01 MemPE21                PE0m MemPE2m                                            It
                                                                                                                      D C0
             MemPE1 0                             MemPE11                       MemPE1m                                                                    0        1
                                                                                                                      M0,I t
                                                                                                                                                 VCalc              0             VPix
        MemPE00                              MemPE01                         MemPE0m                                  D C1
                                                                                                                                                               Factor
                                                                                                        DC 0[7:0]     M1,It
                                                                                                        DC1 [7:0]     DC2
                                                                                               DCol                                                  Dato
                                                                                                        DC10 [7:0]    M2,I t
                        BUS DE DATOS
                                                                                                                                                     Dir       VCalc
                                                                                                                                                It
                                                                                                                     DC1 0

                                                                             BUS DE CONTROL
                                                                                                 CLK
                                                                                                                     M1 0 ,It                                           PE
                   Datos Img
  BANCOS
    BANCO 0
    DE                               Control de            Generación
                                                               de
  MEMORIA                              Datos               direcciones
                         Dir

                                                  Mem UC

                                        Unidad de Control

                       Fig. 2. Diagrama a bloques de los elementos funcionales de la arquitectura,
                                     con un arreglo de 3x3 elementos procesadores.

3.2 Acoplamiento de un nuevo operador en HALCON

HALCON 6.1 es una herramienta de propósito general para aplicaciones de visión
artificial. HALCON es un sistema sofisticado para el análisis de imágenes adecuado
para el desarrollo, investigación y educación; cuenta con una librería de alrededor de
1000 operadores.

  HALCON contiene un ambiente de desarrollo llamado HDevelop, el cual es una
herramienta interactiva para crear programas de análisis de imágenes; cuenta con un
editor, interprete con funciones depurables y una unidad de administración de variables
gráficas (imágenes).

  Para añadir un nuevo operador, es necesario seguir los pasos de los capítulos 4, 5 y 6
de [6]. En estos capítulos se detallan las funciones para obtener el contenido de los
parámetros de entrada, cómo colocar datos en los parámetros de salida, la forma en que
se accede a los píxeles, la definición de clases de los objetos definidos, etc.
4 Resultados

A continuación se presenta un resumen de los resultados obtenidos después de la
síntesis en Handel C:

            Number of Slices:               14,677 out of 19,200   76%
            Total Number 4 input LUTs:      25,278 out of 38,400   65%
            Number of bonded IOBs:             205 out of    404   50%

            The Average Connection Delay for this design is:           3.038 ns
            The Maximum Pin Delay is:                                 19.571 ns
            The Average Connection Delay on the 10 Worst Nets is:     17.194 ns

  Se calculó que la arquitectura emplea en promedio, para obtener el valor de un píxel
4 ciclos de reloj, por lo que si se tiene una frecuencia de operación de 20Mhz (aunque
se probó con frecuencias más altas), el tiempo que emplearía la arquitectura para
efectuar la convolución de una imagen de 640x480 píxeles, es de 53 imágenes por
segundo.

  Para probar el operador, se utilizaron diversas secuencias, dos de ellas son: bvlab_hp,
de 255 cuadros de 250 x 292 píxeles y autobahn, de 28 cuadros de 512 x 512 píxeles.
En la figura 3a y 3b se muestra un cuadro de las secuencias de prueba anteriormente
mencionadas.

  Fig. 3a. Cuadro de la secuencia bvlab_hp.         Fig. 3b. Cuadro de la secuencia autobahn.

  Se hicieron pruebas con los filtros de sobel y promedio, obteniendo resultados
satisfactorios, tal como se muestra en las figuras 4a y 4b, las cuales muestran los
resultados obtenidos después de aplicar el filtro sobel a las secuencias anteriores.

  Fig. 4a. Resultado para filtro sobel en 3a.       Fig. 4b. Resultado para filtro sobel en 3b.
5 Conclusiones y comentarios

La arquitectura propuesta es muy flexible al incremento o disminución de elementos
procesadores, ya que el elemento procesador está definido en Handel C como una
matriz de funciones, y sólo basta efectuar más instancias de estas para tener una
arquitectura más robusta. Por lo tanto, sólo bastó con tener bien validado el
funcionamiento de un único elemento procesador, y el esfuerzo posterior se enfocó en
la definición de la unidad de control.

   Cabe mencionar que cuando se ocupa gran cantidad de los recursos del FPGA, el
tiempo de compilación en Handel C puede aumentar considerablemente, por lo que se
recomienda tener este tiempo presente en la planificación de un proyecto.

  Antes de acoplar el operador a HALCON, se desarrollaron programas adicionales,
para probar y validar el funcionamiento de la arquitectura, estos ayudaron de una
manera significativa a observar el contenido de los bancos de memoria y corroborar
que los resultados esperados eran correctos.

   Con respecto al operador acoplado a HALCON, se logró una comunicación exitosa
con el FPGA, utilizando el bus PCI para la transferencia de la imagen origen y la
convolucionada, con una arquitectura de 9 elementos procesadores. Aunque no se
alcanzaron los resultados teóricos de procesamiento (53 imágenes x segundo de
640x480 píxeles), debido al modo en que HALCON administra la memoria y los
procesos que controla el bus PCI en una computadora, el diseño de la arquitectura en
hardware permite realizar operaciones de convolución sin necesidad de contar con un
software especializado, ni verse afectado por los procesos ajenos que efectúa una
computadora, de esta manera, la arquitectura proporcionará un buen desempeño para
trabajar con imágenes en tiempo real.

  Como trabajo futuro, se tiene previsto reducir el número de multiplicadores que
contiene cada elemento procesador, con lo que se reducirá significativamente el
espacio utilizado en el FPGA y poder incrementar así el número de PE’s.

Referencias

[1] J.C. Tejeda Yépez. Arquitectura FPGA para filtrado de imágenes en tiempo real. Tesis de
    maestría, INAOE, 2001.
[2] C. Torres-Huitzil, M. Arias-Estrada. Real-Time field programmable gate array architecture
    for computer vision. Journal of Electronic Imaging 10(1), 289-296 (January 2001).
[3] J. Jájá. An Introduction to Parallel Algorithms. Addison Wesley, 1992.
[4] R. Cypher. The SIMD model of parallel Computation. Springer Verlag, 1994.
[5] R.C. González, R.E. Woods. Digital image processing. Prentice Hall, 2002.
[6] HALCON Extension Package Interface. Programmer’s Manual. MVTec Software GmbH,
    2002.
[7] RC1000 Software Reference Manual. Version 1.3. Celoxica, 2001.
[8] RC1000 Functional Reference Manual. Version 1.3. Celoxica, 2001.
También puede leer