Introducción a la IA perimetral de Nordic
Fundamentos de aprendizaje automático en dispositivos embebidos
El aprendizaje automático representa un enfoque donde los sistemas extraen patrones directamente de datos en lugar de seguir reglas programadas explícitamente. En el contexto de reconocimiento de gestos, esto contrasta marcadamente con métodos tradicionales: mientras una solución clásica requeriría codificar condiciones como "si la aceleración en X supera el umbral Y, entonces...", el enfoque de aprendizaje automático procesa volúmenes de datos etiquetados para descubrir automáticamente las características distintivas de cada movimiento.
Las redes neuronales artificiales constituyen la arquitectura predominante para estas tareas. Su funcionamiento se basa en transformaciones matemáticas secuenciales: cada capa recibe un vector de entrada, lo multiplica por una matriz de pesos sinápticos, suma un vector de sesgos, y aplica una función de activación no lineal. La composición de estas operaciones permite aproximar funciones complejas que relacionan señales sensoriales con categorías de gestos.
La fase de inferencia en el dispositivo implica evaluar esta red previamente entrenada. Para ocho categorías de gestos, la salida final es un vector de probabilidades que suman unidad, donde el índice de mayor valor indica la clasificación predicha.
Entrenamiento y optimización de modelos
El proceso de entrenamiento ajusta iterativamente los parámetros del modelo (pesos y sesgos) minimizando una función de pérdida que cuantifica la discrepancia entre predicciones y etiquetas verdaderas. Es fundamental reservar un subconjunto de datos como conjunto de prueba para evaluar la capacidad de generalización, detectando sobreajuste cuando el modelo memoriza ejemplos específicos sin capturar patrones generalizables.
Para despliegue en microcontroladores, se aplica cuantificación post-entrenamiento, reduciendo la precisión de representación de 32 bits en punto flotante a 8 bits enteros. Esta compresión sacrifica mínima precisión a cambio de reducciones sustanciales en latencia y consumo energético.
Ecosistema Nordic Edge AI
Nordic ofrece dos vías tecnológicas para implementación de inferencai en dispositivos de borde:
| Plataforma | Arquitectura | Aplicaciones óptimas |
|---|---|---|
| Neuton | CPU Cortex-M | Series temporales de sensores inerciales, ambientales |
| Axon NPU | Acelerador hardware (nRF54LM20B) | Audio, video de baja resolución, flujos de alta frecuencia |
Neuton emplea un algoritmo de crecimiento estructural que construye redes neuronales dispersas de manera automática, eliminando conexiones redundantes sin intervención manual de hiperparámetros. El resultado son topologías irregulares con conectividad cruzada entre capas no adyacentes, significativamente más compactas que arquitecturas densas convencionales.
Axon NPU proporciona aceleración hardware para operaciones tensoriales fundamentales: convoluciones, agrupamiento, transformadas FFT, y operaciones DSP vectoriales. El controlador principal configura el acelerador, despacha tareas de inferencia, y puede entrar en modo de bajo consumo mientras el NPU opera autónomamente mediante DMA. Rendimiento representativo: detección de palabras clave en 4.5 ms consumiendo ~40 µJ.
El Nordic Edge AI Lab (ai.lab.nordicsemi.com) funciona como plataforma de entrenamiento en la nube, procesando datasets en formato CSV para generar modelos optimizados para ambas arquitecturas.
Preparación del entorno de desarrollo
Requisitos de hardware
El tutorial emplea Nordic Thingy:53 (SoC nRF5340), integrando acelerómetro de tres ejes y giroscopio. Alternativas compatibles incluyen nRF54L15 TAG y nRF54LM20DK con placa de expansión de sensores.
Configuración del SDK
El Edge AI Add-on requiere nRF Connect SDK v3.3.0-preview2. Para entornos con conectividad limitada a GitHub, se recomienda instalación incremental sobre una versión base existente:
# Iniciar shell de herramientas Nordic
nrfutil toolchain-manager launch --ncs-version v3.2.4 --terminal
# Clonar repositorio del add-on
cd /ruta/ncs/v3.2.4
git clone -b v2.0.0 https://github.com/nrfconnect/sdk-edge-ai edge-ai
# Reconfigurar manifiesto de west
west config manifest.path edge-ai
# Sincronizar dependencias (repetir si falla por red)
west update
Tras completar la sincronización, renombrar el directorio para distinguirlo de instalaciones estándar de NCS.
Adquisición y preparación de datos
Firmware de captura
El ejemplo edge-ai/applications/gesture_recognition admite modo de recolección de datos mediante configuración específica:
# Crear configuración alternativa
cp configuration/thingy53_nrf5340_cpuapp/prj.conf \
configuration/thingy53_nrf5340_cpuapp/prj_dc.conf
# Añadir al nuevo archivo:
# CONFIG_DATA_COLLECTION_MODE=y
# CONFIG_BLE_MODE_NONE=y
# Compilar
west build -d build_dc --pristine \
--board thingy53/nrf5340/cpuapp \
-- -DCONF_FILE="prj_dc.conf"
Tras programación, el dispositivo transmite por UART (115200 baudios) lecturas de seis canales a 100 Hz: accel_x,accel_y,accel_z,gyro_x,gyro_y,gyro_z.
Diseño del vocabulario de gestos
El sistema reconoce ocho categorías: seis gestos definidos, estado de reposo, y categoría residual para movimientos no clasificados.
| Categoría | Descripción |
|---|---|
| IDLE | Dispositivo en reposo estable |
| UNKNOWN | Movimientos fuera del vocabulario |
| Deslizar derecha | Movimiento horizontal rápido → |
| Deslizar izquierda | Movimiento horizontal rápido ← |
| Doble golpe | Dos impactos consecutivos |
| Doble toque pulgar | Taps articulares específicos |
| Rotación horaria | Giro continuo en sentido horario |
| Rotación antihoraria | Giro continuo en sentido antihorario |
Protocolo de captura
Recomendaciones metodológicas:
- Preceder cada gesto con 3-5 segundos de inactividad
- Gestos discretos (deslizamientos, golpes): duración 1-2 segundos, separación 1 segundo
- Gestos continuos (rotaciones): variar duración y velocidad angular
- Diversificar intensidad, ángulo de ejecución, y condición de agarre
- Acumular ~5 minutos por categoría
Los datos crudos se exportan desde terminal serial a archivos CSV individuales por categoría.
Etiquetado y estructuración
Cada archivo requiere preparación:
- Insertar encabezado:
acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,etiqueta - Poblar columna de etiqueta con índice numérico (0-7)
- Remover encabezados individuales antes de consolidación
- Concatenar todos los archivos manteniendo formato UTF-8 consistente
Segmentación de gestos discretos
Para gestos no continuos, es crítico alinear el pico de energía del movimiento con el centro de la ventana de análisis. Nordic proporciona utilidad de segmentación automatizada:
pip install -r requirements.txt
python segment_data_around_peaks.py
Parámetros configurables en el script:
TRAINING_WINDOW_SIZE: muestras por ventana (ej: 100 para 1 segundo a 100 Hz)work_axis: canal sensorial para detección de picosthreshold_coef: multiplicador sobre media para umbral de detección
El algoritmo identifica regiones donde la amplitud RMS supera el umbral, extrayendo subsecuencias centradas en el máximo local.
Entrenamiento en plataforma cloud
Creación de proyecto
En Nordic Edge AI Lab:
- Registrar cuenta y autenticarse
- Crear nueva solución de tipo Clasificación
- Seleccionar framework Neuton
- Cargar
dataset.csvconsolidado - Designar columna objetivo:
class
Configuración de procesamiento de señal
Activar Signal Processing para habilitar ventaneo temporal:
| Parámetro | Entrenamiento | Inferencia |
|---|---|---|
| Tamaño de ventana | 100 muestras | 100 muestras |
| Desplazamiento | 100 (sin solapamiento) | 30 (70% solapamiento) |
El solapamiento en inferencia garantiza que gestos que cruzan límites de ventana no se fragmenten irrecuperablemente, a costa de mayor carga computacional.
Extracción de características
Para reducir dimensionalidad de 600 valores brutos (6 canales × 100 muestras) a vectores manejables:
Estadísticos temporales:
- Desviación estándar: dispersión respecto a la media
- Desviación absoluta media: robustez ante valores atípicos
- Valor cuadrático medio (RMS): energía efectiva de la señal
- Curtosis y asimetría: forma de la distribución de amplitudes
Características de cruce:
- Tasa de cruce por cero: frecuencia de oscilación
- Tasa de cruce por media: simetría temporal
- Tasa de cruce por sigma: eventos de alta magnitud
Descriptores de forma:
- Factor de cresta: relación pico-RMS
- Mobilidad y complejidad de Hjorth: medidas de actividad e irregularidad
- Autocorrelación: periodicidad inherente
Para análisis espectral, la ventana debe ser potencia de 2 entre 128 y 2048 muestras, habilitando:
- Centroide espectral: frecuencia promedio ponderada por energía
- Dispersión espectral: ancho de banda efectivo
- Frecuencias dominantes: picos espectrales significativos
Parámetros de entrenamiento
| Configuración | Valor recomendado |
|---|---|
| Precisión de pesos | Entero 16-bit con conciencia de cuantificación |
| Formato de salida | Punto flotante 32-bit (probabilidades) |
| Detención temprana | Precisión objetivo 0.99 |
Evaluación de resultados
La plataforma presenta:
- Curvas de convergencia: evolución de precisión vs. épocas
- Métricas de recursos: consumo de RAM y Flash por arquitectura objetivo
- Matriz de confusión: tasa de acierto y confusiones entre clases
- Importancia de características: contribución relativa de cada descriptor
Tras validación, descargar paquete con modelo y código de inferencia generado.
Integración y despliegue
Estructura del paquete generado
El archivo descargado contiene directorio nrf_edgeai_generated/ con:
- Arreglos C con pesos cuantificados
- Implementación de extracción de características
- API de inferencia optimizada
Incorporación al firmware
En el proyecto base gesture_recognition:
gesture_recognition/
└── src/
├── nrf_edgeai_generated/ ← Reemplazar con descarga
├── main.c
├── inference_postprocessing.c
└── inference_postprocessing.h
Si las categorías entrenadas difieren del ejemplo, actualizar definiciones en main.c y lógica de post-procesamiento en inference_postprocessing.c.
Operación del dispositivo
El firmware finalizado anuncia como dispositivo HID Bluetooth Low Energy. Tras emparejamiento, traduce gestos reconocidos a atajos de teclado:
Clase predicha: DESLIZAR DERECHA, probabilidad 99%
Tecla HID 32 enviada exitosamente
Clase predicha: ROTACIÓN HORARIA, probabilidad 93%
Tecla HID 1 enviada exitosamente
Ciclo de refinamiento
Para reducir falsos positivos:
- Identificar movimientos espurios que activan clasificaciones incorrectas
- Capturar ejemplos de estos movimientos
- Agregar a categoría UNKNOWN del dataset
- Reentrenar y redistribuir
Tipicamente 2-3 iteraciones producen modelos con robustez aceptable ante variaciones de usuario y entorno.