Вы находитесь на странице: 1из 11

23

Algoritmo de Viola-Jones para deteccin de rostros


en procesadores grficos

Tonathiuh Daz Miranda y Jos Luis Viloria Rodrguez
Dirigido por: Raisa Socorro Llanes y Osmany Ferrer Borges


Resumen. En este artculo se presenta la aplicacin de las
tecnologas para uso de Propsito General de la Unidad de
Procesamiento de Grficos (GPGPU, por sus siglas en ingls)
para dar respuesta a la demanda de procesamiento durante la
etapa de deteccin de rostros para el anlisis de video. Para este
fin en el trabajo se propone el uso de la GPU como una
alternativa de gran capacidad a un costo econmicamente bajo.
Como lenguajes de programacin se utilizaron Open Computing
Language (OpenCL) y Compute Unified Device Architecture
(CUDA). Se implement con CUDA C el algoritmo Deteccin de
Objetos Viola-Jones y se utiliz el marco de trabajo
OpenCloovision para OpenCL. Las pruebas realizadas arrojaron
que ejecutando el algoritmo paralelizado de deteccin de rostros
en el GPU se acelera el proceso de deteccin, en comparacin a
cuando esto se hace utilizando el algoritmo secuencial de
deteccin en el CPU.
Palabras clave: CUDA, Deteccin de rostros, GPGPU, OpenCL,
Viola-Jones.
I. INTRODUCCIN
El creciente uso de sistemas de video-vigilancia genera un
aumento del gasto en recursos materiales y humanos por parte
de la institucin donde se emplee. Esta situacin ha propiciado
la necesidad de optimizar el empleo de estos recursos
mediante el desarrollo de aplicaciones y herramientas
informticas, para posibilitar el anlisis inteligente de los
videos. Hoy en da la video-vigilancia inteligente tienes dos
modos de operar: el modo on-line y modo off-line. El anlisis
de video requiere la aplicacin de algoritmos de
reconocimiento de patrones como es el caso de la
identificacin y deteccin de rostros, deteccin de objetos
abandonados, identificacin de chapas, entre otros. Estos
algoritmos son excesivamente consumidores de tiempo por lo
que las respuestas del anlisis son tardas. En este artculo se
expondr cmo el uso de las tecnologas GPGPU son una
alternativa viable para acelerar el proceso de deteccin de
rostros.
II. MATERIALES Y MTODOS
Algunos de los elementos ms importantes en este trabajo
que se deben tener en cuenta son: el reconocimiento de
patrones, el procesamiento de imgenes y la programacin
paralela con las tecnologas de CUDA y OpenCL. En las
secciones siguientes se detallarn los aspectos necesarios para
comprensin de esta investigacin.
A. Algoritmo de Viola-Jones [1]
Los ingenieros Paul Viola de Mitsubishi Electric Research
Labs y Michael Jones de Compaq CRL durante el desarrollo
de un algoritmo de deteccin de rostros en una imagen con un
costo computacional muy bajo, publicaron el da 13 de julio de
2001 un framework que constaba de dos partes principales: un
algoritmo de deteccin de objetos que emplea la clasificacin
en cascada y un entrenador de clasificadores basado en
AdaBoost.
El algoritmo alcanza altas tasas de deteccin y, a diferencia
de otros algoritmos que utilizan informacin auxiliar, como:
el color del pixel o diferencias en la secuencia de video,
procesa solamente la informacin presente en una imagen en
escala de grises (formato YUV).
El algoritmo para la deteccin no utiliza directamente la
imagen sino una representacin de la misma llamada imagen
integral. La obtencin de esta representacin se logra con tan
solo unas pocas operaciones por pixel. Hecho esto, buscar
caractersticas en subregiones de la nueva imagen se
transforma en una tarea de tiempo constante, sin importar la
escala de la subregin ni posicin de la misma.
Para determinar si en una imagen se encuentra un rostro o
no, el algoritmo divide la imagen integral en subregiones de
tamao variable y utiliza una serie de clasificadores (etapas),
cada uno con un conjunto de caractersticas visuales. Este tipo
de clasificacin es denominada clasificacin en cascada.
En cada etapa se determina si la subregin es un rostro o no.
Si la subregin es aceptada como rostro entonces es evaluada
por la siguiente etapa (ms rigurosa) y si no es discriminada.
La clasificacin en cascada garantiza la discriminacin rpida
de subregiones que no sean un rostro. Esto significa un ahorro
considerable de tiempo, pues no se procesarn
innecesariamente subregiones de la imagen que con certeza no
contengan un rostro y solamente se invertir tiempo en
aquellas que posiblemente s contengan (ver Figura 1 ). Al
culminar solo llega la imagen que aprueba todas las etapas.
Este mtodo, segn [1], tiene una tasa de verdaderos-positivos
de 99,9%, mientras que tiene una tasa de falsos-positivos de
33,3%.


24


Figura 1. Proceso de deteccin de rostro en una imagen.
B. OpenCL
OpenCL (Open Computing Language) es un estndar de
cdigo abierto para fines generales de programacin en
paralelo a travs de las CPUs, GPUs y otros procesadores. Le
proporciona a los desarrolladores de software acceso eficiente
a todos los dispositivos compatibles con OpenCL de los que
disponga la computadora. El cdigo puede ser ejecutado tanto
en CPU como en GPU e incluso en ambos. Fue inicialmente
desarrollado por Apple. Inc y cedido bajo licencia al grupo
Khronos [2].
OpenCL es un lenguaje y un framework. En su desarrollo
han participado muchas empresas y es compatible con un gran
nmero de dispositivos, adems de ser totalmente compatible
con OpenGL entre otros (ver Figura 2).

Figura 2. Integracin de OpenCL con tecnologas orientadas al grfico por
computadora.
El lenguaje est basado en C++ pero con algunas variantes
en su filosofa, por ejemplo: no permite la recursividad,
arreglos de longitud variable en tiempo de ejecucin,
demonios, etc. Tambin incorpora caractersticas orientadas al
paralelismo como, grupos de trabajo, elementos de trabajo,
colas de ejecucin asincrnicas y sincronizacin entre
procesos.
C. CUDA
Compute Unified Device Architecture (CUDA) nombre que
hace referencia tanto a un lenguaje como a una arquitectura
creada por NVIDIA, que permite a los programadores usar las
tarjetas grficas de NVIDIA para propsitos generales.
CUDA C, como parte del conjunto de herramientas de
CUDA es un lenguaje al estilo de C++ pero totalmente
orientado al paralelismo. Este lenguaje se aprovecha de la
arquitectura CUDA del GPU para explotar al mximo los
recursos de la tarjeta grfica.
La filosofa de trabajo con CUDA C es muy similar a
OpenCL, incluso ambos lenguajes son muy parecidos desde
el punto de vista de la sintaxis. De manera similar a OpenCL,
CUDA es compatible con OpenGL y DirectCompute. (ver
Figura 3).

Figura 3. Integracin de CUDA con tecnologas orientadas al grfico por
computadora.
D. OpenClooVision
OpenCloovision es un framework de visin por
computadora basado en OpenCL y C#. Incorpora una interfaz
llamada Cloo como interfaz de OpenCL, la cual es una
librera de .NET desarrollada por el proyecto mono. El
framework soporta el conocido framework de Viola-Jones
para la deteccin de objetos. El mismo es de cdigo abierto y
libre de cualquier tipo de restriccin o cargo monetario, segn
indica la licencia que tiene del MIT. Fue desarrollado por una
comunidad de internet que tiene lugar en un espacio llamado
CodePLex. Este sitio alberga varias comunidades, fue creado
por Microsoft para el desarrollo del software libre.
Actualmente OpenCloovision se encuentra en pleno
desarrollo y en fase alpha. La versin v0.4.2 es la ms reciente
y contiene las siguientes caractersticas:
Tratamiento de imgenes de tipo byte y flotante.
Funciones para hacer box blur en GPU.
Funcin para escalado de grises en GPU.
Funciones para Histograma en GPU.

25

Funciones para hacer la Imagen Integral e imagen
integral al cuadrado en GPU.
Funciones para el SobelFilter.
Algoritmo Viola-Jones para la deteccin de
objetos en GPU.
E. El CPU vs GPU
Tradicionalmente los GPU estaban diseados como
unidades de procesamiento de grficos pero muchas
comunidades cientficas han demostrado el uso extensivo de
los GPU en otros campos de investigacin, como la
simulacin fsica, bioinformtica y la Minera de Datos.
Por qu usar un GPU para realizar los clculos generales?
El CPU est diseado con niveles de memoria cach (L1, L2
y L3) de gran tamao para reducir la latencia hacia la memoria
de acceso aleatorio (RAM) del sistema. La memoria cach
ocupa una gran porcin del diseo del CPU, espacio que
podra utilizarse para unidades de procesamiento adicionales
de la aritmtica. El GPU adopta un enfoque muy diferente,
casi la totalidad de su diseo est constituido por una
arquitectura de ejecucin multi-hilo (multi-procesador), con
ello logra hacer despreciable el valor de la latencia hacia la
memoria de video. Con un nmero suficiente de hilos
multiplexados en cada una de las unidades de procesamiento
del GPU, la latencia es realmente despreciable y el dispositivo
logra un gran rendimiento sin la necesidad de una memoria
cach.
La capacidad de procesamiento de un GPU es mucho mayor
que la de un CPU. Una computadora personal (PC), con un
CPU Intel Core i7 de una frecuencia de reloj de 2,67 GHz,
puede tericamente ejecutar alrededor de 8,039 GFlop/s
(millones de operaciones de punto flotante por segundo); sin
embargo un GPU NVIDIA GTX 260 ejecuta cerca de 521,40
GFlop/s. En cuanto al ancho de banda entre la memoria y el
procesador (GPU o CPU) se refiere, que en la GPU pueden
alcanzarse tasas de 113,7 GB/seg mientras que en el CPU solo
se alcanzan tasas de hasta 25,6 GB/s.
El balance de carga es una caracterstica fundamental que
hay que tener en cuenta. En aplicaciones comunes, la carga
(los clculos que realiza algn algoritmo) es dirigida
totalmente al CPU y se ignora por completo la existencia del
GPU. Esto tiene como consecuencia una utilizacin
permanente del CPU, pues el tiempo de procesador que el
administrador de procesos del Sistema Operativo (SO) le
asigna a una aplicacin, depende de la cantidad de operaciones
atmicas que la aplicacin requiera. En una aplicacin que
requiera de mucho procesamiento esto se traducira en una
ralentizacin general de todo el SO.
En aplicaciones que aprovechen el GPU es posible que
ciertos segmentos del cdigo de una aplicacin, donde el nivel
de procesamiento aritmtico sea muy grande, queden
totalmente a cargo del GPU; esto liberara al CPU de cargas
innecesarias, incrementara el rendimiento de la aplicacin y
permitira que el CPU se encargue de otras tareas.
Las desventajas del GPU consisten en que no se puede
implementar cualquier tipo de algoritmo en l y tampoco
puede ser visto como una plataforma de eleccin para la
implementacin de algoritmos debido a su obligatoria
implementacin en paralelo. Adems, el soporte de
herramientas de programacin para la GPU tales como:
depuradores de cdigo y lenguajes de programacin son muy
escasos a comparacin los que existen para la CPU.
La principal razn que justifica la gran popularidad de las
arquitecturas GPU en aplicaciones cientficas es el hecho de
que el GPU est especializada para cmputo intensivo,
computacin paralela elevada (exactamente sobre lo que trata
el renderizado de grficos) y por tanto se designan ms
unidades de lgica aritmtica (ALU) para el procesamiento de
datos, que para la recoleccin de datos y control de flujo (ver
Figura 4).

Figura 4. Estructura general del CPU y GPU.
III. IMPLEMENTACIN DE LAS PROPUESTAS
A. Deteccin de puntos de fuego
La deteccin de puntos de fuego se le aplica a los segmentos
del algoritmo o a las funciones que pueden ser paralelizadas y
que sean puntos de carga del algoritmo en cuestin.
Integral de la Imagen
El primer concepto introducido por Viola y Jones [3] fue la
integral de la imagen o las tablas de sumatoria de rea (SAT).
La integral de la imagen en el punto contiene la suma de
los pixeles por encima y hacia la izquierda (ver Error! No se
encuentra el origen de la referencia.).
La imagen integral de los rectngulos es una representacin
de la imagen que permite calcular la covariancia en una
ventana (regin de la imagen) muy rpidamente a partir de
cuatro referencias solamente. El clculo de la suma de la
integral del rectngulo de inters definido [4] se hace como lo
muestra la Figura 5 y Error! No se encuentra el origen de
la referencia..

Figura 5. Evaluacin de caractersticas usando la integral de la imagen.

26





(1)
Ecuacin 1. Integral de un rectngulo.
Una variante de la integral es almacenar el cuadrado de la
suma para el uso del clculo de la desviacin estndar
Ecuacin 1 [4].


(2)
Ecuacin 1 Cuadrado de la Imagen Integral
Clculo de la integral de la imagen CPU y GPU [5]
En el CPU:
Solucin: Ecuacin para el clculo integral de la imagen de
forma secuencial (ver ecuacin 3).


(3)
F(x,y) : es el valor del pixel en esa posicin (ver figura 6a).
En la GPU:
Problema: Dependencia de datos (ver Error! No se
encuentra el origen de la referencia.
Solucin: El clculo de la integral es separable como se
muestra en la Ecuacin 4.


(4)
Ecuacin 4 Imagen Integral paralelizable

a) b)
Figura 6. Proceso de la integral de la imagen. a) en CPU. b) en GPU.
La implementacin del clculo de la integral de la imagen
en la GPU consta de dos partes, la integral por las filas (x) y
luego las columnas (y).
En la Figura 7 se muestra como se ejecuta el proceso
paralelizado del clculo de la integral de la imagen:

Figura 7. Clculo de la integral de la imagen por los ejes (x, y).
Clculo de las caractersticas
A continuacin se describen diferentes variantes para
paralelizar el clculo de caractersticas del algoritmo de
deteccin de objetos de Viola-Jones (ver Figura 8) [6]:

Figura 8. Formas de paralelizar el clculo de caractersticas.
1. Clculo en paralelo de funciones: En este enfoque
cada hilo calcula todas las caractersticas simultneamente
de todas las etapas de la cascada para una ventana en
particular. Este enfoque obliga a los hilos que se ejecutan en
una ventana, que posiblemente hubiese sido discriminada en
alguna etapa temprana de la cascada, a realizar la
comparacin de las caractersticas de etapas superiores
innecesariamente.
2. Paralelizar factor de escala: Este enfoque permite
trabajar en las ventanas de diferentes tamaos al mismo
tiempo. Sin embargo, la escasez de los pxeles de los
factores de escala mayor es sustancial en comparacin con
los factores de escala ms pequea, resultando menos
ventanas de factores de escala ms grande. Este enfoque
asigna mucho ms trabajo a los factores de escala menor
que a los factores de escala ms grande, resultando un
desequilibrio en la distribucin del trabajo, conocido como
desbalance de carga de trabajo.
3. Paralelizar ventanas: Ejecutar el algoritmo en varias
ventanas de la imagen al mismo tiempo. Este enfoque
divide el espacio de clculo pero an no resuelve el
problema de equilibrio de carga. En concreto una ventana
que no contiene un rostro fallar rpidamente, mientras que
las ventanas que encuentren un rostro realizan muchos ms
clculos. El funcionamiento de este mtodo se caracteriza,
en primer lugar, por permitir a los hilos individuales
trabajar en ventanas nicas, en segundo lugar, por lograr la
1) 2) 3)

27

optimizacin (ya que se descompone la imagen) y en tercer
lugar, por proporcionar posibilidades de hacer mtodos
hbridos en combinacin con uno de los otros enfoques.
El 45% de los rostros falsos son eliminados en la primera
etapa, los restantes posibles rostros pasan a las siguientes
etapas (ver Figura 9) [5].

Figura 9. Resultado del macheo de la imagen contra la cascada en su
primera etapa.
Los puntos blancos representan en la imagen rostros
potenciales despus de la primera etapa [5]. Ejemplo de la
salida de otras etapas (ver Figura 10).

Figura 10. Resultado del macheo de la imagen contra la cascada en
diferentes etapas.
Conversin de la imagen de RGB a YUV
El algoritmo de Viola-Jones recibe como parmetro de
entrada una imagen en formato YUV por lo que la imagen
debe ser preprocesada ya que en la actualidad las imgenes en
su mayora son en formato RGB. La conversin de los
formatos puede ser paralelizada y es un punto de fuego a tener
en cuenta para el algoritmo. La conversin de una imagen
RGB a YUV se hace mediante la Ecuacin 5, donde igray(x,y)
es la posicin del pixel en la imagen destino, iR(x,y) es el
canal rojo , iG(x,y) es el canal verde y iB(x,y) es el canal azul
del pixel de la imagen a color.


(5)
Ecuacin 5 Conversin de RGB a YUV
La Ecuacin se puede ejecutar en paralelo para cada uno de
los pixeles de la imagen original debido a que no hay
dependencia de datos entre ellos.
B. Pseudocdigo del algoritmo en CUDA
A continuacin se describe el algoritmo de deteccin de
rostros implementado en CUDA C. Para su implementacin se
utiliz la librera de OpenCV para cargar las imgenes, videos
(on-line, off-line) y la cascada para la deteccin de objetos. El
algoritmo propuesto se estructura en varias capas de
implementacin, la primera contiene las funciones de
deteccin en CUDA C (FaceGPU.cu) que se ejecutan en la
GPU (son las funciones llamadas kernel). La segunda contiene
las funciones que se ejecutan en el CPU, siendo las encargadas
de la construccin del grid para un kernel (CUDACV.cu). La
tercera capa es la interfaz de prueba, en este caso la funcin
main ().
Algoritmo 1 FaceDetectionGPU
Entrada: imagen a escala de grises, cascada, escalado,
tamao minimo
Salida: lista de rectngulos detectados
Pasos:
si existen dispositivos CUDA en el sistema
entonces
Cargar la cascada en memoria de video.
Crear el grid y el bloque para los kernels.
Lanzar kernel integralRow() para el clculo de
la integral de la imagen de las filas (ver Algoritmo 2)
Lanzar kernel integralCol () para el clculo de
la integral de la imagen de las columnas(Ver
Algoritmo 3)
Lanzar kernel para el clculo de caractersticas
RunHaarCascClassifierGPU () (ver Algoritmo 4)
Copiar la lista de rectagulos para la memoria del
host
retornar la lista de rectngulos
Algoritmo 2 integralRow
Entrada: imagen, imagen integral, imagen integral 2,
ancho y largo
Salida: Imagen integral de las filas
Pasos:
Determinar las coordenadas de la fila donde se va a
comenzar
hacer desde i=0 hasta el ancho de la imagen
Guardar el acumulado de cada pixel en la variable
imagen_integral de salida (ver Figura 11).
Guardar el cuadrado del acumulado de cada pixel en la
variable imagen_integral 2 de salida.
Etapa 3 Etapa 7
Etapa 20 Resultado
Etapa 1
Etapa 1

28


Figura 11. Integral de la imagen por las filas
Algoritmo 3 integralCol
Entrada: imagen, imagen integral, imagen integral 2,
ancho y largo
Salida: Imagen integral
Pasos:
Determinar las coordenadas de la columna donde se
va a comenzar
hacer desde i = 1 hasta el largo de la imagen
Guardar el acumulado de cada pixel en la variable
imagen_integral de salida (ver Figura 12).
Guardar el cuadrado del acumulado de cada pixel en la
variable imagen_integral 2 de salida.

Figura 12. Integral de la imagen por las columnas.
Algoritmo 4 RunHaarCascClassifierGPU
Entrada: cascada, imagen integral, imagen integral 2,
largo, ancho, paso a lo ancho, paso a lo largo, factor de
escala, tamao mnimo de la ventana, lista de rectngulos
Salida: Lista de rectngulos
Pasos:
rostro = es un rostro (true)
Determinar las coordenadas de la columna donde se
va a comenzar
hacer desde i= 0 hasta el largo de la cascada
Clcular las carcteristicas del rectngulo y el
umbral.
si umbral < umbral de la etapa entonces
rostro = No es un rostro (falso)
salir
sino pasar a la siguiente etapa
si rostro entonces guardar el rectngulo en la
lista.

C. Pseudocdigo del algoritmo en OpenCL
1. Inicializar entorno;
existen = Comprobar si existen dispositivos
OpenCL en el sistema;
si existen entonces dispositivo= Hallar dispositivo
compatible con imgenes;
sino fin de programa
crear contexto para dispositivo (ClooContextcontext
= ClooContext.FromDevice (device); A partir de la
informacin proporcionada por el dispositivo, se
crea el contexto que le corresponde.)
crear la queue (cola) de comandos para contexto;
(ClooCommandQueuequeue =
context.CreateCommandQueue(); La cola de
comandos es un objeto que controla el orden de la
copia/lectura de objetos de memoria al/desde el
dispositivo, as como el orden de ejecucin de el o
los kernel (s).)

2. Abrir fichero de video y consultar el primer frame;
3. Crear buffers en el GPU, dado el tamao del frame;
4. Inicializar el detector
faceDetector =
ClooHaarObjectDetector.CreateFaceDetector(cont
ext, queue, frame.Width, frame.Height);(En este
paso se carga la cascada y se enva a la memoria de
video.)
Definir el tamao mnimo y mximo de la ventana
de barrido (faceDetector.MaxSize = new Size(300,
300);faceDetector. MinSize = new Size(24, 24);)
5. Iniciar recorrido para el video
I. Enviar frame a la memoria del GPU;(En el paso 3,
durante la creacin de buffers se obtienen objetos de tipo
Buffer. Estos objetos contienen funciones para escribir a,
o leer de, la memoria de video.)
II. Ejecutar el Kernel para invertir los canales Rojo y
Azul; (La imagen que se enva a la memoria est
ordenada en la forma BGR, es necesario que est
ordenada de forma RGB. Un kernel lee 3 valores (B, G, y
R) del buffer de la imagen de entrada (original) y escribe
3 valores (R, B y G) en un buffer temporal. Para procesar
la imagen completa, el kernel es instanciado miles de
veces de manera simultnea. Si la imagen es de
640X480, el nmero de instancias del kernel ser de
307200.En una iteracin se procesa la imagen completa.
(ver Figura 13)
Inicializar buffer para imagen de color; (modelo
RGB)
Inicializar buffer para imagen en escala de grises;
(modelo YUV)
Inicializar buffer para imagen temporal

29


Figura 13. Muestra la distribucin del kernel de intercambio de canales.
III. Convertir la imagen a escala de grises; (El kernel de
conversin lee 3 valores del modo antes mencionado,
aplica la Ecuacin y escribe el resultado en un buffer
temporal. De la misma forma que en el paso anterior, el
kernel es instanciado 307200 veces de manera
simultnea, as, la imagen es procesada en una iteracin.
(ver Figura 14)

Figura 14. Muestra la distribucin del kernel de conversin de formato.
IV. Realizar deteccin Facial
(faceDetector.ProcessFrame(imageTemp))
1. Calcular la imagen integral y la integral al
cuadrado; (Mltiples instancias del kernel programado
con el clculo de la imagen integral se ejecutan
simultneamente, para as, procesar la imagen en una
iteracin (ver Figura 15)

Figura 15. Ejemplo visual de cmo los kernels procesan la imagen.
2. Iniciar el proceso de extraccin de
caractersticas; (En esta fase, mltiples instancias del
Kernel son lanzadas, abarcando en la imagen un rea de
forma rectangular. Dentro de esta rea, el kernel
emplea funciones que de forma paralelizada extraen las
caractersticas de Haar de esa rea. El kernel toma el
resultado del segundo y lo compara con la cascada. El
kernel devuelve su posicin en la imagen en caso de
que ah se encuentre un rostro. Al mismo tiempo el
resto de los kernels estn siendo ejecutados a travs de
toda la imagen (ver Figura 16). En la primera iteracin
la imagen es procesada en su totalidad y, el tamao
inicial del rea que ocupara el kernel, es definido como
tamao mnimo de la ventana, en el resto de las
iteraciones esa rea crecer proporcional a una escala
definida. El kernel es la ventana de barrido, la
ubicacin en la imagen de esta ventana, depender del
paso que se defina. El nmero de iteraciones que habr
para procesar la imagen en su totalidad, depende
directamente del tamao de la imagen, la escala y el
paso que se haya definido.)

Figura 16. Detecin de rostro.

V. Leer resultados de la deteccin; (Como resultado se
obtiene un arreglo de posiciones, el cual est en memoria
de video.)
VI. Procesar los resultados (Por ejemplo, mostrarlos
inmediatamente.)
VII. si video entonces consultar siguiente frame

6. si video entonces repetir recorrido
7. Fin de programa
IV. RESULTADOS Y DISCUSIONES
Se expondrn los experimentos realizados con las variantes
propuestas del algoritmo de deteccin de objetos de Viola-
Jones. Las pruebas fueron realizadas con un mismo conjunto
de imgenes en ambos casos. Se implement un pequeo
programa con la variante de OpenCV del algoritmo de Viola-
Jones con el fin de poder hacer una comparativa entre el
rendimiento del GPU vs CPU, dicha comparativa tambin fue
realizada con el mismo conjunto de imgenes que se us para
el GPU. Se utilizarn distintos modelos de GPU y CPU para
exponer sus potencialidades de procesamiento y estos se
enumeran a continuacin:
1. Intel Core i7 920 (8MB de cache, 2,66 GHz, 6GB RAM).
2. Intel Core 2 Quad 8300 (4MB de cache,2.5GHz, 2GB
RAM )
3. NVIDIA 260 GTX 2
da
Generacin ( 576 MHz, 896MB
RAM)
4. NVIDIA 240 GT ( 550 MHz, 512MB RAM)
5. NVIDIA 9800 GT ( 600 MHz, 512MB RAM)
La memoria RAM que se requiere para la ejecucin
eficiente del algoritmo de deteccin de objetos en CPU es de
512MB, una cantidad mayor de memoria no aadir ningn
efecto en el rendimiento del mismo. En estos experimentos el
GPU NVIDIA 9800 GT slo ser usado en los pruebas con
OpenCL pues dicho GPU por ser de una revisin inferior a la
1,2 no permite el acceso simultneo a memoria con
implementaciones en CUDA.
A. Prueba 1
Este experimento consiste medir el rendimiento del
algoritmo de deteccin de rostros utilizando imgenes con un
tamao fijo variando la cantidad de rostros a detectar.
Se puede observar en la Figura 17 y
Figura 18 que medida que aumenta la cantidad de rostros la
variabilidad de tiempo de deteccin del algoritmo en cada uno
de los dispositivos es considerable para el caso de imgenes
640X480. Con imgenes de tamao medio, el tiempo de

30

deteccin del algoritmo en CPU aumenta de manera creciente
a partir de 40 rostros. Esto se debe a que el proceso de
deteccin es de forma serializada y se invierte mucho ms
tiempo en comparar con la cascada cada uno de los posibles
rostros detectados. El algoritmo en CUDA con la tarjeta 260
GTX se comporta de manera inestable debido a que el balance
de carga no fue contemplado en la implementacin del mismo.
El comportamiento de la propuesta del algoritmo en CUDA
con la tarjeta 240GT es similar al comportamiento del
algoritmo en los CPUs, con la diferencia de que en CUDA se
mantiene una tasa de crecimiento de tiempo de deteccin poco
variable a medida que la cantidad de rostros aumenta. El
comportamiento general del algoritmo en OpenCL vara la
tasa de tiempo de deteccin en una escala muy pequea. Todo
esto se debe a que en imgenes de tamao medio como sta, la
implementacin paralelizada del algoritmo tiene mayor
rendimiento que de forma serializada.

Figura 17. Algoritmo en CUDA en distintos dispositivos con una imagen
de 640 x 480.


Figura 18. Algoritmo en OpenCL en distintos dispositivos con una imagen
de 640 x 480.
B. Prueba 2
Este experimento consiste en medir el rendimiento del
algoritmo de deteccin de rostros utilizando imgenes con un
tamao variable manteniendo fija la cantidad de rostros a
detectar.
En las figuras 19, 20, 21 y 22 se puede apreciar como a
medida que aumenta el tamao de la imagen el tiempo de
deteccin del algoritmo ejecutado en los CPUs y con CUDA
en la tarjeta 260 GTX, crece en mayor orden con respecto al
tiempo de deteccin de los algoritmos que utilizan
OpenCL(con todas las tarjetas) y CUDA con la tarjeta 240
GT. A pesar de que todas las imgenes usadas en la prueba
contienen la misma cantidad de rostros respectivamente, el
tiempo de deteccin del algoritmo en CPU no crece a una
razn estable. Esto se debe a que el algoritmo de Viola-Jones
en CPU barre la imagen entera a diferentes escalas, varias
veces, hasta que la escala mayor sea la propia imagen, esto se
traduce en decenas de miles de iteraciones, adems del tiempo
empleado para calcular las caractersticas de cada sub-ventana
ms su respectivo tiempo de comparacin en la cascada.
Con respeto al tiempo de deteccin del algoritmo en CUDA
con la tarjeta 260 GTX, se puede apreciar con claridad cmo
el desbalance de la carga computacional hace que este se
comporte de manera no ptima. Estos resultados indican que
slo el tamao de la imagen ya es un problema en cuestiones
de rendimiento, adems indican que en el caso de CUDA el
balance de carga es fundamental para un funcionamiento
correcto del mismo.

0,0
0,5
1,0
1,5
2,0
2,5
3,0
0 10 20 40 80 160
T
i
e
m

p
o

e
n

s
e
g
u
n
d
o
s

(
s
)

Deteccin de rostros en una
imagen de 640 x 480 pxeles
240GT 260 GTX Q8300 i7 920
0,0
0,5
1,0
1,5
2,0
2,5
3,0
0 10 20 40 80 160
T
i
e
m
p
o

e
n

s
e
g
u
n
d
o
s

(
s
)

Deteccin de rostros en una
imagen de 640 x 480 pxeles
9800 GT 240 GT 260 GTX
Q8300 i7 920

31


Figura 19. Deteccin de 40 rostros en 3 imgenes de distinto tamao con
CUDA.

Figura 20. Deteccin de 40 rostros en 3 imgenes de distinto tamao con
OpenCL.



Figura 21. Deteccin de 160 rostros en 2 imgenes de distinto tamao con
CUDA.

Figura 22. Deteccin de 160 rostros en 2 imgenes de distinto tamao con
OpenCL.
C. Anlisis de costo beneficio
En este anlisis tanto CPU como GPU sern considerados
slo como un dispositivo de procesamiento sin tipo.
En la primera columna de la tabla 2 se enlistan dispositivos
utilizados en los experimentos y en la segunda columna se
enlistan sus respectivos precios. La tercera columna de la tabla
muestra el rendimiento del algoritmo de deteccin en cada uno
de los dispositivos con respecto al rendimiento del primer
dispositivo listado y en esta columna #x indica cuantas veces
fueron ms rpidos. La cuarta columna de la tabla muestra el
costo por unidad de rendimiento (X).

0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
4,0
320X240 640X480 640X1440
T
i
e
m
p
o

e
n

s
e
g
u
n
d
o
s

(
s
)

Deteccion de rostros (40)
240 GT 260 GTX Q83002 i7 920
0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
4,0
320X240 640X480 640X1440
T
i
e
m
p
o

e
n

s
e
g
u
n
d
o
s

(
s
)

Deteccin de rostros (40)
9800 GT 240 GT 260 GTX Q83002 i7 920
0,0
1,0
2,0
3,0
4,0
5,0
6,0
7,0
8,0
640X480 640X1440
T
i
e
m
p
o

e
n

s
e
g
u
n
d
o
s

(
s
)

Deteccin de rostros (160)
240 GT 260 GTX Q83002 i7 920
0,0
1,0
2,0
3,0
4,0
5,0
6,0
7,0
8,0
640X480 640X1440
T
e
i
m
p
o

e
n

s
e
g
u
n
d
o
s
(
s
)

Deteccin de rostros (160)
9800 GT 240 GT 260 GTX Q83002 i7 920

32

TABLA I
COSTO POR RENDIMIENTO (X)
Dispositivo Precio
($)
Rendimient
o
Cost
o por
unidad
de x
($)
Intel
Q8300
$
149.99
1x $
149.99
Intel core
i7 920
$
289.99
1.38x $
210.13
GeForce
9800 GT
$
109.99
8.3x $
13.25
GeForce
240 GT
$ 65.99 13.83x $
4.77
GeForce
260 GTX
$
180.99
18.44x $
9.81
En las figuras 23, 24 y 25 muestran de manera visual lo
expuesto en la tabla 1. En el primer grfico es apreciable el
rendimiento del algoritmo de deteccin de objetos en los
distintos dispositivos. En el segundo grfico se muestra el
precio de cada una de los dispositivos y el tercer grfico
muestra la relacin del costo por unidad de rendimiento, es
decir, hipotticamente se muestra cuanto valdra el
rendimiento del primer dispositivo (Q8300, 1X) en
comparacin con el resto de los dispositivos.

Figura 23. Rendimiento del algoritmo en los diferentes dispositivos.

Figura 24. Precio por dispositivo hardware.



Figura 25. Costo dado por el precio/ rendimiento en (x).
V. CONCLUSIONES
En este artculo se analizaron los diferentes mtodos,
tcnicas y bibliotecas actuales para la programacin paralela,
en este anlisis se seleccionaron a CUDA de NVIDIA y a
OpenCL de Khronos como tecnologas de GPGPU.
Se realiz un anlisis del algoritmo del framework para
deteccin de objetos de Viola-Jones. Despus del estudio del
algoritmo mencionado se logr determinar cules eran los
segmentos de mayor carga computacional (Integral de la
imagen y clculo de caractersticas) y se determin que estos
eran paralelizables. El algoritmo de Viola-Jones emplea una
imagen en escala de grises, por lo tanto para utilizar el
0x
2x
4x
6x
8x
10x
12x
14x
16x
18x
20x
1x
1.38x
8.3x
13.83x
18.44x
Rendimiento
Q8300 i7 920 9800 GT 240 GT 260 GTX
$50
$100
$150
$200
$250
$300
149.99$
289.99$
109.99$
65.99$
180.99$
Precio por dispositivo
Q8300 i7 920 9800 GT 240 GT 260 GTX
$0
$50
$100
$150
$200
$250
Costo por unidad de x
149.99$
210.13$
13.25$
4.77$
9.81$
Costo por una unidad de
rendimiento (x)
Q8300 i7 920 9800 GT 240 GT 260 GTX

33

algoritmo es necesario preprocesar la imagen y se determin
que la conversin del formato de imagen RGB al formato
YUV tambin es paralelizable.
Sobre la base del estudio de las tecnologas seleccionadas y
las tcnicas de paralelizacin fue posible el diseo e
implementacin los segmentos de mayor carga computacional
paralelizables del algoritmo de deteccin de rostros, para su
ejecucin en GPU. Durante la implementacin de los
algoritmos se determin que el uso de OpenCL es mucho ms
sencillo que el uso de CUDA.
Se dise un conjunto de experimentos para probar la
eficiencia de las propuestas paralelizadas del algoritmo en
GPU y la eficiencia del algoritmo implementado en CPU.
Dichos experimentos arrojaron resultados que permitieron
determinar que la eficiencia del algoritmo paralelizado para el
GPU es hasta 18,4 X veces mayor que el algoritmo serializado
para CPU. Durante la realizacin de las pruebas en GPU se
observ que el CPU no sobrepasaba una carga mayor al 10 %
mientras que las pruebas en el CPU consumieron ms del 80
% de sus recursos.
Se realiz un anlisis de costo beneficio a los dispositivos
utilizados en las pruebas y los resultados permitieron
determinar que el beneficio de utilizar estos GPUs, como
solucin a las tareas de clculo complejo, es mayor e incluso
menos costoso que el uso del CPU de ltima generacin
probado.
En los resultados de este trabajo se determin que es posible
disminuir el tiempo de respuesta del algoritmo de deteccin de
rostros en los sistemas de video-vigilancia inteligente, sin
necesidad de recurrir a soluciones hardware econmicamente
muy costosas.
RECONOCIMIENTOS
Se les agradece a los tutores MSc. Raisa Socorro Llanes y
MSc. Osmany Ferrer Borges por su invaluable ayuda y
paciencia durante el desarrollo de esta investigacin.
REFERENCIAS
[1] PAUL VIOLA, M. J., Robust Real-time Object Detection. July 13, 2001.
[2] GROUP, K., The OpenCl Specification, A. Munshi, Editor. 2010.
[3] JONES., P.V.M., Rapid Object Detection Using a Boosted Cascade of
Simple Features. 2004.
[4] HARVEY, J.P., GPU Acceleration of Object Classification Algorithms
Using NVIDIA CUDA. A Thesis Submitted in Partial Fulfillment of the
Requirements for the Degree of Master of Science in Computer
Engineering, in Rochester Institute of Technology. 2009: NY.
[5] ANTON OBUKHOV, N. Face Detection with CUDA, in GPU
Technology Conference. 2009: Fairmont Hotel, San Jose.
[6] DANIEL HEFENBROCK, J. O. Nhat Tan Nguyen Thanh, Ryan
Kastner, Scott B. Baden. Accelerating Viola-Jones Face Detection to
FPGA-Level using GPUs.

Вам также может понравиться