IoT et IA

Qu'est-ce que le TinyML ? Le machine learning sur microcontrôleurs expliqué

Le TinyML, c'est le machine learning sur des microcontrôleurs qui fonctionnent avec quelques milliwatts et kilo-octets. Cet article présente les contraintes, les frameworks, des cas d'usage concrets et pourquoi ces petits appareils publient des résultats d'inférence compacts via MQTT.

Illustration de ce qu'est le TinyML, avec une carte microcontrôleur exécutant un minuscule réseau de neurones et publiant un petit message d'inférence via MQTT
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Qu'est-ce que le TinyML ? C'est le machine learning qui s'exécute sur des microcontrôleurs, la même famille de puces que celles qui équipent les thermostats, les objets portables et les nœuds de capteurs, avec une mémoire qui se mesure en kilo-octets et une consommation en milliwatts. Cet article explique ce qui distingue le TinyML des autres formes d'edge AI, quels frameworks et quelles cartes utiliser, les cas d'usage où il excelle, et pourquoi ces appareils doivent publier des résultats d'inférence compacts via MQTT plutôt que des données brutes de capteurs.

Le TinyML en termes simples

Un microcontrôleur (MCU) est un petit ordinateur sur une seule puce : un processeur, un peu de RAM, une mémoire flash et des périphériques pour les capteurs. Il n'y a pas de système d'exploitation au sens d'un ordinateur de bureau, pas de runtime Python et souvent pas d'unité de calcul en virgule flottante. Le TinyML désigne l'ensemble des techniques qui rendent un réseau de neurones entraîné assez petit et efficace pour tourner dans cet environnement, en continu, souvent sur batterie.

Le résultat est un capteur qui comprend ce qu'il mesure. Au lieu de diffuser de l'audio brut, un nœud microphone TinyML signale « mot-clé détecté ». Au lieu d'échantillonner les vibrations à haute fréquence et de les envoyer, un nœud moteur signale « balourd, confiance 0,9 ». Le TinyML est un sous-ensemble de l'edge AI ; pour une vue d'ensemble préalable, lisez ce qu'est l'edge AI.

Les contraintes qui définissent le TinyML

Ressource Appareil TinyML typique Appareil edge Linux typique
RAM Quelques dizaines à centaines de Ko, parfois quelques Mo de PSRAM Plusieurs gigaoctets
Stockage Quelques centaines de Ko à quelques Mo de flash Plusieurs gigaoctets
Calcul Simple ou double cœur, quelques dizaines à centaines de MHz CPU multicœur en GHz, parfois GPU/NPU
Consommation Quelques milliwatts ; peut fonctionner sur pile bouton ou petite batterie Plusieurs watts
Logiciel Bare metal ou RTOS, C/C++ OS complet, Python, conteneurs
Taille du modèle De l'ordre du Ko Du Mo au Go

Ces limites déterminent chaque choix de conception :

  1. Les modèles doivent être petits. De petits réseaux convolutifs ou denses comptant quelques dizaines de milliers de paramètres sont typiques.
  2. Arithmétique entière. Les modèles sont quantifiés en entiers 8 bits, ce qui divise leur taille par environ quatre par rapport aux flottants 32 bits et s'exécute rapidement sur des puces sans unité flottante ou dotées d'instructions SIMD.
  3. Mémoire statique. Aucune allocation dynamique pendant l'inférence. Les frameworks utilisent un bloc de mémoire fixe (l'arène de tenseurs) dimensionné à la compilation.
  4. L'extraction de caractéristiques compte. Les signaux bruts sont convertis en caractéristiques compactes, comme un spectrogramme pour l'audio ou la valeur efficace et les pics spectraux pour les vibrations, avant d'être présentés au modèle.

Comment construire un modèle TinyML

Le flux de travail reprend celui de tout projet de ML, avec une compression supplémentaire à la fin :

  1. Collectez des données de capteurs étiquetées depuis l'appareil réel, dans l'environnement réel.
  2. Concevez les caractéristiques et un petit modèle, généralement avec TensorFlow/Keras ou une plateforme comme Edge Impulse.
  3. Entraînez et validez sur une station de travail ou dans le cloud.
  4. Convertissez et quantifiez le modèle, par exemple en fichier .tflite entièrement quantifié en int8.
  5. Intégrez le modèle au firmware sous forme de tableau d'octets et liez le runtime d'inférence.
  6. Mesurez sur l'appareil : temps d'inférence, RAM utilisée (taille de l'arène), flash utilisée et précision.
  7. Itérez. Réduire la fenêtre d'entrée ou le nombre de caractéristiques aide souvent davantage que réduire le réseau.

Frameworks et outils TinyML

  • TensorFlow Lite for Microcontrollers (désormais intégré à la famille LiteRT de Google) : le runtime ouvert le plus utilisé. Vous chargez un modèle flatbuffer, n'enregistrez que les opérateurs nécessaires et exécutez un interpréteur sur une arène statique. Consultez le guide de démarrage TensorFlow Lite Micro.
  • Edge Impulse : une plateforme de bout en bout pour la collecte de données, l'ingénierie des caractéristiques, l'entraînement et l'export d'une bibliothèque C++ ou Arduino pour une carte cible. Consultez le tutoriel Edge Impulse MQTT.
  • Bibliothèques des fabricants : Arm CMSIS-NN fournit des noyaux optimisés pour Cortex-M ; Espressif propose ESP-DL et un portage de TensorFlow Lite Micro optimisé pour l'ESP32 (esp-tflite-micro) ; d'autres fondeurs ont leurs propres chaînes d'outils.
  • Les bibliothèques Arduino et PlatformIO facilitent la combinaison de l'inférence avec les pilotes de capteurs et la connectivité réseau sur les cartes grand public.

Cartes TinyML populaires

Les cartes ESP32-S3 sont un choix courant pour le TinyML connecté, car elles réunissent dans une puce bon marché des instructions vectorielles utiles aux noyaux de réseaux de neurones, une PSRAM optionnelle et le Wi-Fi intégré. L'Arduino Nano 33 BLE Sense et les cartes Cortex-M4 similaires dotées de capteurs embarqués sont appréciées pour l'apprentissage, et la famille Raspberry Pi Pico offre une option Cortex-M à bas coût. Les cartes sans Wi-Fi peuvent tout de même participer à un système IoT en envoyant leurs résultats par liaison série ou Bluetooth à une passerelle. Pour une comparaison directe entre classes d'appareils, accélérateurs compris, consultez la comparaison du matériel edge AI.

Ce que le TinyML fait bien

  • Détection de mots-clés et d'événements sonores : mots de réveil, alarmes, bris de vitre, bruits anormaux de machines.
  • Reconnaissance de mouvements et de gestes à partir d'accéléromètres et de gyroscopes dans les objets portables et les outils.
  • Maintenance prédictive : classification des signatures vibratoires sur les moteurs, pompes et ventilateurs.
  • Vision simple : présence de personnes, lecture de chiffres ou « objet présent » sur des caméras basse résolution avec des cartes équipées de PSRAM.
  • Mesures environnementales : déduction de l'occupation ou d'anomalies à partir des profils de gaz, de température et d'humidité.

Le TinyML ne convient pas aux tâches qui exigent de grands vocabulaires, des images haute résolution, un long contexte ou des changements fréquents de modèle. Celles-ci relèvent d'une passerelle ou du cloud.

Pourquoi les appareils TinyML publient des résultats compacts via MQTT

Les nœuds TinyML connectés font face à deux limites simultanées : une puissance de calcul minime et un temps radio coûteux. Sur les appareils à batterie, la radio consomme souvent bien plus d'énergie que l'inférence. N'envoyer un message court que lorsqu'il se passe quelque chose d'intéressant est la plus grosse économie d'énergie et de bande passante possible.

MQTT correspond à ce schéma. La surcharge du protocole est faible, des bibliothèques clientes comme PubSubClient et esp-mqtt tournent sans difficulté sur les MCU, et le broker diffuse chaque message à tous ceux qui en ont besoin. Un message d'inférence TinyML typique fait bien moins de 200 octets :

{"dev":"fan-12","m":"vib-v2","label":"imbalance","p":0.91,"ms":7}

Les clés courtes sont un choix délibéré sur les appareils contraints. Associez-les à un topic qui porte le contexte, comme plant1/hvac/ahu3/fan-12/inference, et à un topic de statut en retained avec un Last Will, pour que les tableaux de bord sachent quand le nœud se déconnecte. Côté réception, un broker MQTT permet aux tableaux de bord, aux alertes et à l'analytique cloud de s'abonner sans que l'appareil ait connaissance de leur existence.

Un schéma de publication minimal pour microcontrôleurs

La boucle principale sur un ESP32 avec PubSubClient ressemble à ceci. L'appel d'inférence est un espace réservé ; le tutoriel TinyML sur ESP32 présente un modèle complet et fonctionnel.

// Called after each inference; publishes only on change or every 60 s.
void reportResult(PubSubClient &mqtt, const char *topic, const char *label, float p) {
  static char lastLabel[24] = "";
  static unsigned long lastSent = 0;
  if (strcmp(label, lastLabel) == 0 && millis() - lastSent < 60000) return;

  char payload[96];
  snprintf(payload, sizeof(payload),
           "{\"dev\":\"fan-12\",\"m\":\"vib-v2\",\"label\":\"%s\",\"p\":%.2f}", label, p);
  if (mqtt.publish(topic, payload)) {
    strncpy(lastLabel, label, sizeof(lastLabel) - 1);
    lastSent = millis();
  }
}

Vous pouvez tester un nœud comme celui-ci avec le serveur MQTT public gratuit broker.connectmq.com sur le port 1883, avec n'importe quel client ID unique et un préfixe de topic unique. N'oubliez pas que la zone publique est lisible par tous : passez donc les déploiements réels sur des identifiants privés, par exemple un broker ConnectMQ avec TLS sur le port 8883.

Erreurs TinyML courantes

  1. S'entraîner uniquement sur des données de laboratoire. Le montage, la température et le bruit de fond sur le terrain modifient le signal.
  2. Ignorer la taille de l'arène. Si AllocateTensors() échoue, l'arène est trop petite ; mesurez le besoin réel et ajoutez une marge.
  3. Des opérateurs non pris en charge. Toutes les couches TensorFlow n'ont pas de noyau pour microcontrôleur. Vérifiez les opérateurs du modèle converti avant de concevoir votre architecture autour d'eux.
  4. Publier chaque inférence. Un modèle qui s'exécute dix fois par seconde ne doit pas publier dix messages par seconde ; agrégez ou publiez sur changement.
  5. Aucune version de modèle. Incluez-la dans chaque message pour pouvoir retracer le comportement après une mise à jour à distance.

Pour comprendre la place du TinyML dans un système complet avec analytique cloud et agents LLM, lisez le guide IA et IoT.

Démarrer avec ConnectMQ

Une fois votre nœud TinyML opérationnel sur l'établi, offrez-lui un environnement sécurisé. ConnectMQ est un broker MQTT managé avec TLS sur le port 8883, la prise en charge de MQTT 3.1.1 et 5.0 et un explorateur de topics en direct pour voir arriver les messages d'inférence. Créez un broker avec l'offre gratuite Serverless sur app.connectmq.com, sans carte bancaire.

Questions fréquentes

À quoi sert le TinyML ?

Le TinyML sert aux tâches de détection permanente sur des appareils basse consommation, comme la détection de mots-clés, la reconnaissance de gestes, la détection de pannes à partir des vibrations et la détection de présence simple.

Un ESP32 peut-il exécuter du TinyML ?

Oui. La famille ESP32, en particulier l'ESP32-S3 avec ses instructions vectorielles et ses options de PSRAM, exécute des modèles TensorFlow Lite Micro et Edge Impulse et peut publier les résultats en Wi-Fi via MQTT.

Le TinyML est-il la même chose que l'edge AI ?

Le TinyML est une partie de l'edge AI centrée sur les microcontrôleurs. L'edge AI couvre aussi des appareils plus grands comme les ordinateurs monocartes, les accélérateurs et les modules GPU.

Les modèles TinyML ont-ils besoin d'Internet ?

Non. L'inférence s'exécute entièrement sur l'appareil. La connectivité n'est nécessaire que pour transmettre les résultats, recevoir une configuration ou mettre à jour le modèle.

Articles liés

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.