01 octubre 2009

Últimos avances para diseñar aplicaciones de visión artificial en máquinas

Desde que los procesadores multi-núcleo han hecho su aparición en los mercados, los vendedores de software de visión de máquinas están rediseñando sus productos, y permitiendo que sus clientes se aprovechen de la potencia de los multi-procesadores. Sin embargo, esta tarea no es trivial ya que el programador debe optimizar la energía de las funciones de imagen-procesado a través de múltiples procesadores. Si bien el máximo incremento de rendimiento esperado del multi-procesador puede predecirse en cierta extensión por la ley de Amdahl, el incremento de rendimiento se limitará por cualquier parte secuencial del programa que no pueda ser optimizada para funcionar en paralelo.
Muchas funciones de procesado de imágenes tales como el procesado por puntos u operaciones como la convolución se prestan a sí mismas a la optimización. Sin embargo, otras técnicas – tales como el procesado de imágenes adaptativo – que requiere algún tipo de proceso de toma de decisión y depende profundamente de las condiciones de diversificación no es fácilmente optimizado. Típicamente, hay dos formas de impulsar el rendimiento de las aplicaciones de visión de las máquinas a nivel de sistema, y estas se denominan paralelización a nivel de tarea, paralelización a nivel de datos. La paralelización a nivel de tareas es conveniente para programas con funcionalidad independiente que tienen mínimas dependencias de datos o recursos compartidos –tales como los sistemas multicamara –pero la paralelización a nivel de datos es más conveniente para código que repite varias etapas secuenciales con dependencias de datos entre etapas. Debido a que las aplicaciones de procesado de imágenes tienden a ser serializadas (adquirir, filtrar, extraer, clasificar, generar señales de salida), la paralelización es una estrategia popular para incrementar el rendimiento de los procesadores multi núcleo.
Si bien el código fuente de los multiprocesadores es propiedad del vendedor del software, los programas están divididos en hebras que permiten a los desarrolladores programar aplicaciones que contienen una función para realizar un filtro kernel 3 x 3. Este programa de aplicación permite dividirse en copias dependiendo del número de núcleos de procesador disponibles.
En muchos paquetes de software, el número de núcleos puede ser establecido por el integrador del sistema o dejarse como una función del sistema operativo. Los beneficios de partir el filtro son por ejemplo incrementar en más de dos veces la velocidad cuando los algoritmos se dividen entre los múltiples núcleos.
En paralelización a nivel de tarea, las imágenes se procesan en paralelo sobre una base "toma" a "toma", dividiendo los datos de la imagen uniformemente entre los núcleos disponibles. Haciendo esto, el programador deberá tener en cuenta la unión posterior entre estas regiones y el hecho de que su apropiado tratamiento variará con el equipo de algoritmo.
Funciones tales como las operaciones lógicas o imágenes summing utilizadas para eliminar el ruido de las imágenes usan pixels de una o más imágenes de entrada para calcular el valor de pixel de una imagen de salida. Tales funciones no requieren ningún tratamiento especial y pueden ser optimizadas fácilmente en un método de paralelización a nivel de datos, escalando perfectamente la linealidad con el número de núcleos que trabajan en la imagen. Pero si la imagen tiene un tamaño significativo y excede el cache, estas funciones pueden aún saturar el ancho de banda I/O de memoria con sólo unos pocos núcleos. En estos casos la escalabilidad no es a menudo lineal y el ancho de banda se satura con sólo unos pocos núcleos (1 – 2). Las funciones añadir y copiar son buenos ejemplos de esto. Los algoritmos de convolución no sufren de este problema I/O ya que muchas operaciones se realizan en cada pixel de la fuente antes de obtener el resultado.
Funciones tales como filtros morfológicos, filtros de convolución lineal y umbral dinámico operan moviendo una ventana a través de la imagen de entrada. Cuando se usan técnicas multi-hebras, el programador debe ser consciente de cualquier efecto frontera que pueda ocurrir. Realizando una simple convolución 3 x 3 en una CPU simple, por ejemplo, el programa de aplicación puede necesitar tener en cuenta cualquier artefacto de imagen que se genere en la periferia de la imagen. En el caso más simple, el artefacto puede eliminarse el relleno de los pixels de la imagen en la periferia con el valor promedio de sus vecinos más próximos.
Los algoritmos se relegarán para actuar en un procesador de cuatro núcleos, donde quizás la imagen se no divida en cuatro subsecciones. Entonces, habrá secciones de solapamiento entre las fronteras de pixels entre las sub-imágenes. La aplicación de filtrado original puede necesitar generar hebras para cada procesador y también hebras que deben tener cuidado con los artefactos generados en las condiciones de frontera de la imagen.
Como las operaciones de procesado por puntos, las transformaciones geométricas no sufren penalización sistemática de la paralelización. Cuando se transforma una imagen de entrada, el tamaño de la imagen resultante se calcula y luego la imagen original se transforma en una base por pixel en la imagen fuente usando una transformación inversa.
Se usa un algoritmo de interpolación para acomodar la coordinación fraccional generada después de la transformación inversa. No hay región en la imagen del objetico que se procese más a menudo que lo necesario y la escalabilidad es casi ideal.
Si bien estas operaciones se prestan a ser realizadas en los procesadores multinúcleo donde los datos pueden partirse y dividirse entre procesadores, otras operaciones importantes no pueden llevarse a cabo: Ejemplos prominentes son los análisis de componentes conectados, varias tecnologías de segmentación, algoritmos watershed, acoplamientos basados en correlación cruzada, bordes, o puntos de interés. Para estas aproximaciones deben aplicarse tecnologías más sofisticadas.

Bibliografía: Down to the core. Vision Systems Design. May 2009

Palabras clave: Adaptive image processing, task-level parallelization, data-level parallelization

Publicar un comentario en la entrada