Está en la página 1de 10

Acelerar Diseño de Visión por

Computadora con Síntesis de Alto


Nivel (HLS, High-Level Synthesis)
www.mentor.com

INTRODUCCIÓN
El procesamiento digital de imágenes y video con algoritmos complejos para interpretar el
significado define el mundo de la visión por computadora. Se espera que este mercado de
más de $ 6 mil millones crezca 7 veces para el año 2022 (Fuente: Tractica) y las soluciones de
visión por computador nos rodean, en automóviles, productos de consumo, seguridad, venta
minorista y agricultura. Sin embargo, el diseño de estas soluciones no es fácil,
principalmente debido a las constantes actualizaciones de algoritmos y los cambios de
requisitos relacionados (Figura 1).

En algunos casos, es posible que se ordene al equipo cambiar el objetivo tecnológico (FPGA o
ASIC, por ejemplo). Esto significa que, donde sea que el equipo esté en el flujo de creación y
verificación de RTL, es posible que tengan que comenzar de nuevo, lo que puede causar un
retraso inaceptable en el cronograma de producción. Esto también significa que los
diseñadores de algoritmos no pueden experimentar en tiempo real para determinar el
impacto en las implementaciones de hardware.

Figura 1: El cambio hace que el flujo de RTL comience nuevamente

Si gestionar el cambio no es un desafío suficiente, también existen desafíos técnicos. Muchos


sistemas de visión por computadora necesitan velocidad en tiempo real. Por ejemplo, un
sistema de prevención de colisiones en un automóvil no puede tener retrasos en la toma de
decisiones. La velocidad en tiempo real puede significar miles de millones de cálculos por
segundo, sin embargo, los diseñadores también están tratando de mantener el consumo de
energía al mínimo. Y para complicar aún más las cosas, se espera que las resoluciones de la
cámara y las velocidades de fotogramas se dupliquen cada pocos años.
EL PAPEL DE LAS REDES NEURONALES
CONVOLUCIONALES
Los sistemas de visión por computadora deben comprender lo que están "viendo" para
tomar decisiones correctas. Esta comprensión proviene del aprendizaje profundo que
comúnmente se implementa utilizando redes neuronales convolucionales (CNN), inspiradas
en la forma en que las neuronas del cerebro interactúan para reconocer las imágenes. Las
CNN se emplean de dos maneras distintas (Figura 2):

• Entrenamiento: normalmente se realiza en granjas de GPU de punto flotante que


pueden pasar semanas procesando cantidades masivas de datos de entrenamiento
para ajustar los pesos de la red. Este proceso iterativo proporciona muchas imágenes
de los mismos tipos de objetos con diferentes atributos como orientaciones,
relaciones de aspecto y claridad, para permitir que la red "aprenda" cómo detectar y
clasificar estos objetos.

• Inferencia: la CNN ejecuta convoluciones usando los pesos del entrenamiento para
detectar y clasificar objetos en cualquier imagen. La inferencia se puede implementar
en hardware de punto fijo para implementarse en sistemas de visión por
computadora.

Debido a que muchos sistemas de visión por computadora se implementan en automóviles,


equipos o productos de consumo, que no pueden depender de un laboratorio lleno de
computadoras, las soluciones de inferencia son el foco de los diseñadores de hardware.

Figura 2: Comparación de entrenamiento CNN e inferencia

SÍNTESIS DE ALTO NIVEL PARA EL RESCATE


Hace muchos años, Mentor reconoció que los equipos de diseño y verificación de visión
artificial necesitaban pasar del nivel RTL al nivel de síntesis de alto nivel (HLS) para abordar
los desafíos del diseño de sistemas de visión por computadora. Trabajar con clientes a lo
largo de todos estos años ha resultado en la plataforma Catapult® HLS de hoy que
proporciona un flujo completo desde C++/ SystemC hasta RTL optimizado (Figura 3).
Figura 3: El flujo de Catapult HLS Platform

La plataforma Catapult HLS proporciona una solución de diseño de hardware para


diseñadores de algoritmos que genera RTL de alta calidad a partir de descripciones de C++
y/o SystemC que se dirigen a soluciones ASIC, FPGA y FPGA integradas. La plataforma ofrece
la posibilidad de verificar el diseño en busca de errores antes de la simulación, proporciona
un entorno de prueba sin fisuras y reutilizable y admite la comprobación de equivalencia
formal entre el RTL generado y la fuente original. El flujo de la plataforma garantiza un
diseño y verificación rápidos y ofrece RTL optimizado para la potencia, listo para simulación y
síntesis RTL.

Al emplear estos elementos de la solución Catapult HLS Platform, los equipos llevan sus
productos de visión por computadora al mercado más rápido y a un costo menor:

• Habilite los cambios de última hora: cambie fácilmente los algoritmos C++ en
cualquier momento y regenere el código RTL o apunte a una nueva tecnología.

• Evaluar hardware: explorar rápidamente las opciones de potencia, rendimiento y


área sin cambiar el código fuente.

• Acelerar programaciones: reduzca el tiempo de diseño y verificación de un año a


unos pocos meses y agregue nuevas características en días, no semanas, todas con
código C/C++ que contiene 5 veces menos líneas de código que RTL.

CODIFICACIÓN PARA LA SÍNTESIS


Una arquitectura típica de CNN (Convolutional Neural Networks) se muestra en la figura 4 y
consiste en capas de filtros convolucionales, agrupadas y en supercapas completamente
conectadas (Fully Connected Layer) cuyos niveles más bajos de implementación son la
multiplicación de matrices y las funciones del producto de puntos, que son una muy buena
opción para HLS.
Figura 4: una arquitectura típica de CNN

No todo el código C++ es adecuado para la síntesis. En general, el código se puede sintetizar
convirtiendo la asignación de memoria dinámica en matrices limitadas, reemplazando el
punto flotante con tipos de datos de punto fijo y cambiando las llamadas de función math.h
para usar las bibliotecas de matemática de hardware apropiadas que están optimizadas para
la síntesis. Sin embargo, el aspecto más importante de la codificación de HLS es describir la
arquitectura general de hardware en C++ para lograr la mejor calidad de resultados (Figura
5). Esto incluye conceptos tales como la descripción de un registro de desplazamiento frente
a una implementación de memoria intermedia circular basada en memoria para almacenar
datos de imagen.

Figura 5: el código de C++ debe escribirse con hardware en mente

Si bien está más allá del alcance de este documento discutir exhaustivamente los algoritmos
de codificación de visión por computadora para la síntesis de hardware, algunos puntos
clave son:

• Catapult HLS admite tipos de datos C algorítmicos con precisión de bits que funcionan
como cualquier otro tipo de datos C++ nativo. El uso de estos tipos de datos para
números fijos, enteros, flotantes y complejos permite que el código se sintetice en
hardware con el mismo comportamiento bit a bit que el modelo C++.
• Catapult HLS necesita conocer los límites de matriz para matrices internas y para
variables de interfaz de bloque (Figura 6).

Figura 6: Usar límites de matriz en el código

• Los algoritmos de visión artificial a menudo envían y reciben datos de muestra en


forma de transmisión. El uso de punteros no es compatible con HLS, pero el uso de la
clase ac_channel permite una representación eficiente de las interfaces que admiten
la transmisión del comportamiento del productor/consumidor y los resultados en la
generación RTL correcta por construcción.

• Los patrones de acceso de matriz en C++ pueden afectar el rendimiento de la


arquitectura de memoria resultante. Los accesos a memoria tienden a ser el cuello de
botella de rendimiento en un diseño, por lo que el diseñador debe tener cuidado de
evitar la codificación de demasiados accesos a una matriz que se asigna a la memoria.
Catapult HLS brinda a los diseñadores la flexibilidad de elegir fácilmente arquitecturas
de memoria como FIFOs, buffers circulares y memorias multi-banco al cambiar unas
pocas líneas de código C++. Estas compensaciones arquitectónicas no son factibles en
un flujo RTL.

Después de comprender cómo codificar las implementaciones exitosas de hardware, el


conjunto de características de la plataforma Catapult HLS puede ayudar a los diseñadores a
abordar los desafíos del diseño de la visión por computadora.

ENTENDIENDO POR QUÉ CATAPULT ABORDA LOS DESAFÍOS


Quizás los equipos de diseño de visión por computadora se sienten atraídos inicialmente por
HLS porque la plataforma Catapult HLS genera RTL correctas por construcción a partir de las
descripciones de C++. La herramienta crea módulos RTL simultáneos a partir de clases y
funciones de C++ que se sintetizan en procesos concurrentes y cronometrados (sin
necesidad de diseño y depuración de subprocesos múltiples). Pero, una mirada más cercana
a la herramienta demuestra por qué es tan útil para el diseño de visión por computadora.

AGREGAR AUTOMÁTICAMENTE PROTOCOLOS DE INTERFAZ


En lugar de codificar los protocolos de interfaz en el código fuente, los diseñadores pueden
usar Interface Synthesis para agregar un protocolo temporizado a las variables de la interfaz
de funciones de C++ no programadas. Esto se hace estableciendo restricciones
arquitectónicas para el protocolo en la GUI Catapult (Figura 7) o como un comando TCL. La
herramienta es compatible con protocolos típicos, como flujo de video AXI4, solicitud/
reconocimiento de protocolo de enlace e interfaces de memoria. Esto permite a los
diseñadores explorar protocolos de interfaz sin cambiar la fuente de C++.

Figura 7: Selección de protocolos de interfaz

TIEMPO DE CLAUSURA
HLS agrega tiempo al algoritmo C++ usando un proceso llamado programación (Figura 8). En
función de la tecnología seleccionada y la frecuencia del reloj, la programación examina las
operaciones que describe el algoritmo y decide qué ciclo de reloj ejecutan. La programación
inserta registros entre operaciones (canalización) para cumplir con las restricciones del reloj
y para minimizar las demoras en la ruta combinacional. Esto asegura que el cierre de
temporización sea automático, sin embargo, el diseñador tiene control sobre la optimización
de latencia o área.

Figura 8: Tiempo de cierre basado en tecnología y frecuencia de reloj

ANÁLISIS DE BOTELLAS DE RENDIMIENTO


Una de las preguntas clave que tienen los desarrolladores de algoritmos de C++ es "¿Qué
sucedió durante la síntesis de RTL?". En particular, necesitan determinar el rendimiento del
diseño e identificar los cuellos de botella en el diseño sintetizado. Catapult proporciona una
vista Programada del diseño para el análisis (Figura 9). Esta vista muestra rápidamente qué
bucles consumen la mayor parte del tiempo con barras verdes en el Perfil de tiempo de
ejecución.
Figura 9: una vista gráfica del diseño programado

La programación podría fallar si las restricciones son imposibles de cumplir con la


descripción de C++ existente. La herramienta proporciona retroalimentación avanzada que
muestra a los diseñadores las rutas de tiempo críticas relacionadas con una ejecución de
programación fallida (Figura 10). Esta visualización permite a los diseñadores rastrear los
problemas de sincronización del flujo de datos hasta el código fuente para comprender y
corregir el problema.

Figura 10: Análisis de violación avanzado cuando falla al programar el diseño

Las violaciones típicas son causadas por la competencia entre recursos, dependencias de
retroalimentación de datos o dependencias de lectura/escritura de memoria. Algunas veces,
cambiar las restricciones de diseño puede resolver el problema. Otras veces, se requieren
cambios arquitectónicos a C++ (similar a las concesiones hechas en flujos de RTL).
EXPLORANDO EL PARALLELISMO
Los diseñadores pueden explorar el paralelismo mediante la realización de transformaciones
de bucle dentro de la herramienta. El desenrollado de los bucles impulsa el paralelismo
mientras que el pipeline influye en el rendimiento y la frecuencia máxima. Para un ciclo
seleccionado en el diseño, el diseñador puede realizar un análisis de lo que sucede al
cambiar las restricciones arquitectónicas y luego usar el Visualizador para ver el esquema
RTL que resulta de la síntesis (Figura 11).

Figura 11: Realización de análisis de las restricciones de paralelismo

INFERIR Y OPTIMIZAR LA MEMORIA


Catapult infiere automáticamente la memoria de matrices y mapas en memorias/registros
ASIC o FPGA (Figura 12). Las matrices en la interfaz de diseño se pueden sintetizar como
interfaces de memoria y las matrices internas se pueden sintetizar en memorias instanciadas
(en recuadro negro).

Figura 12: Inferir memoria de matrices


El diseñador tiene control sobre el ancho de banda y las particiones de la memoria, incluido
el ancho de las palabras, el modo de empaquetado y el control del número de memorias al
especificar los métodos Bloquear o Intercalar. En combinación con el desenrollado de bucles,
el diseñador puede aumentar fácilmente el ancho de banda de la memoria.

COMPARTIR RECURSOS
Para mantener el área al mínimo, Catapult comparte recursos automáticamente buscando
exclusividad mutua explícita en el código y aplicando restricciones de diseño. Realiza el
intercambio de registros mediante la realización de análisis de por vida, guiados por las
restricciones de diseño (Figura 13).

Figura 13: Intercambio de recursos dirigido por restricciones

EXPLORANDO Y OPTIMIZANDO EL PODER


Usando la tecnología PowerPro®, Catapult genera RTL optimizado para poder converger
rápidamente en una solución de diseño ideal. Los diseñadores pueden explorar de forma
interactiva las microarquitecturas utilizando restricciones para evaluar la potencia, el
rendimiento y las compensaciones de área. Pueden explorar opciones de diseño y
determinar el efecto sobre la potencia mediante el uso de técnicas como el refinamiento
numérico, la exploración de frecuencias, la minimización del acceso a la memoria (banca y
entrelazado) y el intercambio de recursos.

LEVANTAMIENTO DE BIBLIOTECAS
Al diseñar sistemas de visión por computadora, no es difícil notar que hay bloques de
construcción de bajo nivel instanciados muchas veces dentro del mismo diseño, como filtros
convolucionales, interfaces, arquitecturas de memoria de ventanas deslizantes, agrupación,
buffers de línea y clases de indicadores de imagen. La plataforma Catapult HLS proporciona
bibliotecas parametrizadas en C++ para estas operaciones básicas de imágenes de bajo nivel
y Mentor agrega continuamente bibliotecas de alto nivel de clases completas de imágenes IP
para usar como punto de partida para el siguiente proyecto del equipo de diseño.

EL RETIRO
El mundo del diseño de la visión por computadora está en constante cambio, lo que significa
que los flujos de RTL tradicionales no pueden mantenerse al día con los horarios. Para
responder rápidamente a los cambios y acelerar el diseño y la verificación, la síntesis de alto
nivel ofrece un camino hacia el éxito. Con su gran cantidad de soluciones, la plataforma
Catapult HLS proporciona una metodología única que aborda los desafíos del diseño de la
visión por computadora.

Para obtener más información sobre cómo HLS está revolucionando la innovación de la
visión por computadora y para experimentar las historias de éxito de los clientes, consulte la
serie gratuita de seminarios de video aquí.

© 2018 Mentor Graphics Corporation, todos los derechos reservados. Este documento contiene información que es propiedad
de Mentor Graphics Corporation y puede que el destinatario original lo duplique por completo o en parte solo para fines
comerciales internos, siempre que este aviso completo aparezca en todas las copias.

Al aceptar este documento, el destinatario acepta hacer todos los esfuerzos razonables para evitar el uso no autorizado de esta
información. Todas las marcas comerciales mencionadas en este documento son marcas comerciales de sus respectivos
propietarios.

Para obtener la información más reciente sobre el producto, llámenos o visite: www.mentor.com

MGC 07-18

TECH17570-w

También podría gustarte