Créer et convertir des modèles

Les microcontrôleurs disposent d'une RAM et d'un espace de stockage limités, ce qui impose des contraintes sur la taille des modèles de machine learning. De plus, TensorFlow Lite for Microcontrollers est actuellement compatible avec un sous-ensemble limité d'opérations. Par conséquent, toutes les architectures de modèle ne sont pas possibles.

Ce document explique le processus de conversion d'un modèle TensorFlow pour qu'il s'exécute sur des microcontrôleurs. Elle décrit également les opérations prises en charge, et donne des conseils sur la conception et l'entraînement d'un modèle pour qu'il s'adapte à une mémoire limitée.

Pour obtenir un exemple exécutable de bout en bout de création et de conversion d'un modèle, consultez l'exemple Hello World.

Conversion de modèles

Pour convertir un modèle TensorFlow entraîné afin de l'exécuter sur des microcontrôleurs, vous devez utiliser l'API de conversion Python TensorFlow Lite. Le modèle est alors converti en FlatBuffer, ce qui réduit la taille du modèle et le modifie pour utiliser les opérations TensorFlow Lite.

Pour obtenir la taille de modèle la plus faible possible, envisagez d'utiliser la quantification post-entraînement.

Convertir en tableau C

De nombreuses plates-formes de microcontrôleurs ne sont pas compatibles avec les systèmes de fichiers natifs. Le moyen le plus simple d'utiliser un modèle de votre programme consiste à l'inclure en tant que tableau C et à le compiler dans votre programme.

La commande Unix suivante génère un fichier source C contenant le modèle TensorFlow Lite sous la forme d'un tableau char:

xxd -i converted_model.tflite > model_data.cc

Le résultat ressemblera à ce qui suit :

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Une fois le fichier généré, vous pouvez l'inclure dans votre programme. Il est important de remplacer la déclaration de tableau par const pour une meilleure efficacité de la mémoire sur les plates-formes intégrées.

Pour découvrir comment inclure et utiliser un modèle dans votre programme, consultez hello_world_test.cc dans l'exemple Hello World.

Architecture et entraînement du modèle

Lors de la conception d'un modèle destiné à être utilisé sur des microcontrôleurs, il est important de prendre en compte la taille du modèle, la charge de travail et les opérations utilisées.

Taille du modèle

Un modèle doit être suffisamment petit pour tenir dans la mémoire de votre appareil cible avec le reste de votre programme, à la fois en tant que binaire et au moment de l'exécution.

Pour créer un modèle plus petit, vous pouvez utiliser moins de couches dans votre architecture. Toutefois, les petits modèles sont plus susceptibles de souffrir du sous-apprentissage. Ainsi, dans de nombreux cas, il est logique d'essayer d'utiliser le plus grand modèle qui tienne en mémoire. Toutefois, l'utilisation de modèles plus volumineux entraîne également une augmentation de la charge de travail du processeur.

Charge de travail

La taille et la complexité du modèle ont un impact sur la charge de travail. Les modèles volumineux et complexes peuvent entraîner un cycle d'utilisation plus long, ce qui signifie que le processeur de votre appareil passe plus de temps à travailler et moins de temps à rester inactif. Cela augmente la consommation d'énergie et la production de chaleur, ce qui peut poser problème en fonction de votre application.

Assistance pour les opérations

TensorFlow Lite for Microcontrollers est actuellement compatible avec un sous-ensemble limité d'opérations TensorFlow, ce qui a une incidence sur les architectures de modèle qu'il est possible d'exécuter. Nous travaillons à étendre la prise en charge des opérations, à la fois en termes d'implémentations de référence et d'optimisations pour des architectures spécifiques.

Les opérations compatibles sont consultables dans le fichier micro_mutable_ops_resolver.h.