071 — Sensores, series y percepción en el borde
Parte: 05 — Lenguaje, visión, audio e IA multimodal
Nivel: avanzado · Horas estimadas: 6
Laboratorio: robotics · Estado: EXECUTABLE_CORE
🎯 Propósito
Comprender sensores, series y percepción en el borde dentro de la evolución de la inteligencia artificial, implementar un experimento mínimo verificable y distinguir qué parte constituye evidencia frente a una afirmación todavía no comprobada.
📚 Resultados de aprendizaje
Al finalizar podrás:
- Explicar sensores, series y percepción en el borde usando los conceptos
sensores,edge,latencia,fusión. - Ejecutar el laboratorio con una semilla explícita y revisar su contrato JSON.
- Identificar al menos un supuesto, una limitación y un riesgo de aplicación.
- Comparar el enfoque con la etapa anterior de la ruta de aprendizaje.
- Producir una evidencia reproducible y una conclusión que no exceda los datos.
🧩 Conceptos centrales
sensores, edge, latencia, fusión
🗺️ Ubicación en el mapa de la IA
La percepción no termina en cámaras y micrófonos: acelerómetros, giroscopios, sensores de temperatura, presión o corriente producen series temporales que también se clasifican y se fusionan. La novedad de esta clase es dónde ocurre la inferencia: en el borde (edge) — el propio dispositivo — por latencia, energía, costo y privacidad. El TinyML lleva redes neuronales a microcontroladores con kilobytes de RAM, y conecta esta parte con la robótica (parte 06) y con el asistente del proyecto final (072).
📖 Fundamentos
⏱️ Ventanas deslizantes
Un flujo continuo de sensor no se clasifica entero: se corta en ventanas de tamaño fijo
w que avanzan con un salto h (hop). Con solapamiento (h < w) se generan más ejemplos
y no se pierden eventos que caen en el borde de una ventana.
n_ventanas = 1 + ⌊(T − w) / h⌋ (T, w, h en muestras)
Cada ventana recibe una etiqueta (la actividad dominante) y se convierte en un ejemplo de
entrenamiento. Decisiones críticas: w debe cubrir el fenómeno (un paso al caminar ~1 s;
una caída ~2 s) y h fija la latencia de decisión — con hop de 1 s, la respuesta llega
como pronto 1 s después.
📈 Features temporales clásicas
Antes (o en lugar) de una red profunda, cada ventana se resume con estadísticos baratos de calcular en un microcontrolador:
- Dominio del tiempo: media, desviación estándar, RMS (
√(Σx²/n)), mínimo/máximo, cruces por cero (ZCR), correlación entre ejes del acelerómetro. - Dominio de la frecuencia: energía por banda de la FFT, frecuencia dominante — caminar concentra energía cerca de 1–2 Hz, correr más arriba.
Un clasificador clásico (árbol, SVM) sobre estas features sigue siendo un baseline duro de batir en reconocimiento de actividad humana (HAR), con una fracción mínima del cómputo.
🔢 Cuantización para el borde
La cuantización mapea pesos y activaciones de float32 a enteros de 8 bits:
x ≈ s · (q − z) q = clamp( round(x/s) + z , −128, 127 )
con s (escala) y z (punto cero) elegidos por tensor o por canal. En el esquema
simétrico, z = 0 y s = max|x| / 127. Beneficios: 4× menos memoria, aritmética entera
(más rápida y eficiente en energía, disponible en MCU sin FPU). Costo típico: ~1 punto de
exactitud con cuantización post-entrenamiento; el entrenamiento consciente de
cuantización (QAT) simula el redondeo durante el entrenamiento y recupera casi todo.
🤏 TinyML: inferencia en microcontroladores
Un MCU típico (Cortex-M4) ofrece ~64–256 kB de RAM, ~1 MB de flash y consumo de miliwatts: el modelo completo (pesos + activaciones + buffers) debe caber ahí. Runtimes como TensorFlow Lite Micro / LiteRT interpretan el modelo cuantizado sin sistema operativo. Técnicas complementarias: pruning (podar pesos), distillation (entrenar un modelo chico imitando a uno grande) y duty-cycling (dormir el sensor y despertar ante un umbral — p. ej., un detector de palabra clave de 20 kB que despierta al modelo grande). A cambio: sin reentrenamiento local, deriva de sensores con el tiempo, y depurar en el dispositivo es difícil.
🔒 Por qué en el borde y no en la nube
Latencia (sin ida y vuelta de red: milisegundos en vez de cientos), energía (radio apagada: transmitir suele costar más que computar), autonomía (funciona sin conectividad) y privacidad: el audio o el movimiento crudos nunca salen del dispositivo, solo la decisión ("cayó / no cayó").
🧮 Ejemplo trabajado
Ventanas. Acelerómetro a 50 Hz durante 10 s → T = 500 muestras. Ventana de 2 s (w = 100) con hop de 1 s (h = 50):
n = 1 + ⌊(500 − 100) / 50⌋ = 1 + 8 = 9 ventanas
Features de una ventana corta. Serie [2, −2, 2, −2, 2, −2]:
media = 0 RMS = √(Σx²/6) = √(24/6) = 2 cruces por cero = 5
Media nula pero RMS alta y ZCR alta: firma de vibración, no de reposo — por eso la media sola no discrimina.
Cuantización int8 simétrica. Pesos en [−2, 2] → s = 2/127 ≈ 0.01575. Para x = 0.9: q = round(0.9/0.01575) = round(57.14) = 57; dequantizado: 57·0.01575 ≈ 0.898; error ≈ 0.002. Memoria: un modelo de 40 000 parámetros pasa de 160 kB (float32) a 40 kB (int8): entra en un MCU de 64 kB de RAM que antes no podía alojarlo.
📊 Propiedades y comparación
| Dónde infiere | Latencia típica | Energía | Privacidad | Tamaño de modelo viable |
|---|---|---|---|---|
| Nube (GPU) | 100–1000 ms (red incluida) | Alta (transmisión + datacenter) | Datos crudos salen del dispositivo | Sin límite práctico |
| Edge local (móvil/Jetson) | 10–100 ms | Media | Datos quedan cerca | Cientos de MB |
| Microcontrolador (TinyML) | 1–50 ms | mW (batería de meses) | Datos nunca salen | 10 kB – 1 MB |
flowchart LR
A[Sensor 50 Hz<br/>acelerómetro] --> B[Ventana deslizante<br/>w=100, h=50]
B --> C[Features<br/>RMS, ZCR, FFT]
C --> D[Modelo cuantizado int8<br/>en MCU 64 kB]
D --> E{Decisión local}
E -->|evento| F[Transmitir solo<br/>la alerta]
E -->|nada| G[Seguir durmiendo<br/>duty-cycle]
⚠️ Errores conceptuales frecuentes
- "Más frecuencia de muestreo siempre ayuda." Duplica memoria, cómputo y energía; si el fenómeno vive bajo 10 Hz (movimiento humano), muestrear a 500 Hz solo añade ruido y gasto. La frecuencia se elige por el contenido espectral del fenómeno (Nyquist).
- "La cuantización arruina el modelo." La caída típica post-entrenamiento es ~1 punto, y QAT la reduce más. El error conceptual inverso también existe: hay capas sensibles (primeras/últimas) que a veces conviene dejar en mayor precisión.
- "Evalúo separando ventanas al azar." Con solapamiento, ventanas casi idénticas del mismo gesto caen en train y test: exactitud inflada. La partición correcta es por sujeto o por sesión, nunca por ventana.
- "La exactitud del paper se traslada al dispositivo." Cambian el sensor, su posición en el cuerpo, la calibración y la deriva térmica; sin datos del despliegue real, el número del benchmark es una cota optimista.
- "TinyML es el mismo modelo pero más chico." Es otro régimen de diseño: memoria de activaciones, aritmética entera, sin SO, sin reentrenamiento local; la arquitectura se elige por huella de memoria pico, no solo por FLOPs.
🚀 Del aprendizaje a la operación
Un sistema de percepción en el borde añade: calibración por unidad fabricada y compensación de deriva, actualización de modelos por lotes (OTA) con rollback, telemetría agregada que respete la privacidad (contadores, no señal cruda), pruebas de batería en condiciones reales de duty-cycle, y un plan para el caso "el modelo se equivoca y no hay nube que lo corrija": umbrales conservadores y confirmación multi-ventana antes de alertar.
🧪 Laboratorio
python lab.py
El laboratorio llama a ai_evolution.labs.run_lab("robotics"). Esta
decisión evita 183 implementaciones divergentes: cada clase tiene un entrypoint
propio, pero los motores didácticos se prueban como una biblioteca común.
🔍 Evidencia esperada
- tipo de laboratorio y semilla;
- entradas o decisiones observables;
- resultado estructurado;
- lista
evidencecon hechos que pueden inspeccionarse; - lista
limitationsque impide presentar la demo como producción.
📓 Notebooks
- 📓
notebook.ipynb: recorrido guiado con la materia resumida. - ✍️
notebook_student.ipynb: ejercicios para resolver. - ✅
notebook_solution.ipynb: solución de referencia explicada.
📝 Evaluación
| Criterio | Peso |
|---|---|
| Comprensión conceptual | 25 % |
| Ejecución reproducible | 25 % |
| Interpretación basada en evidencia | 25 % |
| Riesgos, límites y mejora propuesta | 25 % |
Consulta assessment.md para preguntas y criterio de aceptación.
⚠️ Errores comunes
| Síntoma | Causa probable | Corrección |
|---|---|---|
| El código corre, pero no hay conclusión | Se confundió ejecución con aprendizaje | Explica qué demuestra y qué no demuestra |
| El resultado cambia sin explicación | No se registró semilla o configuración | Conserva semilla, versión y parámetros |
| Se promete uso real | Se extrapoló desde una demo educativa | Declara entorno, datos, límites y revisión humana |
| Se copia una métrica aislada | No existe baseline ni costo de error | Añade comparación y criterio de decisión |
❓ Preguntas frecuentes
¿Debo usar una API comercial?
No. El núcleo funciona localmente. Las extensiones LIVE se documentan por separado.
¿El laboratorio representa una implementación industrial?
No por sí solo. Enseña el contrato y el patrón; producción exige integración,
seguridad, observabilidad, pruebas y operación.
¿Dónde profundizo?
Revisa las especializaciones enlazadas en el README raíz y la ruta siguiente.
🔗 Referencias
- Jacob, B. et al. (2017). "Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference" — arXiv:1712.05877 — uso: fuente primaria del mecanismo estudiado
- Banbury, C. et al. (2021). "MLPerf Tiny Benchmark" — arXiv:2106.07597 — uso: fuente primaria del mecanismo estudiado
- Warden, P. y Situnayake, D. (2019). TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers. O'Reilly. — uso: desarrollo extendido del tema
- Documentación de LiteRT / TensorFlow Lite (cuantización e inferencia en dispositivo) — ai.google.dev/edge/litert — uso: referencia consultada en su fuente original
- UCI Machine Learning Repository. Human Activity Recognition Using Smartphones — archive.ics.uci.edu/dataset/240 — uso: referencia consultada en su fuente original
📜 Papers que fundamentan esta clase
Bloque generado por
python scripts/link_papers_to_classes.py. La fuente espapers/catalog/papers.json.
| Paper | Año | Qué desbloqueó | Miniatura |
|---|---|---|---|
| P121 · MobileNets: redes convolucionales eficientes para visión en dispositivos móviles | 2017 | Descompone la convolución en dos pasos y convierte el compromiso entre precisión y coste en dos perillas explícitas que el ingeniero elige. | notebook |
Cada ficha explica el problema anterior, la matemática mínima, los límites y los errores de atribución más frecuentes. Para leerlas con método: cómo leer un paper de IA · anexos matemáticos.
📚 Bibliografía de apoyo
Bloque generado por
python scripts/link_sources_to_classes.py. Cada obra lleva su localizador verificado ensources/bibliography.json.
Los papers dicen de dónde salió el mecanismo. Estas obras lo desarrollan con el espacio que una clase no tiene: teoría completa, demostraciones y ejercicios.
| Obra | Edición | Localizador | Papel en esta clase |
|---|---|---|---|
| Warden, P. y Situnayake, D. — TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers | 2019 | sin localizador verificado | citada en las referencias de esta clase |
| Jurafsky, Daniel y Martin, James H. — Speech and Language Processing | 2.ª (la 3.ª circula como borrador abierto sin ISBN) · 2009 | ISBN 9780131873216 · web de la obra | obra de referencia de la parte 05 · lenguaje y habla |
⬅️ Clase anterior
070 — Fusión multimodal y representación conjunta
➡️ Siguiente clase
072 — Proyecto: asistente multimodal accesible
📝 Evaluación completa
❓ Preguntas
- Define sensores, series y percepción en el borde sin usar una marca o framework como definición.
- Explica la relación entre sensores, edge, latencia, fusión.
- Ejecuta
lab.pydos veces con la misma semilla. ¿Qué debe conservarse? - Identifica una afirmación permitida y una afirmación exagerada sobre el resultado.
- Propón una prueba negativa o un caso límite.
🏆 Reto verificable
Amplía el resultado del laboratorio con una clave student_extension que incluya:
- el supuesto que estás probando;
- una medición o comprobación;
- la conclusión;
- una limitación.
✅ Criterio de aceptación
- [ ]
lab.pytermina con código 0. - [ ] El resultado contiene
kind,seed,evidenceylimitations. - [ ] La extensión no modifica el comportamiento de otras clases.
- [ ] La interpretación referencia datos impresos por el laboratorio.
- [ ] Se declara al menos un riesgo o condición de no uso.