Implementación embebida de LeNet para clasificación de dígitos en video

Se describe en este proyecto la implementación en una plataforma híbrida SW/HW System on Chip, de una red neural convolucional conocida como LeNet, utilizada en el reconocimiento de dígitos manuscritos. Se diseñó e implemento un sistema SoC utilizando co-diseño, haciendo uso de la tarjeta de Intel D...

Full description

Autores:
Barreto Jiménez, Juan Sebastián
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2022
Institución:
Pontificia Universidad Javeriana
Repositorio:
Repositorio Universidad Javeriana
Idioma:
spa
OAI Identifier:
oai:repository.javeriana.edu.co:10554/65213
Acceso en línea:
http://hdl.handle.net/10554/65213
Palabra clave:
Aprendizaje profundo
DE1-SoC
Diseño digital
FPGA
Inteligencia artificial
Inteligencia artificial embebida
LeNet
Reconocimiento de dígitos
Redes neuronales convolucionales
System on chip
VHDL
Artificial Intelligence
Convolutional neural networks
DE1-SoC
Deep learning
Digital design
Digit recognition
Embedded artificial Intelligence
FPGA
LeNet
System on chip
VHDL
Ingeniería electrónica - Tesis y disertaciones académicas
*
Rights
openAccess
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional
Description
Summary:Se describe en este proyecto la implementación en una plataforma híbrida SW/HW System on Chip, de una red neural convolucional conocida como LeNet, utilizada en el reconocimiento de dígitos manuscritos. Se diseñó e implemento un sistema SoC utilizando co-diseño, haciendo uso de la tarjeta de Intel DE1-SoC, la cual incluye en un mismo chip de tecnología Cyclone IV, un procesador ARM Cortex A9 (HPS) y una porción de hardware reconfigurable en tecnología field-programmable gate array (FPGA). En la primera fase del proyecto se implementó la red en bajo nivel, en lenguaje C utilizando una metodología de codificación orientada a una posterior transición hardware reconfigurable. La implementación en bajo nivel busca replicar los resultados de clasificación obtenidos en la librería de Keras, logrando una aceleración de 3.03x respecto a la red corriendo en Python. En la segunda fase, se implementaron las capas de la red definidas para ser llevadas a hardware en la FPGA, correspondientes a las capas convolucional 2D y max-pooling 2D, y las capas de activación la ReLU y la softmax. En software en el HPS de la tarjeta se implementaron las capas flatten y dense. Se diseñó para capa convolucional un módulo en hardware encargado de realizar producto punto en punto flotante. El diseño del hardware utilizo técnicas de optimización de área, como lo es unrolling loop y etapas de pipeline. Se privilegió un diseño de hardware que optimizara el uso de recursos dadas las restricciones de espacio que tenía la FPGA. De igual forma, la FPGA corre con un reloj de 100Mhz, lo que resulta que un producto punto de 5x5 sea ejecutado en 1085 ns, logrando una aceleración respecto a la misma implementación en una tarjeta Raspberry Pi 4 y con respecto al ARM de la DE1-SoC. El bloque producto punto se utilizó varias veces para realizar la convolución en pipeline. Para la capa max-pooling se diseñó un comparador de punto flotante totalmente combinacional que permite comparar cada campo presente en la definición de número es punto flotante, y mediante un sistema de selección priorizada se determina el resultado de la comparación. En la tercera fase, se implementó una arquitectura de doble buffer, de manera que los buffers, implementados en memorias on-chip, sean intercambiados como entrada o salida en cada iteración subsecuente; la arquitectura es genérica para que se puedan agregar más capas al sistema, la ruta de datos se configurará para cada iteración para que se puedan construir diferentes capas. El sistema es funcional, capaz de reconocer dígitos escritos a mano, generando un cuerpo de conocimiento para integrar modelos complejos de inteligencia artificial, como redes neuronales convolucionales, en plataformas de hardware FPGA.