<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1815-5928</journal-id>
<journal-title><![CDATA[Ingeniería Electrónica, Automática y Comunicaciones]]></journal-title>
<abbrev-journal-title><![CDATA[EAC]]></abbrev-journal-title>
<issn>1815-5928</issn>
<publisher>
<publisher-name><![CDATA[Universidad Tecnológica de La Habana José Antonio Echeverría, Cujae]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1815-59282012000200008</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Impacto de la memoria cache en la aceleración de la ejecución de algoritmo de detección de rostros en sistemas empotrados]]></article-title>
<article-title xml:lang="en"><![CDATA[Cache memory impact on face detection algorithm speed up in embedded systems]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[del Toro Hernández]]></surname>
<given-names><![CDATA[Ernesto]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[Alejandro J.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Sánchez Solano]]></surname>
<given-names><![CDATA[Santiago]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[Alejandro]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría Facultad de Ingeniería Eléctrica ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Instituto de Microelectrónica de Sevilla Centro Nacional de Microelectrónica ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A03">
<institution><![CDATA[,Complejo de Investigaciones Tecnológicas Integradas  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>08</month>
<year>2012</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>08</month>
<year>2012</year>
</pub-date>
<volume>33</volume>
<numero>2</numero>
<fpage>57</fpage>
<lpage>71</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282012000200008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282012000200008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282012000200008&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En este trabajo se analiza el impacto de la memoria cache sobre la aceleración de la ejecución del algoritmo de detección de rostros de Viola-Jones en un sistema de procesamiento basado en el procesador Microblaze empotrado en un FPGA. Se expone el algoritmo, se describe una implementación software del mismo y se analizan sus funciones más relevantes y las características de localidad de las instrucciones y los datos. Se analiza el impacto de las memorias cache de instrucciones y de datos, tanto de sus capacidades (entre 2 y 16 kB) como de tamaño de línea (de 4 y 8 palabras). Los resultados obtenidos utilizando una placa de desarrollo Spartan3A Starter Kit basada en un FPGA Spartan3A XC3S700A, con el procesador Microblaze a 62,5 MHz y 64 MB de memoria externa DDR2 a 125 MHz, muestran un mayor impacto de la cache de instrucciones que la de datos, con valores óptimos de 8kB para la cache de instrucciones y entre 4 y 16kB para la cache de datos. Con estas memorias se alcanza una aceleración de 17 veces con relación a la ejecución del algoritmo en memoria externa. El tamaño de la línea de cache tiene poca influencia sobre la aceleración del algoritmo.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[The impact of cache memory over the speed up of Viola-Jones face detection algorithm on a FPGA embedded processing system based in Microblaze processor is analyzed in this paper. The Viola-Jones face detection algorithm is exposed and its software implementation is described, analyzing its main functions and data locality. The impact of size (among 2 and 16 kB) and line-length (between 4 and 8 words) of code and data cache memories are analyzed. Using a Spartan3A Starter Kit board, based on XC3S700A Spartan3A FPGA, with Microblaze processor running at 62,5 MHz and 64MB of DDR2 external memory running at 125 MHz, code cache shows a higher impact than data cache, with optimal values of 8kB for code cache and among 4 to 16kB for data cache. A speed-up of 17 times over external memory execution of the algorithm is achieved with these cache memories sizes. Cache line-length has little influence over the speed up of the algorithm.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[aceleración de algoritmo]]></kwd>
<kwd lng="es"><![CDATA[detección de rostros]]></kwd>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="es"><![CDATA[memoria cache]]></kwd>
<kwd lng="es"><![CDATA[microblaze]]></kwd>
<kwd lng="es"><![CDATA[viola-jones]]></kwd>
<kwd lng="en"><![CDATA[algorithm speed up]]></kwd>
<kwd lng="en"><![CDATA[cache memory]]></kwd>
<kwd lng="en"><![CDATA[face detection]]></kwd>
<kwd lng="en"><![CDATA[FPGA]]></kwd>
<kwd lng="en"><![CDATA[microblaze]]></kwd>
<kwd lng="en"><![CDATA[viola-jones]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[   <font size="2" face="Verdana">  </font>     <P align="right"><strong><font size="2" face="Verdana">ARTICULO ORIGINAL</font></strong></P>     <P></P>     <p>&nbsp;</p>     <p><font size="4" face="Verdana"><strong>Impacto de la memoria cache en la aceleraci&oacute;n de la ejecuci&oacute;n de    algoritmo de detecci&oacute;n de rostros en    sistemas empotrados </strong></font></p>     <p>&nbsp;</p>     <p><font size="2"><strong><font size="3" face="Verdana">Cache memory impact on face detection algorithm speed up in embedded systems</font></strong></font></p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <p><strong><font size="2" face="Verdana">Ernesto del  Toro Hern&aacute;ndez<sup>1</sup>,&nbsp; Alejandro J. Cabrera  Sarmiento<sup>1</sup>, Santiago S&aacute;nchez Solano<sup>2</sup>, Alejandro Cabrera Aldaya<sup>3</sup></font></strong></p>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana"><SUP>1</SUP>Facultad de Ingenier&iacute;a El&eacute;ctrica,    Instituto Superior Polit&eacute;cnico &#171;Jos&eacute; Antonio Echeverr&iacute;a&#187;,    <a href="mailto:ernesto@electrica.cujae.edu.cu">ernesto@electrica.cujae.edu.cu</a>    , </font><font size="2" face="Verdana"><a href="mailto:alex@electrica.cujae.edu.cu">alex@electrica.cujae.edu.cu</a>    <br>   <sup>2</sup>Centro Nacional de Microelectr&oacute;nica, Instituto de Microelectr&oacute;nica    de Sevilla,<a href="mailto:santiago@imse-cnm.csic.es">santiago@imse-cnm.csic.es</a>    <br>   <sup>3</sup>Complejo de Investigaciones Tecnol&oacute;gicas Integradas, <a href="mailto:acabrera@udio.cujae.edu.cu">acabrera@udio.cujae.edu.cu</a></font></P>     <P>&nbsp;</P>     <P>&nbsp;</P> <hr>     <P><font size="2" face="Verdana"><B>RESUMEN </B></font>    <P><font size="2" face="Verdana">En este trabajo se analiza el impacto de la memoria cache sobre la aceleraci&oacute;n de la ejecuci&oacute;n del algoritmo  de detecci&oacute;n de rostros de Viola-Jones en un sistema de procesamiento basado en el procesador Microblaze  empotrado en un FPGA. Se expone el algoritmo, se describe una implementaci&oacute;n software del mismo y se analizan sus  funciones m&aacute;s relevantes y las caracter&iacute;sticas de localidad de las instrucciones y los datos. Se analiza el impacto de las  memorias cache de instrucciones y de datos, tanto de sus capacidades (entre 2 y 16 kB) como de tama&ntilde;o de l&iacute;nea (de 4 y  8 palabras). Los resultados obtenidos utilizando una placa de desarrollo Spartan3A Starter Kit basada en un  FPGA Spartan3A XC3S700A, con el procesador Microblaze a 62,5 MHz y 64 MB de memoria externa DDR2 a 125 MHz,   muestran un mayor impacto de la cache de instrucciones que la de datos, con valores &oacute;ptimos de 8kB para la cache  de instrucciones y entre 4 y 16kB para la cache de datos. Con estas memorias se alcanza una aceleraci&oacute;n de 17 veces  con relaci&oacute;n a la ejecuci&oacute;n del algoritmo en memoria externa. El tama&ntilde;o de la l&iacute;nea de cache tiene poca influencia  sobre la aceleraci&oacute;n del algoritmo. </font></P>     <P><font size="2" face="Verdana"><strong>Palabras claves:</strong> aceleraci&oacute;n    de algoritmo, detecci&oacute;n de rostros, FPGA, memoria cache, microblaze,    viola-jones.</font></P>       <br> <hr>     <P><font size="2" face="Verdana"><B>ABSTRACT</B></font></P> <font size="2" face="Verdana">The impact of cache memory over the speed up of  Viola-Jones face detection algorithm on a FPGA embedded processing system based  in Microblaze processor is analyzed in this paper. The Viola-Jones face detection  algorithm is exposed and its software implementation is described, analyzing its  main functions and data locality. The impact of size (among 2 and 16 kB) and line-length  (between 4 and 8 words) of code and data cache memories are analyzed. Using a  Spartan3A Starter Kit board, based on XC3S700A Spartan3A FPGA, with Microblaze  processor running at 62,5 MHz and 64MB of DDR2 external memory running at 125  MHz, code cache shows a higher impact than data cache, with optimal values of  8kB for code cache and among 4 to 16kB for data cache. A speed-up of 17 times  over external memory execution of the algorithm is achieved with these cache memories  sizes. Cache line-length has little influence over the speed up of the algorithm.</font>      ]]></body>
<body><![CDATA[<P><font size="2"><font face="Verdana"><strong>Key words:</strong> algorithm speed    up, </font><font size="2"><font face="Verdana"> face detection</font></font><font face="Verdana">,    </font><font size="2"><font face="Verdana">FPGA</font></font><font face="Verdana">,</font>    <font size="2"><font face="Verdana">cache memory</font></font><font face="Verdana">,    microblaze, viola-jones.</font> </font></P>       <br> <hr>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>INTRODUCCION</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">La detecci&oacute;n y reconocimiento de un rostro es una tarea que los seres humanos realizan de forma cotidiana, casi  sin esfuerzo, en su vida diaria. Pero traducir a nivel algor&iacute;tmico un proceso de diferenciaci&oacute;n y reconocimiento facial  es un asunto extremadamente dif&iacute;cil en el cual existe un amplio campo de estudio tanto en universidades y centros  de investigaci&oacute;n (MIT <SUP>1</SUP>, Manchester  <SUP>2</SUP>, CMU <SUP>3</SUP>, Cambridge, INRIA) como en grandes empresas: IBM  <SUP>4</SUP>, SONY <SUP>5</SUP>, Intel  <SUP>6</SUP>, Siemens <SUP>7</SUP> y Google por solo nombrar unas pocas. Tambi&eacute;n existen diversos ejemplos de sistemas  biom&eacute;tricos comerciales desarrollados por varias empresas <SUP>8, 9</SUP>. El proceso de reconocimiento de rostros se ha hecho m&aacute;s  relevante en la medida que la tecnolog&iacute;a ha ido avanzando y su implementaci&oacute;n puede encontrarse en c&aacute;maras digitales,  Internet y dispositivos  m&oacute;viles<SUP>10</SUP>, as&iacute; como en aplicaciones de tecnolog&iacute;a dedicada a la seguridad. </font></P>     <P><font size="2" face="Verdana">El primer paso en el proceso de reconocimiento de rostros es la detecci&oacute;n de los mismos. Existen varias propuestas  de algoritmos para la detecci&oacute;n de rostros basados en diferentes estrategias. Schneiderman y  Kanade<SUP>11</SUP> proponen un m&eacute;todo estad&iacute;stico para detectar rostros utilizando histogramas para representar una gran variedad de atributos  visuales. Otro m&eacute;todo de detecci&oacute;n de rostros puede ser visto en <SUP>12</SUP>, donde H. Rowley, S. Baluja y T. Kanade entrenan  dos sistemas de clasificaci&oacute;n basados en redes neuronales: el primero realiza una estimaci&oacute;n de la pose de un rostro en  una imagen y el segundo se encarga de la detecci&oacute;n de rostros en s&iacute;. Existen otras propuestas donde se realiza la  detecci&oacute;n de rostros teniendo en cuenta las texturas y colores de la piel <SUP>13,14</SUP>. </font></P>     <P><font size="2" face="Verdana">Uno de los algoritmos de detecci&oacute;n de rostros m&aacute;s ampliamente utilizado es el propuesto por P. Viola y M. Jones <SUP>15</SUP>. Este algoritmo, basado en etapas de clasificaci&oacute;n de complejidad creciente, es considerado como uno de los  mejores en cuanto a tiempo de ejecuci&oacute;n y efectividad de detecci&oacute;n <SUP>16-19</SUP>. </font></P>     <P><font size="2" face="Verdana">Muchos de los sistemas de detecci&oacute;n e identificaci&oacute;n de rostros son implementados mediante un programa que  se ejecuta sobre plataformas de procesamiento convencionales (computadoras personales, servidores, etc.) en donde  la velocidad de sus procesadores y la capacidad de sus recursos disponibles permiten obtener elevadas velocidades  de procesamiento. Sin embargo, para aquellas aplicaciones en donde existan limitaciones de tama&ntilde;o, costo y consumo  de potencia, es necesario recurrir a la utilizaci&oacute;n de sistemas empotrados como plataforma para la implementaci&oacute;n de  los algoritmos de detecci&oacute;n e identificaci&oacute;n de rostros, con recursos y velocidades de ejecuci&oacute;n considerablemente  inferiores a las de los sistemas de procesamiento convencionales. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">La utilizaci&oacute;n de un FPGA (Field Programmable Gate Array) como soporte hardware para la implementaci&oacute;n de  un sistema empotrado de detecci&oacute;n de rostros permite desarrollar diferentes estrategias de implementaci&oacute;n:  totalmente software, en donde todo el algoritmo es ejecutado por un sistema de procesamiento empotrado; totalmente  hardware; en donde todo el procesamiento se implementa mediante arquitecturas de procesamiento espec&iacute;ficas; e h&iacute;brida  hardware-software, en donde partes del algoritmo (usualmente las de mayor consumo de tiempo) se implementan en hardware  y las restantes son ejecutadas por un procesador empotrado <SUP>20-27</SUP>. Cada una de estas variantes de implementaci&oacute;n  tiene sus ventajas y desventajas. Las primeras, en contraposici&oacute;n a las segundas, son las que mayor flexibilidad ofrecen  al permitir la utilizaci&oacute;n de diferentes tama&ntilde;os de im&aacute;genes y par&aacute;metros de detecci&oacute;n, aunque son las de menor  velocidad de respuesta. Las realizaciones h&iacute;bridas son las que permiten establecer un mejor compromiso entre flexibilidad  y velocidad de la soluci&oacute;n. </font></P>     <P><font size="2" face="Verdana">El disponer de un sistema empotrado basado en FPGA, los cuales pueden incorporar una gran cantidad y variedad  de recursos internos (bloques de memoria RAM, multiplicadores, procesadores, etc.), permite desarrollar sistemas  de procesamiento altamente configurables y evaluar as&iacute; el impacto de diferentes estructuras sobre la velocidad de  ejecuci&oacute;n de un algoritmo. En las implementaciones software de los algoritmos de detecci&oacute;n e identificaci&oacute;n de rostros  se requiere la utilizaci&oacute;n de grandes capacidades de memoria para el almacenamiento de los datos y c&oacute;digo. Aunque  los FPGA disponen internamente de recursos de memoria, son insuficientes para almacenar todo el programa y sus  datos (a no ser que se utilicen costosos FPGA considerados de gama alta <SUP>28</SUP>) por lo que es necesaria la utilizaci&oacute;n de  memoria externa de gran capacidad de almacenamiento, usualmente memoria din&aacute;mica. La utilizaci&oacute;n de memoria  din&aacute;mica externa al FPGA implica que el acceso a la misma es mucho m&aacute;s lento que el acceso a la memoria interna del  FPGA, por lo que la utilizaci&oacute;n de los recursos de memoria interna como memoria cache permite incrementar  significativamente la velocidad de ejecuci&oacute;n de los algoritmos en un sistema empotrado. </font></P>     <P><font size="2" face="Verdana">Aunque existen trabajos que mencionan la utilizaci&oacute;n de memoria cache en diferentes implementaciones sobre  FPGA del algoritmo de detecci&oacute;n de rostros de Viola-Jones, no se ha encontrado alguno que analice el impacto de  los diferentes par&aacute;metros de la misma sobre la aceleraci&oacute;n de la ejecuci&oacute;n de este algoritmo <SUP>29-33</SUP>. </font></P>     <P><font size="2" face="Verdana">En este art&iacute;culo se expone el impacto    de algunos de los principales par&aacute;metros de la memoria cache de un sistema    de procesamiento empotrado en FPGA sobre la aceleraci&oacute;n de la ejecuci&oacute;n    del algoritmo de detecci&oacute;n de rostros de Viola-Jones con relaci&oacute;n    a su implementaci&oacute;n en memoria din&aacute;mica externa al FPGA. Primeramente    se describe el algoritmo de detecci&oacute;n de rostros de Viola-Jones y se    expone una implementaci&oacute;n software del mismo. A continuaci&oacute;n se    describe el sistema empotrado sobre el que se realiz&oacute; la parte experimental    de la investigaci&oacute;n mediante la implementaci&oacute;n de diferentes configuraciones    de memoria cache de instrucciones y de datos. Luego se analizan las principales    funciones del algoritmo as&iacute; como las caracter&iacute;sticas de los datos    con los que trabaja. En el siguiente apartado se exponen los par&aacute;metros    del sistema de memoria cache del procesador Microblaze que pueden incidir en    el incremento de la velocidad de la ejecuci&oacute;n de un programa as&iacute;    como los resultados de la aceleraci&oacute;n del algoritmo de detecci&oacute;n    de rostros de Viola-Jones en funci&oacute;n de las capacidades de ambos tipos    de memoria cache, as&iacute; como de la longitud de la l&iacute;nea de las mismas.    Finalmente se exponen las conclusiones del trabajo. </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>ALGORITMO DE DETECCI&Oacute;N DE ROSTROS VIOLA-JONES</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">La detecci&oacute;n de rostros en una imagen puede ser una tarea de alto costo computacional en funci&oacute;n del algoritmo  que se utilice. Una forma de implementar un algoritmo de detecci&oacute;n de rostros consiste en ir recorriendo la imagen  mediante una ventana de un determinado tama&ntilde;o, la cual puede contener un rostro (candidato). Un aspecto a considerar es  la forma de evaluar si la ventana contiene o no un rostro. Despu&eacute;s de recorrer la imagen, la ventana puede ser  escalada y repetir el proceso con el objeto de detectar posibles rostros de mayor tama&ntilde;o que no fueron detectados con  tama&ntilde;os de ventana inferiores. </font></P>     <P><font size="2" face="Verdana">El algoritmo de detecci&oacute;n de rostros propuesto por P. Viola y M. Jones, basado en la utilizaci&oacute;n de ventanas  deslizantes, es sin duda el m&aacute;s utilizado, no s&oacute;lo en tareas de detecci&oacute;n de rostros sino tambi&eacute;n de detecci&oacute;n de diversos objetos  en general. Los aspectos fundamentales en que se basa este algoritmo son los siguientes <SUP>15</SUP>: </font></P>     <P><font size="2" face="Verdana">1.     Utilizaci&oacute;n de rasgos de clasificaci&oacute;n </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">2.     Utilizaci&oacute;n de una imagen integral </font></P>     <P><font size="2" face="Verdana">3.     Organizaci&oacute;n en cascada de los clasificadores </font></P>     <P><font size="2" face="Verdana"><B><I>Rasgos de clasificaci&oacute;n.</I></B> Los rasgos de clasificaci&oacute;n son las formas geom&eacute;tricas utilizadas por el algoritmo  para detectar zonas de una imagen (o ventana) que pueda contener partes de un rostro. Los rasgos de clasificaci&oacute;n  utilizados por el algoritmo Viola-Jones son estructuras simples compuestas por dos, tres o cuatro rect&aacute;ngulos grises y  blancos, como los mostrados en la <a href="#f1">Figura 1</a>. N&oacute;tese que  los rasgos pueden tener  6, 8 &oacute; 9 puntos significativos,  correspondientes a las esquinas de cada rect&aacute;ngulo. </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/f0108212.jpg" width="481" height="149">   <a name="f1"></a></P>     
<P align="center"></P>      <P><font size="2" face="Verdana">Estas estructuras simples pueden ser asociadas a partes comunes de un rostro, como las correspondientes a los ojos,  la nariz, la frente, el pelo, etc. La <a href="#f2">Figura 2</a> ilustra la correspondencia de dos posibles rasgos de clasificaci&oacute;n con  partes de un rostro. </font></P>      <P align="center"><img src="/img/revistas/eac/v33n2/f0208212.jpg" width="335" height="210">   <a name="f2"></a></P>     
<P align="center"></P>      <P><font size="2" face="Verdana">Como el n&uacute;mero de rasgos que se pueden corresponder con partes de un rostro en una imagen de un  determinado tama&ntilde;o es considerablemente elevado, Viola y Jones utilizaron un algoritmo de entrenamiento (conocido como  AdaBoost <SUP>34</SUP>) sobre un gran conjunto de im&aacute;genes con y sin rostros, para seleccionar aquellos rasgos que mejor distinguen  las zonas de una imagen que contienen un rostro <SUP>15</SUP>.   </font></P>      <P><font size="2" face="Verdana">Los rasgos no s&oacute;lo se caracterizan por su forma, sino tambi&eacute;n por su tama&ntilde;o y posici&oacute;n dentro de una ventana  as&iacute; como por la posible contribuci&oacute;n de los mismos a la detecci&oacute;n de un rostro. Para ello es necesario calcular el <I>valor del rasgo</I>, par&aacute;metro que se obtiene de la diferencia entre las intensidades de los puntos de las zonas blancas y grises  de un rasgo. Si el valor de un rasgo sobrepasa un determinado umbral  (<I>umbral de clasificaci&oacute;n</I>), se considera que  contribuye con un determinado valor <I>alpha</I> a la detecci&oacute;n de un rostro. Todo este conjunto de par&aacute;metros (y otros que se  expondr&aacute;n m&aacute;s adelante) forman parte de lo que se conoce como un <I>clasificador</I> <SUP>15</SUP>.  </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">N&oacute;tese que el c&aacute;lculo del valor del rasgo puede ser un proceso computacionalmente costoso en tiempo si fuese  preciso recorrer todos los puntos del rasgo para su evaluaci&oacute;n. La segunda contribuci&oacute;n del algoritmo de Viola-Jones  reduce este problema. </font></P>     <P><font size="2" face="Verdana"><B><I>Imagen integral.</I></B> Una contribuci&oacute;n fundamental del algoritmo de Viola-Jones consiste en acelerar el c&aacute;lculo del  valor del rasgo al trabajar no con la imagen original sino con una imagen integral. Esta no es m&aacute;s que una transformaci&oacute;n  de la imagen original en donde cada punto de la misma toma el valor de la suma de todos los puntos que est&aacute;n  ubicados por encima y a su izquierda. As&iacute;, se puede definir una imagen integral <B><I>ii</I> </B>seg&uacute;n la <a href="#e1">ecuaci&oacute;n 1</a>:   </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/e0108212.jpg" width="234" height="71"><a name="e1"></a>    <font size="2" face="Verdana">(1) </font></P>     
<P><font size="2" face="Verdana">En donde <B><I>ii(x, y)</I></B> es el punto de la imagen integral en las coordenadas (x,y) e      <B><I>i(x, y)</I></B> es el punto de la imagen  original en las mismas coordenadas. La Figura 3a ilustra una imagen original, mientras que la 3b ilustra la imagen  integral correspondiente. </font></P>     <P><font size="2" face="Verdana">La imagen integral se puede calcular en un solo recorrido de la imagen original realizando las operaciones descritas  en las ecuaciones 2 y 3: </font></P>     <P><font size="2" face="Verdana"><I>s(x,y) = s(x,y-1) + i(x,y)                     </I>                                            (2) </font></P>     <P><font size="2" face="Verdana"><I>ii(x,y) = ii(x-1,y) + s(x,y)</I>                                                                (3) </font></P>     <P><font size="2" face="Verdana">En donde <I>s(x,y)</I> es la suma de toda una fila considerando que      <I>s(x,-1) = 0</I> e <I>ii(-1, y) = 0</I>. </font></P>     <P><font size="2" face="Verdana">A partir de la imagen integral se puede calcular r&aacute;pidamente la suma de todos los puntos contenidos en un  rect&aacute;ngulo cualquiera de la imagen utilizando s&oacute;lo los cuatro valores asociados a sus esquinas, tal como se ilustra en la <a href="#f3">Figura  3c</a>. Esta caracter&iacute;stica permite que el c&aacute;lculo de la suma de los puntos contenidos en un rect&aacute;ngulo de tama&ntilde;o  arbitrario pueda ser realizado en un tiempo constante utilizando s&oacute;lo cuatro operaciones, por lo que el c&aacute;lculo del valor de  un rasgo se reduce considerablemente. </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/f0308212.jpg" width="496" height="146">   <a name="f3"></a></P>     
]]></body>
<body><![CDATA[<P></P>      <P><font size="2" face="Verdana">A partir de la imagen integral es muy simple la determinaci&oacute;n del valor de un rasgo. Conociendo los valores de  la imagen integral en los puntos significativos de un rasgo y las caracter&iacute;sticas del rasgo, la determinaci&oacute;n del valor de  un rasgo se reduce a simples operaciones de multiplicaci&oacute;n (por coeficientes constantes) y suma. La <a href="#f4">Figura 4</a> ilustra  este proceso, en donde se muestra un rasgo formado por dos rect&aacute;ngulos y se detalla la determinaci&oacute;n de su valor.  N&oacute;tese que los coeficientes por los cuales es necesario multiplicar los valores de la imagen integral de los seis puntos  significativos de este rasgo son constantes. Al conjunto de estas constantes (6, 8 &oacute; 9 valores seg&uacute;n el rasgo) se denomina vector de pesos del rasgo (W) y es otro de los par&aacute;metros que forman parte de un clasificador. </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/f0408212.jpg" width="516" height="221">   <a name="f4"></a></P>     
<P></P>     <P><font size="2" face="Verdana">Organizaci&oacute;n en cascada de los    clasificadores. </font></P>     <P><font size="2" face="Verdana">La tercera caracter&iacute;stica del algoritmo Viola-Jones es la utilizaci&oacute;n de una combinaci&oacute;n en cascada de grupos    de clasificadores cada vez m&aacute;s complejos (con mayor n&uacute;mero de rasgos). Las primeras etapas de la cascada    poseen pocos clasificadores pero permiten descartar r&aacute;pidamente aquellas ventanas que no contienen rostros, concentrando    el esfuerzo computacional en las etapas siguientes en aquellas con mayor probabilidad de contener un rostro. </font></P>     <P><font size="2" face="Verdana">La <a href="/img/revistas/eac/v33n2/f0508212.jpg">Figura 5</a> ilustra una posible distribuci&oacute;n de clasificadores en una cascada de cuatro etapas. La cantidad de etapas    y de clasificadores en cada etapa dependen de la base de datos de clasificadores utilizada para la el proceso de    detecci&oacute;n de rostros <SUP>3, 35</SUP>.    </font></P>     
<P><font size="2" face="Verdana">En la primera etapa, para cada una de las ventanas de la imagen se calculan sus tres clasificadores y se suman    los aportes alpha de los mismos. Si este valor es inferior al    umbral de la etapa, se descarta que la ventana contenga    un rostro y se procesa la siguiente. Si es superior, la ventana se procesa con los nueve clasificadores de la segunda    etapa, y as&iacute; sucesivamente hasta que la ventana sea descartada en alguna de las etapas o, si las supera todas, sea    identificada como un posible rostro. Los valores del umbral de cada etapa se obtienen tambi&eacute;n del proceso de entrenamiento <SUP>15</SUP>.</font><font size="2" face="Verdana"><B>   </B>   </font></P>      <P><font size="2" face="Verdana">Una vez expuestos los aspectos fundamentales en que se basa el algoritmo de detecci&oacute;n de rostros de Viola-Jones  se puede resumir el mismo. Se comienza por procesar una ventana evaluando los clasificadores de las etapas. Si  la ventana no es descartada en alguna de las etapas, se marca como un posible rostro. El proceso contin&uacute;a  desplazando la ventana (en sentido horizontal o vertical) seg&uacute;n un <I>factor de escaneo </I>determinado. Una vez que se haya  recorrido toda la imagen con un tama&ntilde;o de ventana determinado, se incrementa el tama&ntilde;o de la ventana (seg&uacute;n un <I>factor de escalado </I>determinado) y se repite el procesamiento de las etapas y de barrido de la imagen. Los valores de los  factores de escaneo y de escalado son obtenidos tambi&eacute;n durante el proceso de entrenamiento <SUP>15</SUP>. </font></P>     <P>&nbsp;</P>     ]]></body>
<body><![CDATA[<P><font size="3" face="Verdana"><B>IMPLEMENTACI&Oacute;N SOFTWARE DEL ALGORTIMO VIOLA-JONES</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">El algoritmo completo se puede expresar en pseudoc&oacute;digo como se muestra en la <a href="/img/revistas/eac/v33n2/f0608212.jpg">Figura 6</a>. La funci&oacute;n <B>imagen_integral</B> realiza el c&aacute;lculo de la imagen integral. Luego se entra en un doble ciclo for anidado que se encarga de realizar  el barrido por filas (<B><I>for (i=0; i &lt; Image.Width-size;  i+=P)</I></B>) y por columnas (<B><I>for (j=0; j &lt;Image.Height-size;  j+=P)</I></B>) seg&uacute;n el factor de escaneo <B><I>P</I></B>.  </font></P>     
<P><font size="2" face="Verdana">La funci&oacute;n <B>pre-process</B> realiza un descarte r&aacute;pido de aquellos candidatos que son muy homog&eacute;neos o que  tienen regiones muy dis&iacute;miles. Mediante el c&aacute;lculo de la desviaci&oacute;n est&aacute;ndar los candidatos que no entran en un intervalo  de valores </font><font size="2" face="Verdana">determinados en el proceso de entrenamiento de los clasificadores no se pasan al detector      <SUP>15</SUP>. Si el resultado del pre-procesamiento es positivo  (<B><I>pre_process = true</I></B>) se pasa a la evaluaci&oacute;n del candidato en cada una de las etapas.  Este proceso se describe en la llamada a la funci&oacute;n <B>ejecutar_detecci&oacute;n</B>. El resultado en la ejecuci&oacute;n de esta funci&oacute;n  se utilizar&aacute; para decidir si el candidato se considera como rostro y se a&ntilde;ade a la lista de los rostros detectados en la etapa.</font></P>     <P><font size="2" face="Verdana">Despu&eacute;s que todos los candidatos de un tama&ntilde;o determinado hayan sido generados y analizados, se incrementa  el tama&ntilde;o de la ventana deslizante seg&uacute;n el factor de escalado establecido mediante la operaci&oacute;n <B><I>size = size*S</I></B> y se comienza el barrido de la imagen otra vez hasta que se llegue a un l&iacute;mite prefijado con antelaci&oacute;n, en este caso  el tama&ntilde;o de la imagen  (<B><I>Image.size</I></B>). </font></P>     <P><font size="2" face="Verdana">La funci&oacute;n <B>ejecutar_detecci&oacute;n</B> se puede expresar en pseudoc&oacute;digo como se muestra en la <a href="/img/revistas/eac/v33n2/f0708212.jpg">Figura 7</a>. En esta  funci&oacute;n se utiliza un ciclo <B><I>for</I></B> especial (<B><I>foreach</I></B>) para destacar que se eval&uacute;an los clasificadores en cada etapa mediante  el c&aacute;lculo de los puntos significativos de los rasgos en la imagen integral. Dentro de cada etapa se realiza el c&aacute;lculo  de cada clasificador en la etapa (<B><I>foreach (clasificador) in  etapa</I></B>) llamando a la funci&oacute;n <B>calcula_clasificador</B>. Si el resultado de esta operaci&oacute;n es mayor que el umbral de clasificaci&oacute;n entonces el clasificador aporta un valor <I>alpha</I> a la suma de los valores de cada etapa  (<B><I>suma_del_nivel</I></B>). Si el acumulado de los clasificadores de la etapa sobrepasa  el        
<BR> umbral de la etapa (<B><I>stage.umbral</I></B>) entonces se pasar&iacute;a a procesar los clasificadores de la siguiente etapa y se  repetir&iacute;a el proceso hasta que el candidato sea descartado en alguna etapa o sea marcado como rostro.</font>     <P><font size="2" face="Verdana">La funci&oacute;n <B>calcula_clasificador</B> se puede expresar en pseudoc&oacute;digo como se muestra en la <a href="/img/revistas/eac/v33n2/f0808212.jpg">Figura 8</a>. Esta  funci&oacute;n realiza el c&aacute;lculo del rasgo de un clasificador que tiene nueve puntos significativos, acumulando el producto de  cada punto de la imagen integral <B><I>ii(x,y)</I></B> por su  peso  <B><I>W(i)</I></B> correspondiente. En el caso que el rasgo contenga s&oacute;lo seis u  ocho puntos significativos, los restantes coeficientes <B><I>W(i)</I></B> correspondientes tendr&iacute;an el valor cero por lo que no influyen  en la operaci&oacute;n de c&aacute;lculo.</font></P>     
<P><font size="2" face="Verdana">En la implementaci&oacute;n del algoritmo, desarrollado en lenguaje C++, se utiliz&oacute; la base de datos de los  clasificadores obtenidos de la Universidad Carnegie Mellon que son distribuidos junto al sensor de visi&oacute;n CMUcam utilizado en  este trabajo de investigaci&oacute;n <SUP>36</SUP>. Esta base de datos forma parte de una distribuci&oacute;n simple (244 clasificadores  distribuidos       <BR> en cinco etapas) que est&aacute; concebida fundamentalmente para ser implementada en sistemas empotrados de bajo  costo con requerimientos de poco consumo de potencia y baja velocidad de procesamiento. La misma proporciona toda  la informaci&oacute;n de los datos de los clasificadores:  desplazamientos<B><I> x</I></B> y <B><I>y</I></B> de los puntos significativos del  rasgo dentro  de la ventana; pesos <B><I>W(i)</I></B> del rasgo; umbral del clasificador, etc. Tambi&eacute;n se incluyeron como datos constantes un  conjunto de 17 im&aacute;genes de tama&ntilde;o 352 x 288 puntos, extra&iacute;das de la base de datos de CMU y que incluyen uno o m&aacute;s  rostros <SUP>3</SUP>.  </font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>SISTEMA EMPOTRADO UTILIZADO</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Para la implementaci&oacute;n en un sistema basado en FPGA del algoritmo de detecci&oacute;n de rostros de Viola-Jones se  dise&ntilde;&oacute; un sistema de procesamiento empotrado basado en el procesador Microblaze de Xilinx <SUP>37</SUP>. Microblaze es un m&oacute;dulo de propiedad intelectual (IP) totalmente sintetizable (para las FPGA actuales de Xilinx) de un procesador RISC  (Reduced Instructions Set Computer) de 32 bits con arquitectura Harvard. El sistema de procesamiento Microblaze dispone  de una gran colecci&oacute;n de m&oacute;dulos IP de perif&eacute;ricos, controladores de memoria y buses, totalmente configurables  y parametrizables, que permiten el desarrollo de un sistema empotrado con los recursos apropiados para una  determinada aplicaci&oacute;n <SUP>37</SUP>.  </font></P>     <P><font size="2" face="Verdana">La <a href="#f9">Figura 9</a> muestra un esquema del sistema de procesamiento que se implement&oacute; para esta investigaci&oacute;n. El  mismo est&aacute; formado por un procesador Microblaze conectado a un controlador de memoria externa as&iacute; como a un  temporizador, a un transmisor serie asincr&oacute;nico (UART) y a un controlador de interrupciones a trav&eacute;s del bus de expansi&oacute;n PLB. </font>     <P><font size="2" face="Verdana">El controlador de memoria externa se requiere para la conexi&oacute;n de una memoria din&aacute;mica externa que sea capaz  de almacenar todos los datos y el c&oacute;digo del programa. El temporizador ser&aacute; utilizado para la medici&oacute;n del tiempo  de ejecuci&oacute;n del algoritmo en las diferentes configuraciones de memoria cache del procesador Microblaze  desarrolladas en la parte experimental de la investigaci&oacute;n, mientras que el UART ser&aacute; utilizado para transmitir hacia una  computadora personal las mediciones de tiempo realizadas con el temporizador. El temporizador y el UART son atendidos  por interrupci&oacute;n, por lo que sus respectivas solicitudes se env&iacute;an al controlador de interrupciones y de este al  procesador Microblaze. </font></P>     <P><font size="2" face="Verdana">Las estructuras de memoria cache separadas de    instrucciones y de datos forman parte de la estructura del procesador Microblaze    y permiten intercambiar informaci&oacute;n con la memoria externa a trav&eacute;s    del controlador de memoria (conexi&oacute;n no mostrada en la <a href="#f9">Figura    9</a>). </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/f0908212.jpg" width="542" height="212">   <a name="f9"></a></P>     
<P></P>     <P><font size="2" face="Verdana">Como soporte para el sistema empotrado anterior se ha utilizado una placa de desarrollo Spartan3A Starter Kit,  basada en un FPGA Spartan3A XC3S700A el cual cuenta con 20 bloques de memoria RAM (BRAM) de 18kb  configurables, as&iacute; como 5.888 <I>slices</I> (cada  <I>slice</I> contiene dos tablas de b&uacute;squeda de 4 entradas y dos biestables, entre otros  recursos l&oacute;gicos). Esta placa de desarrollo incorpora tambi&eacute;n una memoria din&aacute;mica DDR2 de 64 MB, la cu&aacute;l puede  ser accedida mediante el controlador de memoria empotrado en el FPGA <SUP>38</SUP>. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El sistema fue implementado utilizando una frecuencia de reloj de 62,5 MHz para el procesador Microblaze y de  125 MHz para la memoria externa DDR2. Los detalles de la implementaci&oacute;n escapan a los objetivos de este art&iacute;culo  por lo que no ser&aacute;n expuestos. </font></P>     <P><font size="2" face="Verdana">El c&oacute;digo completo del programa compilado    para el procesador empotrado Microblaze, incluyendo las funciones del preprocesamiento    de la imagen, las funciones relacionadas con la medici&oacute;n de los tiempos    de ejecuci&oacute;n del algoritmo (mediante el temporizador) y las de transmisi&oacute;n    de la informaci&oacute;n mediante el UART hacia la computadora personal, ocupa    algo m&aacute;s de 15kB, mientras que los datos ocupan algo m&aacute;s de 35MB,    debido fundamentalmente a los valores digitalizados de las 17 im&aacute;genes    procesadas (algo m&aacute;s de 34MB) as&iacute; como a los datos de los clasificadores    y valores de la imagen integral. Dadas las limitaciones de los recursos de memoria    interna del sistema empotrado utilizado, es necesario ubicar los datos en memoria    externa. Aunque el tama&ntilde;o del c&oacute;digo de esta implementaci&oacute;n    no implica la necesidad de que sea ubicado en memoria externa, debe tenerse    en cuenta que este algoritmo es s&oacute;lo una parte de un proceso m&aacute;s    complejo (como el de identificaci&oacute;n de rostros) por lo se ubica tambi&eacute;n    en memoria externa. </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>AN&Aacute;LISIS DE LAS FUNCIONES Y DATOS DEL ALGORITMO</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Independientemente del sistema de memoria cache que se utilice, la propia estructura de un programa  (organizaci&oacute;n de su c&oacute;digo y de sus datos) incide en la efectividad de un sistema de memoria cache. Mientras m&aacute;s cumpla  el programa con los principios de localidad espacial (acceso a localizaciones de memoria cercanas a las  recientemente accedidas) y temporal (acceso en breve tiempo a la misma localizaci&oacute;n de memoria) mayor ser&aacute; la tasa de  aciertos (relaci&oacute;n entre el n&uacute;mero de veces que la informaci&oacute;n se encuentra en cache con relaci&oacute;n al n&uacute;mero total de  accesos a memoria) de un sistema de memoria cache y mayor su contribuci&oacute;n al incremento de velocidad en la ejecuci&oacute;n de  un programa. </font></P>     <P><font size="2" face="Verdana">Es por ello que para realizar el an&aacute;lisis del impacto de la memoria cache sobre el incremento de la velocidad  de ejecuci&oacute;n del algoritmo de detecci&oacute;n de rostros de Viola-Jones con relaci&oacute;n a su ejecuci&oacute;n desde memoria externa,  es conveniente analizar las caracter&iacute;sticas de las funciones y datos del mismo. </font></P>     <P><font size="2" face="Verdana">Con objeto de evaluar la distribuci&oacute;n del tiempo de ejecuci&oacute;n entre las distintas partes del algoritmo se utiliz&oacute;  la herramienta de an&aacute;lisis de rendimiento  (<U>profiling</U>) que incorpora el software de desarrollo de Microblaze  <SUP>37</SUP>. Se trata de una herramienta intrusiva que hace que el compilador a&ntilde;ada al c&oacute;digo del programa una funci&oacute;n que interrumpe  la ejecuci&oacute;n del mismo con una frecuencia determinada y guarda en un espacio de memoria reservado el contenido  del contador de programa. Para realizar el an&aacute;lisis la herramienta utiliza el temporizador que est&eacute; implementado en  el sistema. Por este motivo se reelabor&oacute; el programa para dejar libre al temporizador, se incluyeron las bibliotecas  para el an&aacute;lisis del rendimiento, se recompil&oacute; el programa  y se realiz&oacute; un ciclo de ejecuci&oacute;n del algoritmo una sola vez  por cada una de las 17 im&aacute;genes. </font></P>     <P><font size="2" face="Verdana">Una vez finalizada la ejecuci&oacute;n se realiz&oacute; un an&aacute;lisis de los datos obtenidos y se determin&oacute; qu&eacute; funci&oacute;n  corresponde con cada valor del contador de programa. A partir de este an&aacute;lisis se determin&oacute; cu&aacute;nto tiempo estuvo el  procesador ejecutando cada una de las funciones, cu&aacute;ntas llamadas a la funci&oacute;n se hicieron y otros datos estad&iacute;sticos. Los  resultados se pueden visualizar en un gran n&uacute;mero de formatos, como el diagrama que se muestra en la <a href="#f10">Figura 10</a> en  donde aparece el porcentaje de tiempo que est&aacute; ejecut&aacute;ndose cada funci&oacute;n en relaci&oacute;n con el tiempo total de ejecuci&oacute;n  del programa. </font></P>     <P><font size="2" face="Verdana">La zona n&uacute;mero uno corresponde a la funci&oacute;n que realiza el c&aacute;lculo del rasgo de un clasificador  (<B>calcula_clasificador</B>). Como se puede apreciar esta ocupa casi la mitad del tiempo total de ejecuci&oacute;n del programa. La zona n&uacute;mero  dos corresponde a la funci&oacute;n que realiza el c&aacute;lculo de la imagen integral y la n&uacute;mero tres al resto del algoritmo. La  zona n&uacute;mero cuatro est&aacute; asociada a otras funciones no directamente relacionadas con la detecci&oacute;n de rostros  (comunicaci&oacute;n con el puerto serie, visualizaci&oacute;n de los resultados, etc.). </font></P>     ]]></body>
<body><![CDATA[<P align="center"><img src="/img/revistas/eac/v33n2/f1008212.jpg" width="324" height="229">   <a name="f10"></a></P>     
<P></P>      <P><font size="2" face="Verdana">El gran impacto en tiempo de la funci&oacute;n    del c&aacute;lculo del rasgo de un clasificador se debe a la gran cantidad de    veces que es ejecutada. Sin embargo, n&oacute;tese que es una funci&oacute;n    muy simple <a href="/img/revistas/eac/v33n2/f0808212.jpg">(Figura 8)</a>.    Dado que ejecuta una operaci&oacute;n iterativa, la ubicaci&oacute;n de esta    funci&oacute;n en memoria cache de instrucciones permite explotar las caracter&iacute;sticas    de localidad espacial y temporal del c&oacute;digo de la misma y obtener una    elevada tasa de aciertos en el acceso a la memoria cache de instrucciones. </font></P>     
<P><font size="2" face="Verdana">En esta funci&oacute;n es necesario realizar una gran cantidad de accesos a datos en memoria en cada iteraci&oacute;n. Se  realizan accesos a memoria para obtener los valores de los desplazamiento <B><I>x</I></B> y <B><I>y </I></B>de cada uno de los nueve puntos  significativos de un rasgo. Con estos valores se calcula la direcci&oacute;n de memoria donde se encuentra el valor de la imagen integral  de cada uno de estos nueve puntos y se accede a los mismos. Tambi&eacute;n se accede a memoria para leer los valores de  cada uno de los pesos <B><I>W(i)</I></B> del rasgo. En total se realizan 36 accesos a memoria s&oacute;lo para el c&aacute;lculo del valor de un rasgo. </font></P>     <P><font size="2" face="Verdana">Si bien los datos correspondientes a los desplazamientos      <B><I>x</I></B> y <B><I>y</I></B>, as&iacute;  como los de los pesos  <B><I>W(i)</I></B> del rasgo se organizan en estructuras que permiten sacar provecho de la localidad espacial (datos en direcciones cercanas a las  recientemente accedidas) y pueden estar ubicados en una misma l&iacute;nea de la cache de datos, esto no ocurre as&iacute; con el acceso al  valor de la imagen integral en los puntos significativos del rasgo. Dado que estos puntos no est&aacute;n ubicados en  localizaciones consecutivas y se distancian m&aacute;s a medida que se incrementa el tama&ntilde;o de la ventana, es de esperar que la mayor  parte de los fallos (<I>cache miss</I>) en el acceso a la cache de datos en la ejecuci&oacute;n de esta funci&oacute;n se deban a los acceso a  los valores de la imagen integral. </font></P>     <P><font size="2" face="Verdana">La funci&oacute;n que calcula la imagen integral se ejecuta una sola vez para cada imagen, debiendo leer de memoria  externa en direcciones consecutivas donde se encuentran almacenados los valores de la imagen original y escribir tambi&eacute;n  en memoria externa los valores de la imagen integral. Dado que los valores de la imagen integral deben permanecer  en     <BR> memoria externa, no se sacar&iacute;a provecho de utilizar una pol&iacute;tica de escritura obligada  (<I>write back</I>) por lo que se emplea la de escritura inmediata  (<I>write through</I>), de estructura hardware m&aacute;s simple, al implementar la  memoria cache de datos. </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>IMPACTO DE LA MEMORIA CACHE</B> </font></P>     <P>&nbsp;</P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Son varios los par&aacute;metros de dise&ntilde;o de un sistema de memoria cache que pueden influir en el incremento de la tasa  de acierto de la misma y, por consiguiente, en el incremento de velocidad en la ejecuci&oacute;n de un programa. Entre  estos par&aacute;metros se encuentran la propia estructura de la cache (cache de instrucciones y datos separadas o unificadas),  la capacidad de la memoria cache, su esquema de organizaci&oacute;n, el tama&ntilde;o de la l&iacute;nea de cache y la pol&iacute;tica de  escritura utilizada. </font></P>     <P><font size="2" face="Verdana">En el sistema de memoria cache para el procesador Microblaze algunos de estos par&aacute;metros est&aacute;n predeterminados  y no pueden ser configurados. Se utilizan estructuras de cache de instrucciones y de datos separadas para optimizar  la operaci&oacute;n de sus etapas de pipeline. Ambas estructuras de memoria cache utilizan un esquema de organizaci&oacute;n  de mapeo directo, el menos eficiente de los existentes para una cache aunque el m&aacute;s simple de implementar. </font></P>     <P><font size="2" face="Verdana">La capacidad de las memorias cache de datos y de c&oacute;digo puede ser configurada desde 64bytes a 64kB. Por  supuesto, los valores m&aacute;ximos de las mismas depender&aacute;n de los recursos de memoria (sobre todo de BRAM) del FPGA  utilizado. Los tama&ntilde;os de las l&iacute;neas es otro par&aacute;metro que puede ser configurado en ambas memorias, con valores de 4 u  8 palabras (16 &oacute; 32 bytes). Por &uacute;ltimo, la pol&iacute;tica de escritura utilizada para la cache de datos es tambi&eacute;n  configurable, pudiendo ser de escritura obligada  (<I>write back</I>) o inmediata (<I>write  through</I>). Considerando lo apuntado con  relaci&oacute;n a los datos del programa, en esta investigaci&oacute;n s&oacute;lo se ha considerado analizar diferentes capacidades de  ambas memorias y diferentes tama&ntilde;os de l&iacute;nea. </font></P>     <P><font size="2" face="Verdana">Para evaluar el impacto de ambas estructuras de memoria sobre la aceleraci&oacute;n del algoritmo de detecci&oacute;n de rostros  de Viola-Jones se realiz&oacute; una primera implementaci&oacute;n del sistema de procesamiento sin memoria cache por lo que  todos los accesos a las instrucciones y a los datos se realizan en memoria externa. Los resultados de la  implementaci&oacute;n hardware del sistema empotrado y del tiempo de ejecuci&oacute;n del programa sobre las 17 im&aacute;genes de la base de datos  de CMU se muestran en la segunda columna de la <a href="/img/revistas/eac/v33n2/t0108212.jpg">Tabla 1</a>. La cantidad de <I>slices</I> utilizados en esta  implementaci&oacute;n representa un 45,7% de los del FPGA. Los 6 bloques de memoria RAM (30% del total) son utilizados por el  controlador de memoria externa y por el propio procesador Microblaze. </font></P>     
<P><font size="2" face="Verdana">N&oacute;tese que la demora promedio en la ejecuci&oacute;n del programa sobre una imagen es de m&aacute;s de 26 segundos, valor  que se utiliz&oacute; como referencia para determinar la aceleraci&oacute;n de la ejecuci&oacute;n del programa con diferentes  configuraciones de memoria cache. </font></P>     <P><font size="2" face="Verdana">A partir del sistema anterior se realizaron un total de 32 implementaciones del sistema de procesamiento  utilizando diferentes configuraciones de memoria cache con capacidades entre 2 y 16kB para cada una y tama&ntilde;os de l&iacute;nea de  4 y 8 palabras. No fueron consideradas capacidades inferiores de cache por no ser relevantes para la investigaci&oacute;n.  La capacidad m&aacute;xima de ambas memorias cache est&aacute; limitada por la cantidad de bloques de memoria disponibles en  el FPGA (20). </font></P>      <P><font size="2" face="Verdana">Las restantes columnas de la <a href="/img/revistas/eac/v33n2/t0108212.jpg">Tabla 1</a> muestran un ejemplo en donde aparecen los resultados de implementaciones  con capacidades de 2kB de cache de instrucciones y cache de datos entre 2 y 16 kB, utilizando 4 palabras por l&iacute;nea.  N&oacute;tese el incremento en la cantidad de bloques de RAM utilizados debido a ambas memorias cache. La cantidad de <I>slices</I> var&iacute;a ligeramente entre las diferentes implementaciones debido a las variaciones en los controladores de las  memorias cache. La aceleraci&oacute;n alcanzada en estos casos es de algo m&aacute;s de nueve veces con relaci&oacute;n a la ejecuci&oacute;n del  programa sin memoria cache. La <a href="#f11">Figura 11</a> muestra gr&aacute;ficamente los resultados de demora de ejecuci&oacute;n y aceleraci&oacute;n en  funci&oacute;n del tama&ntilde;o de la cache de datos. </font></P>     
<P align="center"><img src="/img/revistas/eac/v33n2/f1108212.jpg" width="477" height="220">   <a name="f11"></a></P>     
<P></P>     <P><font size="2" face="Verdana">La <a href="#t2">Tabla 2</a> muestra los resultados de aceleraci&oacute;n para capacidades entre 2 y 16 kB de ambas memorias cache, con  4 palabras por l&iacute;nea, mientras la Figura 12 los ilustra gr&aacute;ficamente. Analizando las mismas se pueden obtener  conclusiones acerca del impacto de cada una de las memorias cache. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">N&oacute;tese en la <a href="#t2">Tabla 2</a> como con capacidades de cache de instrucciones entre 2 y 4 kB se obtienen resultados  se aceleraci&oacute;n similares (algo m&aacute;s de 9 veces) para los diferentes tama&ntilde;os de memoria cache de datos. En este rango  de valores de la memoria cache de instrucciones, duplicar la capacidad de la misma no incrementa mucho la tasa  de aciertos y por consiguiente la aceleraci&oacute;n de la ejecuci&oacute;n del programa. </font></P>     <P><font size="2" face="Verdana">Sin embargo, al duplicar la cache de instrucciones de 4kB a 8kB se observa un incremento de la aceleraci&oacute;n  del programa entre 15,42 y 16,99 veces, lo cual equivale a incrementos de la aceleraci&oacute;n entre un 68 y un 80%. Esto  se debe a que con 8kB de cache de instrucciones, la mayor parte de las funciones iterativas del programa pueden  radicar en cache, incrementando as&iacute; la tasa de aciertos. N&oacute;tese tambi&eacute;n que incrementar la cache de instrucciones por  encima de 8kB no repercute en un incremento de la aceleraci&oacute;n del programa, por lo que el valor recomendado para el  tama&ntilde;o de esta cache es de 8kB. </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/t0208212.jpg" width="521" height="199">   <a name="t2"></a></P>      
<P><font size="2" face="Verdana">Con relaci&oacute;n a la cache de datos, se puede apreciar que, para un tama&ntilde;o de cache determinado, la duplicaci&oacute;n de  su capacidad no repercute significativamente en la aceleraci&oacute;n del algoritmo. Obs&eacute;rvese la fila 3 de la <a href="#t2">Tabla 2</a>, en  donde con 8kB de cache de instrucciones, la aceleraci&oacute;n var&iacute;a s&oacute;lo alrededor de un 10% (entre 15,42 y 16,99 veces)  para capacidades de la cache de datos entre 2 y 16kB. </font></P>     <P><font size="2" face="Verdana">Este menor impacto de la cache de datos era de esperar, dado que el acceso a los valores de la imagen integral en  los puntos significativos de los rasgos est&aacute;n en direcciones m&aacute;s dispersas, lo cual reduce la tasa de aciertos al disminuir  la localidad espacial de estos datos y ser de poca utilidad la localidad temporal de los mismos.</font> <a href="/img/revistas/eac/v33n2/f1208212.jpg"><font size="2" face="Verdana">(Figura 12) </font></a></P>     
<P><font size="2" face="Verdana">Tambi&eacute;n se realizaron otras 16 implementaciones similares con un tama&ntilde;o de 8 palabras por l&iacute;nea. La <a href="#t3">Tabla 3</a> muestra los resultados de aceleraci&oacute;n para capacidades entre 2 y 16 kB de ambas memorias cache. Nuevamente se observa  un mayor impacto de la cache de instrucciones que la de datos sobre la aceleraci&oacute;n del programa, as&iacute; como que  un incremento de la cache de instrucciones por encima de 8 kB no incrementa la aceleraci&oacute;n de la ejecuci&oacute;n del algoritmo. </font></P>      <P><font size="2" face="Verdana">Comparando las <a href="#t2">tablas 2</a> y <a href="#t3">3</a> se puede apreciar que para capacidades de ambas memorias entre 2 y 4kB, la  aceleraci&oacute;n con 8 palabras por l&iacute;nea es ligeramente superior a la alcanzada con 4 palabras por l&iacute;nea. Esto se debe a que, al  ser mayor el tama&ntilde;o de la l&iacute;nea, los valores de los puntos de la imagen integral necesarios para calcular el valor de  algunos rasgos pueden estar contenidos en una misma l&iacute;nea e incrementar la tasa de aciertos. </font></P>     <P align="center"><img src="/img/revistas/eac/v33n2/t0308212.jpg" width="556" height="200">   <a name="t3"></a></P>     
<P><font size="2" face="Verdana"><B>  </B> </font></P>     <P><font size="2" face="Verdana">Sin embargo, para capacidades de cache entre 8 y 16kB, la aceleraci&oacute;n disminuye ligeramente (excepto para 16kB  de cache de datos). Una posible interpretaci&oacute;n de este resultado puede deberse a que no se compensa el incremento de  la tasa de aciertos con la mayor demora en transferir una l&iacute;nea de mayor tama&ntilde;o entre memoria principal y la cache.  En cualquiera de los casos, se observa que el tama&ntilde;o de la l&iacute;nea de cache tiene poco impacto sobre la aceleraci&oacute;n  del algoritmo de detecci&oacute;n de rostros de Viola-Jones. </font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>CONCLUSIONES</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Analizando las funciones del programa desarrollado para implementar el algoritmo de detecci&oacute;n de rostros de  Viola-Jones se evidencia que la funci&oacute;n que calcula el valor de los rasgos de los clasificadores es la de mayor impacto en  la demora de ejecuci&oacute;n del algoritmo. Esto se debe a la gran cantidad de veces que se ejecuta esta funci&oacute;n. </font></P>     <P><font size="2" face="Verdana">La simplicidad de esta funci&oacute;n y su car&aacute;cter iterativo hacen que se pueda incrementar la velocidad de ejecuci&oacute;n  del algoritmo mediante su almacenamiento en diferentes l&iacute;neas de la cache de instrucciones. Esta funci&oacute;n ejecuta en  cada iteraci&oacute;n 36 accesos a memoria. Aunque algunos de los datos pueden estar en direcciones consecutivas y sacar  provecho de la localidad espacial de la cache, los datos de la imagen integral de los puntos significativos de un rasgo est&aacute;n  en direcciones dispersas y no cumplen con este principio, por lo que este hecho influye negativamente en el  incremento de la tasa de aciertos de la cache de datos. </font></P>     <P><font size="2" face="Verdana">Se ha realizado un conjunto de 33 implementaciones con diferentes estructuras de capacidad y tama&ntilde;o de l&iacute;nea  de ambas memorias cache utilizando una placa de desarrollo Spartan3A Starter Kit basada en un FPGA  Spartan3A XC3S700A, con el procesador Microblaze a 62,5 MHz y 64 MB de memoria externa DDR2 a 125 MHz. </font></P>     <P><font size="2" face="Verdana">Con una primera implementaci&oacute;n sin memoria cache se obtiene una demora de procesamiento de una imagen  de 26,152 segundos, la cual se utiliza como referencia para las posteriores mediciones. Se realizaron 16  implementaciones con capacidades de ambas cache entre 2 y 16kB y cuatro palabras por l&iacute;nea. Los resultados obtenidos muestran  un mayor impacto de la cache de instrucciones que la de datos, con valores &oacute;ptimos de 8kB para la cache de  instrucciones y entre 4 y 16kB para la cache de datos. Con estas memorias se alcanza una aceleraci&oacute;n de alrededor de 17 veces  con relaci&oacute;n a la ejecuci&oacute;n del algoritmo en memoria externa. </font></P>     <P><font size="2" face="Verdana">Se realizaron otras 16 implementaciones con memorias cache entre 2 y 16 kB pero ahora con ocho palabras por  l&iacute;nea. Los resultados obtenidos muestran que el tama&ntilde;o de la l&iacute;nea de cache tiene poca influencia sobre la aceleraci&oacute;n de  este algoritmo.</font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>REFERENCIAS</B> </font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <!-- ref --><P><font size="2" face="Verdana">1. MIT. 2011. Computer Science and Artificial    Intelligence Laboratory. Disponible en: <a href="http://www.csail.mit.edu/" target="_blank">http://www.csail.mit.edu/</a>,    <a href="http://groups.csail.mit.edu/vision/welcome/" target="_blank">http://groups.csail.mit.edu/vision/welcome/</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">2. THE UNIVERSITY OF MANCHESTER. 2011. Imaging    Sciences Research, Face recognition and visual processing. Disponible en: <a href="http://www.medicine.manchester.ac.uk/imaging/" target="_blank">http://www.medicine.manchester.ac.uk/imaging/</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">3. CARNEGIE MELLON UNIVERSITY. 2011. The Robotics    Institute, Vision and Autonomous Systems Center (VASC),. Pittsburgh. Disponible    en: <a href="http://www.ri.cmu.edu/research_center_detail.html?center_id=4&menu_id=262" target="_blank">http://www.ri.cmu.edu/research_center_detail.html?center_id=4&amp;menu_id=262</a>    .     </font></P>     <!-- ref --><P><font size="2" face="Verdana">4. IBM CORPORATION. IBM Smart Surveillance System.    Disponible en: <a href="https://researcher.ibm.com/researcher/view_project.php?id=2039" target="_blank">https://researcher.ibm.com/researcher/view_project.php?id=2039</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">5. SONY. Sony Face Recognition Technology. Disponible    en: <a href="http://www.sony.net/SonyInfo/technology/technology/theme%20/sface_01.html" target="_blank">http://www.sony.net/SonyInfo/technology/technology/theme    /sface_01.html</a>.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">6. INTEL. 2011. Intel&#174; Integrated Performance    Primitives. Disponible en: <a href="http://software.intel.com/en-us/articles/using-intel-ipp-with-opencv/?wapkw=(opencv)" target="_blank">http://software.intel.com/en-us/articles/using-intel-ipp-with-opencv/?wapkw=%28opencv%29</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">7. SIEMENS. Siemens Medical Informatics Patents    Page. Disponible en: <a href="http://www.usa.siemens.com/en/about_us/research/research_dev/integrated_data_systems_patents.htm" target="_blank">http://www.usa.siemens.com/en/about_us/research/research_dev/integrated_data_systems_patents.htm</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">8. L1 IDENTITY SOLUTIONS. Disponible en: <a href="http://www.l1id.com/pages/116-face" target="_blank">http://www.l1id.com/pages/116-face</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">9. BIOID. Biometric authentication as a Service    (BaaS). Disponible en: <a href="http://www.bioid.com/products-and-services.html" target="_blank">http://www.bioid.com/products-and-services.html</a>.        </font></P>     <!-- ref --><P><font size="2" face="Verdana">10.     SHAN, TING , BIGDELI, ABBAS , LOVELL, BRIAN  &amp; CHEN,  SHAOKANG: &#171;Robust Face Recognition Technique for a Real-Time Embedded Face Recognition System&#187;.  en: VERMA, B. &amp; BLUMENSTEIN, M. (eds.) Pattern Recognition Technologies and Applications: Recent Advances. Hershey, PA, U.S.A. :  2008.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">11.     SCHNEIDERMAN, HENRY &amp; KANADE, TAKEO &#171;A statistical method for 3d object detection applied to faces  and cars&#187;. en:  IEEE Conference on Computer Vision and Pattern Recognition, 2000 Hilton Head Island, SC. 746 -  751. 2000.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">12.     ROWLEY, HENRY, BALUJA, SHUMEET &amp; KANADE, TAKEO &#171;Neural Network-Based Face Detection&#187; en  IEEE Transactions on Pattern Analysis and Machine  Intelligence, 20, 23 - 38. 1998.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">13.     RAVI KUMAR, C.N. &amp; BINDU, A.: &#171;An Efficient Skin Illumination Compensation Model for Efficient Face  Detection&#187;. en:  IEEE Industrial Electronics, IECON 2006 - 32nd Annual Conference on, 6-10 Nov 2006 Paris. 3444 - 3449. 2006.     </font></P>     <P><font size="2" face="Verdana">14.     KRISHNA, S. &amp; PANCHANATHAN, S.: &#171;Combining Skin-Color Detector and Evidence Aggregated Random  Field Models towards Validating Face Detection Results&#187;. en:  Computer Vision, Graphics &amp; Image Processing, 2008.  ICVGIP '08. Sixth Indian Conference on, 16-19 Dec. 2008 2008. 466-473. 2008. </font></P>     <!-- ref --><P><font size="2" face="Verdana">15.     VIOLA, PAUL &amp; JONES, MICHAEL   &#171;Rapid object detection using a boosted cascade of simple features&#187;. en:  Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. CVPR, 2001.  511-518. 2001.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">16.     YANG, MING-HSUAN, KRIEGMAN, DAVID.J. &amp; AHUJA, NARENDRA: &#171;Detecting faces in images: a survey&#187;  en IEEE Transactions on Pattern Analysis and Machine Intelligence, 24, 34 - 58. 2002.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">17.     MATHEW, BINU, DAVIS, AL &amp; EVANS, ROBERT: &#171;A Characterization of Visual Feature Recognition&#187;. en:   IEEE 6th annual workshop on workload characterization, 2003. 3-11. 2003.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">18.     BIGDELI, ABBAS, SIM, COLIN, BIGLARI-ABHARI, MORTEZA &amp; LOVELL, BRIAN C.: &#171;Face Detection  on Embedded Systems &#171;. en:  Proceedings of the 3rd International Conference on Embedded Software and  Systems: Lecture Notes in Computer Science, 14 - 16 May, 2007 2007 Daegu, Korea. Berlin, Heidelberg: Springer-Verlag,  295 - 308 2007.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">19.     ZHANG, CHA &amp; ZHANG, ZHENGYOU: A Survey of Recent Advances in Face Detection. Microsoft Research 2010.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">20.     CHANGJIAN, GAO &amp; SHIH-LIEN, LU: &#171;Novel FPGA based Haar classifier face detection algorithm acceleration&#187;. en:   International Conference on Field Programmable Logic and Applications. FPL 2008. , 8-10 Sept. 2008. 373-378. 2008.     </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">21.     HUNG-CHIH, LAI, SAVVIDES, M. &amp; TSUHAN, CHEN: &#171;Proposed FPGA Hardware Architecture for High Frame  Rate Face Detection Using Feature Cascade Classifiers&#187;. en:  First IEEE International Conference on Biometrics:  Theory, Applications, and Systems. BTAS 2007., 27-29 Sept. 2007 2007. 1-6. 2007. </font></P>     <!-- ref --><P><font size="2" face="Verdana">22.     CHO, JUNGUK, BENSON, BRIDGET, MIRZAEI, SHAHNAM &amp; KASTNER, RYAN: &#171;Parallelized Architecture  of Multiple Classifiers for Face Detection&#187;. en:  IEEE International Conference on Application-specific  Systems, Architectures and Processors, 2009. 2009.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">23.     THEOCHARIDES, T., VIJAYKRISHNAN, N. &amp; IRWIN, M. J.: &#171;A parallel architecture for hardware face detection&#187;. en:   IEEE Computer Society Annual Symposium on Emerging VLSI Technologies and Architectures, 2-3 March 2006  2006.     2006. </font></P>     <!-- ref --><P><font size="2" face="Verdana">24.     HIROMOTO, M., NAKAHARA, K., SUGANO, H., NAKAMURA, Y. &amp; MIYAMOTO, R.: &#171;A Specialized  Processor Suitable for AdaBoost-Based Detection with Haar-like Features&#187;. en:  IEEE Conference on Computer Vision and  Pattern Recognition. CVPR '07, 17-22 June 2007 2007. 1-8. 2007.     </font></P>     <P><font size="2" face="Verdana">25.     ZHENG, DING, FENG, ZHAO, TINGHUI, WANG, WEI, SHU &amp; MIN-YOU, WU: &#171;Hecto-Scale Frame Rate Face  Detection System for SVGA Source on FPGA Board&#187;. en:  IEEE 19th Annual International Symposium on  Field-Programmable Custom Computing Machines (FCCM), 1-3 May 2011 2011. 37-40. 2011. </font></P>     <P><font size="2" face="Verdana">26.     LUO, R. C. &amp; HSIN-HUNG, LIU: &#171;Design and implementation of efficient hardware solution based sub-window  architecture of Haar classifiers for real-time detection of face biometrics&#187;. en:  International Conference on Mechatronics  and Automation (ICMA), 4-7 Aug. 2010 2010. 1563-1568. 2010. </font></P>     <!-- ref --><P><font size="2" face="Verdana">27.     NAIR, VINOD, LAPRISE, PIERRE-OLIVIER &amp; CLARK, JAMES J.: &#171;An FPGA-Based People Detection System&#187;  en European Association for Signal Processing, EURASIP Journal on Applied Signal Processing,  10471061. 2005.     </font></P>     <P><font size="2" face="Verdana">28.     XILINX INC.: 7 Series FPGAs Overview, Advance Product Specification. DS180 (v1.9). 2012. </font></P>     <!-- ref --><P><font size="2" face="Verdana">29.      MATHEW, B., DAVIS, A., EVANS, R., IEEE International Workshop on Workload Characterization, IEEE  Conference Publications, 3-11, 2003.      </font></P>     <!-- ref --><P><font size="2" face="Verdana">30.      NAIR, V., LAPRISE, P., CLARJ, J., An FPGA-Based People Detection System, EURASIP Journal on Applied  Signal Processing vol. 7, 10471061, 2005  </font><!-- ref --><P><font size="2" face="Verdana">31.     JUNGUK, C., BENSON, B., MIRZAEI, S., KASTNER, R., Parallelized Architecture of Multiple Classifiers for  Face Detection,  20th IEEE International Conference on Application-specific Systems, Architectures and Processors,  IEEE Conference Publications, 75-82, 2009 </font><!-- ref --><P><font size="2" face="Verdana">32.      HEFENBROCK, D., OBERG, J., NHAT, T., KASTNER, R., BADEN, S., Accelerating Viola-Jones Face Detection  to FPGA-Level Using GPUs, 18th IEEE Annual International Symposium on Field-Programmable Custom  Computing Machines (FCCM), IEEE Conference Publications,  11-18, 2010 </font><!-- ref --><P><font size="2" face="Verdana">33.      KYRKOU, C., THEOCARIDES, T., A Flexible Parallel Hardware Architecture for AdaBoost-Based Real-Time  Object Detection, IEEE Transactions on Very Large Scale Integration Systems,  Vol. 19, Issue: 6, pp 1034 - 1047, 2011 </font><!-- ref --><P><font size="2" face="Verdana">34.     FREUND, Y., SCHAPIRE, R., A Decision-Theoretic Generalization of On-Line Learning and an Application to  Boosting, Journal of Computer and System Sciences, pp. 119-139, 1997.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">35. GARAGE, W., Open Source Computer Vision library.    Disponible en: <a href="http://opencv.willowgarage.com/wiki/Welcome" target="_blank">http://opencv.willowgarage.com/wiki/Welcome</a>    </font><P><font size="2" face="Verdana">36. ROWE, A., GOODE, A., GOEL, D. , ROSENBERG,    C. &amp; NOURBAKHSH, I. 2011. CMUcam3: Open Source Programmable Embedded Color    Vision Platform. Disponible en: <a href="http://www.cmucam.org/" target="_blank">http://www.cmucam.org/</a>.    </font></P>     <!-- ref --><P><font size="2" face="Verdana">37.     XILINX INC., ISE Design Suite User Guide,  Version 12.4, 2011.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">38.     XILINX INC., Spartan-3A FPGA Starter Kit Board User Guide, 2007.    </font></P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Recibido: Marzo    2012    <br>   Aprobado: Mayo 2012 </font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P></P>     <P></P>     <P></P>     <P></P> <font size="2" face="Verdana"><B></b></font>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<source><![CDATA[MIT. 2011. Computer Science and Artificial Intelligence Laboratory]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[THE UNIVERSITY OF MANCHESTER. 2011. Imaging Sciences Research, Face recognition and visual processing.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[MELLON UNIVERSITY. 2011. The Robotics Institute, Vision and Autonomous Systems Center (VASC),.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[IBM CORPORATION. IBM Smart Surveillance System.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[SONY. Sony Face Recognition Technology.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[INTEL. 2011. Intel® Integrated Performance Primitives.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[SIEMENS. Siemens Medical Informatics Patents Page.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[L1 IDENTITY SOLUTIONS.]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[BIOID. Biometric authentication as a Service (BaaS).]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SHAN]]></surname>
<given-names><![CDATA[TING]]></given-names>
</name>
<name>
<surname><![CDATA[BIGDELI]]></surname>
<given-names><![CDATA[ABBAS]]></given-names>
</name>
<name>
<surname><![CDATA[LOVELL]]></surname>
<given-names><![CDATA[BRIAN]]></given-names>
</name>
<name>
<surname><![CDATA[CHEN]]></surname>
<given-names><![CDATA[SHAOKANG]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Robust Face Recognition Technique for a Real-Time Embedded Face Recognition System]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[VERMA]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[BLUMENSTEIN]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Pattern Recognition Technologies and Applications: Recent Advances.]]></source>
<year>2008</year>
<publisher-name><![CDATA[Hershey, PA,]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SCHNEIDERMAN]]></surname>
<given-names><![CDATA[HENRY]]></given-names>
</name>
<name>
<surname><![CDATA[KANADE]]></surname>
<given-names><![CDATA[TAKEO]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A statistical method for 3d object detection applied to faces and cars]]></article-title>
<source><![CDATA[IEEE Conference on Computer Vision and Pattern Recognition]]></source>
<year>2000</year>
<page-range>746 - 751</page-range><publisher-name><![CDATA[2000 Hilton Head Island]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ROWLEY]]></surname>
<given-names><![CDATA[HENRY]]></given-names>
</name>
<name>
<surname><![CDATA[BALUJA]]></surname>
<given-names><![CDATA[SHUMEET]]></given-names>
</name>
<name>
<surname><![CDATA[KANADE]]></surname>
<given-names><![CDATA[TAKEO]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Neural Network-Based Face Detection]]></article-title>
<source><![CDATA[IEEE Transactions on Pattern Analysis and Machine Intelligence]]></source>
<year>1998</year>
<volume>20</volume>
<page-range>23 - 38</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RAVI KUMAR]]></surname>
<given-names><![CDATA[C.N.]]></given-names>
</name>
<name>
<surname><![CDATA[BINDU]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Efficient Skin Illumination Compensation Model for Efficient Face Detection]]></article-title>
<source><![CDATA[IEEE Industrial Electronics, IECON 2006 - 32nd Annual Conference on, 6-10 Nov 2006 Paris.]]></source>
<year>2006</year>
<page-range>3444 - 3449</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KRISHNA]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[PANCHANATHAN]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Combining Skin-Color Detector and Evidence Aggregated Random Field Models towards Validating Face Detection Results]]></article-title>
<source><![CDATA[Computer Vision, Graphics & Image Processing, 2008.]]></source>
<year>2008</year>
<page-range>466-473</page-range><publisher-name><![CDATA[ICVGIP '08. Sixth Indian Conference on, 16-19 Dec. 2008.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[VIOLA]]></surname>
<given-names><![CDATA[PAUL]]></given-names>
</name>
<name>
<surname><![CDATA[JONES]]></surname>
<given-names><![CDATA[MICHAEL]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Rapid object detection using a boosted cascade of simple features]]></article-title>
<source><![CDATA[Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition.]]></source>
<year>2001</year>
<page-range>511-518</page-range><publisher-name><![CDATA[CVPR, 2001]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[YANG]]></surname>
<given-names><![CDATA[MING-HSUAN]]></given-names>
</name>
<name>
<surname><![CDATA[KRIEGMAN]]></surname>
<given-names><![CDATA[DAVID.J.]]></given-names>
</name>
<name>
<surname><![CDATA[AHUJA]]></surname>
<given-names><![CDATA[NARENDRA]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Detecting faces in images: a survey]]></article-title>
<source><![CDATA[IEEE Transactions on Pattern Analysis and Machine Intelligence]]></source>
<year>2002</year>
<volume>24</volume>
<page-range>34 - 58</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MATHEW,]]></surname>
<given-names><![CDATA[BINU]]></given-names>
</name>
<name>
<surname><![CDATA[DAVIS]]></surname>
<given-names><![CDATA[AL]]></given-names>
</name>
<name>
<surname><![CDATA[EVANS]]></surname>
<given-names><![CDATA[ROBERT]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Characterization of Visual Feature Recognition]]></article-title>
<source><![CDATA[IEEE 6th annual workshop on workload characterization, 2003.]]></source>
<year>2003</year>
<page-range>3-11</page-range></nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BIGDELI]]></surname>
<given-names><![CDATA[ABBAS]]></given-names>
</name>
<name>
<surname><![CDATA[SIM]]></surname>
<given-names><![CDATA[COLIN]]></given-names>
</name>
<name>
<surname><![CDATA[BIGLARI-ABHARI]]></surname>
<given-names><![CDATA[MORTEZA]]></given-names>
</name>
<name>
<surname><![CDATA[LOVELL]]></surname>
<given-names><![CDATA[BRIAN C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Face Detection on Embedded Systems]]></article-title>
<source><![CDATA[Proceedings of the 3rd International Conference on Embedded Software and Systems: Lecture Notes in Computer Science, 14 - 16 May, 2007]]></source>
<year>2007</year>
<page-range>295 - 308</page-range><publisher-loc><![CDATA[Berlin ]]></publisher-loc>
<publisher-name><![CDATA[Heidelberg: Springer-Verlag]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ZHANG]]></surname>
<given-names><![CDATA[CHA]]></given-names>
</name>
<name>
<surname><![CDATA[ZHANG]]></surname>
<given-names><![CDATA[ZHENGYOU]]></given-names>
</name>
</person-group>
<source><![CDATA[A Survey of Recent Advances in Face Detection. Microsoft Research]]></source>
<year>2010</year>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHANGJIAN]]></surname>
<given-names><![CDATA[GAO]]></given-names>
</name>
<name>
<surname><![CDATA[SHIH-LIEN]]></surname>
<given-names><![CDATA[LU]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Novel FPGA based Haar classifier face detection algorithm acceleration]]></article-title>
<source><![CDATA[International Conference on Field Programmable Logic and Applications.]]></source>
<year>2008</year>
<page-range>373-378</page-range><publisher-name><![CDATA[FPL 2008. , 8-10 Sept. 2008.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[HUNG-CHIH]]></surname>
<given-names><![CDATA[LAI]]></given-names>
</name>
<name>
<surname><![CDATA[SAVVIDES]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[TSUHAN]]></surname>
<given-names><![CDATA[CHEN]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Proposed FPGA Hardware Architecture for High Frame Rate Face Detection Using Feature Cascade Classifiers]]></article-title>
<source><![CDATA[First IEEE International Conference on Biometrics: Theory, Applications, and Systems. BTAS 2007., 27-29 Sept. 2007.]]></source>
<year>2007</year>
<page-range>1-6</page-range></nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHO]]></surname>
<given-names><![CDATA[JUNGUK]]></given-names>
</name>
<name>
<surname><![CDATA[BENSON]]></surname>
<given-names><![CDATA[BRIDGET]]></given-names>
</name>
<name>
<surname><![CDATA[MIRZAEI]]></surname>
<given-names><![CDATA[SHAHNAM]]></given-names>
</name>
<name>
<surname><![CDATA[KASTNER]]></surname>
<given-names><![CDATA[RYAN]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Parallelized Architecture of Multiple Classifiers for Face Detection]]></article-title>
<source><![CDATA[IEEE International Conference on Application-specific Systems, Architectures and Processors, 2009.]]></source>
<year>2009</year>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[THEOCHARIDES]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[VIJAYKRISHNAN]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[IRWIN]]></surname>
<given-names><![CDATA[M. J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A parallel architecture for hardware face detection]]></article-title>
<source><![CDATA[IEEE Computer Society Annual Symposium on Emerging VLSI Technologies and Architectures, 2-3 March 2006]]></source>
<year>2006</year>
</nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[HIROMOTO]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[NAKAHARA]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
<name>
<surname><![CDATA[SUGANO]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[NAKAMURA]]></surname>
<given-names><![CDATA[Y.]]></given-names>
</name>
<name>
<surname><![CDATA[MIYAMOT]]></surname>
<given-names><![CDATA[O, R.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Specialized Processor Suitable for AdaBoost-Based Detection with Haar-like Features]]></article-title>
<source><![CDATA[IEEE Conference on Computer Vision and Pattern Recognition. CVPR '07, 17-22 June 2007 2007.]]></source>
<year>2007</year>
<page-range>1-8</page-range></nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ZHENG]]></surname>
<given-names><![CDATA[DING]]></given-names>
</name>
<name>
<surname><![CDATA[FENG]]></surname>
<given-names><![CDATA[ZHAO]]></given-names>
</name>
<name>
<surname><![CDATA[TINGHUI]]></surname>
<given-names><![CDATA[WANG]]></given-names>
</name>
<name>
<surname><![CDATA[WEI]]></surname>
<given-names><![CDATA[SHU]]></given-names>
</name>
<name>
<surname><![CDATA[MIN-YOU]]></surname>
<given-names><![CDATA[WU]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Hecto-Scale Frame Rate Face Detection System for SVGA Source on FPGA Board]]></article-title>
<source><![CDATA[IEEE 19th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM), 1-3 May 2011]]></source>
<year>2011</year>
<page-range>37-40</page-range></nlm-citation>
</ref>
<ref id="B26">
<label>26</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LUO]]></surname>
<given-names><![CDATA[R. C.]]></given-names>
</name>
<name>
<surname><![CDATA[HSIN-HUNG]]></surname>
<given-names><![CDATA[LIU]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Design and implementation of efficient hardware solution based sub-window architecture of Haar classifiers for real-time detection of face biometrics]]></article-title>
<source><![CDATA[International Conference on Mechatronics and Automation (ICMA), 4-7 Aug. 2010]]></source>
<year>2010</year>
<page-range>1563-1568</page-range></nlm-citation>
</ref>
<ref id="B27">
<label>27</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[NAIR]]></surname>
<given-names><![CDATA[VINOD]]></given-names>
</name>
<name>
<surname><![CDATA[LAPRISE]]></surname>
<given-names><![CDATA[PIERRE-OLIVIER]]></given-names>
</name>
<name>
<surname><![CDATA[CLARK]]></surname>
<given-names><![CDATA[JAMES J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An FPGA-Based People Detection System]]></article-title>
<source><![CDATA[European Association for Signal Processing, EURASIP Journal on Applied Signal Processing,]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B28">
<label>28</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[XILINX]]></surname>
<given-names><![CDATA[INC.]]></given-names>
</name>
</person-group>
<source><![CDATA[7 Series FPGAs Overview, Advance Product Specification. DS180 (v1.9).]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B29">
<label>29</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MATHEW]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[DAVIS]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[EVANS]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[IEEE International Workshop on Workload Characterization]]></source>
<year>2003</year>
<page-range>3-11</page-range><publisher-name><![CDATA[IEEE Conference Publications]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B30">
<label>30</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[NAIR]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
<name>
<surname><![CDATA[LAPRISE]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[CLARJ]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[An FPGA-Based People Detection System]]></source>
<year>2005</year>
<volume>7</volume>
<page-range>1047-1061</page-range><publisher-name><![CDATA[EURASIP Journal on Applied Signal Processing]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B31">
<label>31</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[JUNGUK]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[BENSON]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
<name>
<surname><![CDATA[MIRZAEI]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[KASTNER]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[Parallelized Architecture of Multiple Classifiers for Face Detection, 20th IEEE International Conference on Application-specific Systems, Architectures and Processors,]]></source>
<year>2009</year>
<page-range>75-82</page-range><publisher-name><![CDATA[IEEE Conference Publications]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B32">
<label>32</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[HEFENBROCK]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[OBERG]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[NHAT]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[KASTNER]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[BADEN]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Accelerating Viola-Jones Face Detection to FPGA-Level Using GPUs, 18th IEEE Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM),]]></source>
<year>2010</year>
<page-range>11-18</page-range><publisher-name><![CDATA[IEEE Conference Publications]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B33">
<label>33</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KYRKOU]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[THEOCARIDES]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Flexible Parallel Hardware Architecture for AdaBoost-Based Real-Time Object Detection, IEEE Transactions on Very Large Scale Integration Systems]]></source>
<year>2011</year>
<volume>19</volume>
<edition>6</edition>
<page-range>1034 - 1047</page-range></nlm-citation>
</ref>
<ref id="B34">
<label>34</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[FREUND]]></surname>
<given-names><![CDATA[Y.]]></given-names>
</name>
<name>
<surname><![CDATA[SCHAPIRE]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting]]></source>
<year>1997</year>
<page-range>119-139</page-range><publisher-name><![CDATA[Journal of Computer and System Sciences]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B35">
<label>35</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GARAGE]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
</person-group>
<source><![CDATA[Open Source Computer Vision library]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B36">
<label>36</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ROWE]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[GOODE]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[GOEL]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[ROSENBERG]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[NOURBAKHSH]]></surname>
<given-names><![CDATA[I.]]></given-names>
</name>
</person-group>
<source><![CDATA[CMUcam3: Open Source Programmable Embedded Color Vision Platform]]></source>
<year>2011</year>
</nlm-citation>
</ref>
<ref id="B37">
<label>37</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[XILINX]]></surname>
<given-names><![CDATA[INC]]></given-names>
</name>
</person-group>
<source><![CDATA[ISE Design Suite User Guide, Version 12.4]]></source>
<year>2011</year>
</nlm-citation>
</ref>
<ref id="B38">
<label>38</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[XILINX]]></surname>
<given-names><![CDATA[INC.]]></given-names>
</name>
</person-group>
<source><![CDATA[Spartan-3A FPGA Starter Kit Board User Guide]]></source>
<year>2007</year>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
