Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
18/08/2023 | Sistema embebido,Software Embebido
¿Se puede aplicar Inteligencia Artificial en sistemas embebidos?
¿Qué es la inteligencia artificial?
En los últimos años, la inteligencia artificial ha ganado una gran relevancia en el mundo en el que vivimos y trabajamos ya que ha llevado a una transformación de los procesos que se realizan en sectores tan importantes en nuestra sociedad como son la medicina, la industria o la educación entre otros. Estos cambios han sido posibles gracias a que las máquinas han adquirido la capacidad de imitar ciertos comportamientos de los seres humanos. Esto ha llevado a alcanzar un nuevo paradigma que ha posibilitado que los dispositivos puedan realizar tareas que solo estaban al alcance de personas.
Si buscamos cómo definir inteligencia artificial, la podemos describir como la capacidad que pueden tener las máquinas para aprender, razonar, tomar decisiones o resolver problemas de manera individual, sin depender de ayuda humana directa. Estas características son llevadas a cabo partiendo de una gran cantidad de datos y algoritmos sofisticados; a través estos algoritmos los sistemas que integran inteligencia artificial pueden detectar patrones y mejorar su rendimiento con la experiencia.
Inteligencia Artificial en sistemas embebidos
A la hora de trabajar con inteligencia artificial solemos contar con equipos de altas prestaciones, tanto en capacidad de memoria como capacidad de cómputo, ya que estas características serán necesarias a la hora de montar el modelo asociado a la IA y ejecutar éste. No obstante, se podría dar el caso de que se quieran desarrollar aplicaciones que son ejecutadas en sistemas embebidos, de tal manera que éstas puedan llegar a hacer uso de inteligencia artificial.
Llegados a este punto podríamos preguntarnos, ¿podemos usar IA en un dispositivo embebido?
Pues bien, pese a que usualmente se requieren dispositivos de grandes características, existe la posibilidad de utilizar IA en dispositivos embebidos. Gracias a este hecho se puede conseguir la implementación de herramientas como podrían ser las redes neuronales, y utilizarlas en dispositivos empotrados, como microcontroladores o sistemas en chip (SoC). De esta forma se podrán crear soluciones que tengan la capacidad de trabajar de forma autónoma y en tiempo real, sin depender de una conexión a la nube o a un servidor externo.
Pese a que la respuesta a la pregunta anterior fue sí, habría que matizar varios aspectos. Las técnicas de IA requieren en ocasiones de grandes capacidades de memoria y cómputo por lo que, pese a que existe la posibilidad de ejecutar estas características en dispositivos embebidos, los límites en cuanto a propiedades que suelen tener estos sistemas pueden imposibilitar la ejecución de soluciones que requieran de una gran cantidad de datos para procesar.
En muchos casos, al utilizar IA en sistemas embebidos se implementará con anterioridad fuera de este dispositivo el modelo de aplicación IA asociado a la solución a implementar, de tal manera que el proceso de, por ejemplo, crear una red neuronal y entrenarla, se puede ejecutar en un equipo como podría ser un ordenador personal, para luego exportar el modelo y ejecutarlo en un sistema embebido. Esto implica que, en estos casos, solo nos tendremos que preocupar por la capacidad del sistema empotrado a la hora de ejecutar el modelo IA, sin tener en cuenta, por ejemplo, un proceso como el de entrenamiento que suele consumir bastantes recursos.
Por otra parte, teniendo en cuenta las limitaciones de estos sistemas, para implementar técnicas de IA es posible que además sea necesario optimizar los modelos a través de técnicas de cuantización o compresión.
Destacar que existen varias soluciones a la hora de trabajar con IA en sistemas embebidos. En el caso presentado en este artículo nos centraremos en la implementación de redes neuronales en estos sistemas, viendo algunas de las soluciones disponibles actualmente. Sin embargo, antes de ello conozcamos un poco mejor las redes neuronales.
Redes neuronales
Antes de que existiera la inteligencia artificial, los programadores creaban algoritmos que, teniendo en cuenta unos estímulos, dieran como resultado unas respuestas; es decir, dadas unas entradas el algoritmo respondía con unas salidas esperadas. Con la inteligencia artificial basada en redes neuronales esto ha cambiado, ya que no habrá un algoritmo que crear.
Las redes neuronales son un componente esencial de la inteligencia artificial, las cuales tienen su base en la estructura y funcionamiento de las neuronas que se encuentran en el cerebro humano. Estas redes están compuestas por nodos llamados neuronas artificiales o simplemente neuronas, las cuales están interconectadas entre sí formando una red, donde cada neurona puede recibir una o varias entradas. A cada entrada se le asigna un peso, de tal manera que se le dará una mayor o menor importancia a una entrada u otra, para posteriormente sumar estas entradas ya ponderadas y obtener la salida a la que se le aplicará una función de activación y así obtener la salida de la neurona.
Fuente: http://rna.50webs.com/
A la hora de determinar los pesos que acabamos de comentar se debe recurrir al entrenamiento de la red neuronal. A través del entrenamiento se presentará a la red neuronal un conjunto de datos de entrada donde, además, se le podrá indicar la salida esperada (aprendizaje supervisado) o no (aprendizaje no supervisado). Durante el entrenamiento de la red neuronal ajustará el valor de los pesos de las entradas de todas las neuronas, teniendo en cuenta el error generado comparando con el resultado esperado, utilizando técnicas como el descenso del gradiente o backpropagation.
En definitiva, el entrenamiento de la red neuronal será la clave ya que cuantos más datos se disponga para entrenar a la red, mejor será el resultado.
Resaltar que la combinación obtenida de pesos no tiene porqué ser única sino que, en distintos entrenamientos, se pueden llegar a obtener distintos pesos para cada entrada de cada neurona, siendo los resultados igualmente satisfactorios.
Otro factor a destacar es que, normalmente, una red neuronal estará formada por varias capas de neuronas, conectadas entre sí. En la siguiente imagen se puede ver cómo se forma una red neuronal a base de capas.
Fuente: https://artfromcode.wordpress.com/
Integración de redes neuronales en sistemas embebidos
Existen varias soluciones basadas en librerías a través de las cuales se pueden implementar redes neuronales que corren en sistemas empotrados. A continuación veremos algunas de estas soluciones:
AIfES
AIfES es una solución para la integración de redes neuronales en sistemas embebidos que permitirá entrenar y ejecutar redes neuronales en prácticamente cualquier dispositivo SoC (System on Chip).
Puede ser definido como un framework equiparable a herramientas de machine learning de Python como TensorFlow o Keras. AIfES está optimizado para su utilización en el IDE de Arduino a través de la instalación de la librería “AIfES for Arduino”.
Este framework está desarrollado en C y utiliza bibliotecas estándar. Gracias a esto puede ser ejecutado desde cualquier hardware, ya sea un microcontrolador, un dispositivo IoT, o un teléfono inteligente, lo que será una gran ventaja ya que no tendremos que depender de la capacidad de procesamiento aportada por el hardware a utilizar. Esto último se debe resaltar ya que, pese a que en cuanto a la capacidad de cómputo no habrá problema, habrá que tener en cuenta la memoria a utilizar. Es debido a que el principal problema al trabajar con dispositivos embebidos será la memoria de la que se dispone y la necesaria para la ejecución de la red neuronal.
Entre las funcionalidades disponibles a la fecha de la escritura de este artículo, AIfES cuenta con la posibilidad de utilizarse para realizar redes neuronales pre alimentadas (FNN, Feedforward Neural Network). Estas redes neuronales podrán ser parametrizadas, entrenadas y modificadas, con la ventaja de que se podrán realizar acciones sobre ella en tiempo de ejecución.
Una desventaja podría ser que en este momento no tienen la implementación necesaria para la construcción de redes neuronales convolucionales, aunque es una característica que se pretende añadir en el futuro.
Otro de los aspectos a tener en cuenta son los distintos parámetros a utilizar en las redes neuronales como son las funciones de activación. AIfES proporciona las equivalencias de varias funciones de activación que podrán ser utilizadas a la hora de montar la red neuronal. Se dispondrá de funciones de activación como la ReLU, la Sigmoide o la Softmax entre otras. Además, también se tienen funcionalidades asociadas al optimizador, donde se incluye los optimizadores Adam, y el descenso de gradiente estocástico así como herramientas para las pérdidas asociadas con el error cuadrático medio.
Para más información sobre AIfES se puede visitar su página oficial: https://www.ims.fraunhofer.de/en/Business-Unit/Industry/Industrial-AI/Artificial-Intelligence-for-Embedded-Systems-AIfES.html.
TensorFlowLite
Cuando hablamos de trabajar con inteligencia artificial, una herramienta muy utilizada en este ámbito es TensorFlow. TensorFlow es una biblioteca open source desarrollada por Google para la implementación y entrenamiento de modelos de aprendizaje automático. Proporciona a los desarrolladores funciones que permiten crear redes neuronales y otros modelos para resolver una amplia variedad de problemas relacionados con el aprendizaje automático, como clasificación, detección de personas y objetos, reconocimiento de voz, etc.
Debido a la variedad de herramientas que ofrece TensorFlow, sería ideal utilizar esta para crear redes neuronales en sistemas empotrados. Pues bien, existe una solución para utilizar TensorFlow en este tipos de sistemas, la cual es TensorFlow Lite.
TensorFlow Lite es una versión ligera y optimizada de TensorFlow. A diferencia de TensorFlow, el cual está diseñado para su ejecución en dispositivos con una gran potencia de computación, TensorFlow Lite, también denominado TF Lite, está optimizado para ejecutarse en dispositivos embebidos y dispositivos móviles. Estos dispositivos tendrán una capacidad de cómputo, consumo de energía y memoria limitada.
A la hora de trabajar con TF Lite se suele comenzar creando el modelo de la red neuronal, definiendo los datos de entrenamiento para posteriormente entrenar la red y ajustar los parámetros del modelo. Para ello, se utiliza el lenguaje de programación Python aprovechando las características originales de Tensorflow y su implementación con otras herramientas, como puede ser Keras.
El siguiente paso es la conversión del modelo realizado al formato TF Lite. Una vez se tiene el modelo entrenado se puede convertir al formato TensorFlow Lite utilizando las herramientas proporcionadas por esta biblioteca. Esto implica la conversión de la estructura de datos y parámetros del modelo a un formato que sea compatible con TF Lite. De esta forma, el modelo será compatible con los dispositivos donde se ejecutará el modelo.
Finalmente, una vez el modelo de la red neuronal ha sido convertido, se puede pasar éste al lenguaje que se está utilizando, como por ejemplo C++. Gracias a la herramienta “xxd” podemos convertir el modelo .tflite a un .h, que se integra en un sistema embebido.
Destacar que TensorFlow Lite tiene limitaciones en cuanto a los dispositivos donde puede ser utilizado. Un ejemplo es la compatibilidad con sistemas empotrados, el cual puede ser utilizado con cualquiera de los siguientes:
- Arduino Nano 33 BLE Sense
- SparkFun Edge
- Kit de desarrollo STM32F746
- EdgeBadge de Adafruit
- Kit TensorFlow Lite de Adafruit para microcontroladores
- Circuit Playground Bluefruit de Adafruit
- ESP32-DevKitC de Espressif
- ESP-EYE de Espressif
- Wio Terminal: ATSAMD51
- Placa de desarrollo Himax WE-I Plus EVB Endpoint AI
- Plataforma de desarrollo de software Synopsys DesignWare ARC EM
- Sony Spresense
EloquentTinyML
En el apartado anterior se habló de TensorFlow Lite, una solución bastante útil para implementar redes neuronales en sistemas embebidos. Sin embargo, trabajar con esta biblioteca trae consigo una cierta complejidad a la hora de implementar el modelo que se requiere. Es por ello que, ante este problema, se desarrolló otra de las posibles soluciones para trabajar con IA en dispositivos embebidos, que es la librería EloquentTinyML.
EloquentTinyML proporciona una forma más accesible y sencilla de utilizar TF Lite para trabajar con redes neuronales. El procedimiento a seguir es el mismo, se comienza creando la red neuronal en lenguaje Python con TensorFlow. Posteriormente y una vez se tiene la red entrenada, se porta al lenguaje en el que se desea trabajar, gracias a las funciones implementadas por la biblioteca de EloquentTinyML.
Finalmente, con el modelo portado este podría ser utilizado para su implementación en sistemas embebidos.
Conclusiones
En este post hemos podido ver algunas soluciones que nos permitirán realizar proyectos de inteligencia artificial que corren en sistemas embebidos. Esta propiedad es muy interesante ya que, actualmente, se cuenta con muchas aplicaciones que tienen su base en estos sistemas. La inclusión de inteligencia artificial puede añadir a estas aplicaciones funcionalidades que hasta ahora podían ser complicadas de implementar o tenían que ser ejecutadas en otros equipos. Y es que el incluir por ejemplo redes neuronales en dispositivos embebidos permitirá implementar soluciones basadas en clasificación de objetos, identificación de personas, reconocimiento de voz, etc.
Entre las soluciones disponibles se puede destacar TensorFlow Lite o la librería EloquentTinyML, que permitirán portar modelos de redes neuronales que se han realizado con lenguaje Python. Asimismo, podrán ser ejecutados en sistemas empotrados, teniendo en cuenta que el sistema sea compatible con la librería de Tensorflow Lite.
Otra solución puede ser AIfES ya que, pese a que puede ser más complejo a la hora de implementar, por ejemplo, una red neuronal, ayuda a que el modelo construido pueda ser continuamente actualizable. Además de que aporta compatibilidad con sistemas que TensorFlow Lite no soporta.
Estas soluciones comentadas permiten poder ejecutar, por ejemplo, redes neuronales en sistemas que, pese a que no tienen una gran capacidad de cómputo, podrán ejecutarlo sin problemas. No obstante, hay que destacar que además del límite en cuanto a procesamiento de estos dispositivos, habrá que tener en cuenta el límite de memoria. Estos sistemas no suelen tener una gran capacidad de memoria, y en función de la red neuronal que se quiera implementar, ésta no podrá ser ejecutada por problemas de memoria.
Aun así, la posibilidad de integrar IA en sistemas embebidos se plantea como una ventaja a tener muy en cuenta. Con su utilización se podrán desarrollar soluciones mucho más completas y con más funcionalidades, que podrán ser aplicables en distintos campos como podría ser el de IoT o cualquier sector que haga uso de dispositivos embebidos.