Créer et convertir des modèles

Les microcontrôleurs ont une RAM et un stockage limités, ce qui impose des contraintes sur la taille des modèles d'apprentissage automatique. De plus, TensorFlow Lite pour microcontrôleurs prend actuellement en charge un sous-ensemble limité d'opérations, de sorte que toutes les architectures de modèles 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. Il décrit également les opérations prises en charge et donne des conseils sur la conception et la formation d'un modèle adapté à une mémoire limitée.

Pour un exemple exécutable de bout en bout de création et de conversion d'un modèle, consultez le Colab suivant qui fait partie de l'exemple Hello World :

train_hello_world_model.ipynb

Conversion de modèle

Pour convertir un modèle TensorFlow entraîné afin qu'il s'exécute sur des microcontrôleurs, vous devez utiliser l' API Python du convertisseur TensorFlow Lite . Cela convertira le modèle en FlatBuffer , en réduisant la taille du modèle, et le modifiera pour utiliser les opérations TensorFlow Lite.

Pour obtenir la taille de modèle la plus petite possible, vous devez envisager d'utiliser la quantification post-formation .

Convertir en tableau C

De nombreuses plates-formes de microcontrôleurs ne prennent pas en charge le système de fichiers natif. La façon la plus simple d'utiliser un modèle de votre programme est de l'inclure en tant que tableau C et de le compiler dans votre programme.

La commande Unix suivante générera un fichier source C contenant le modèle TensorFlow Lite sous forme de tableau de char :

xxd -i converted_model.tflite > model_data.cc

La sortie 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 que vous avez généré le fichier, vous pouvez l'inclure dans votre programme. Il est important de changer la déclaration de tableau en const pour une meilleure efficacité de la mémoire sur les plates-formes embarquées.

Architecture de modèle et formation

Lors de la conception d'un modèle à utiliser 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 sous forme binaire et lors de l'exécution.

Pour créer un modèle plus petit, vous pouvez utiliser des couches moins nombreuses et plus petites dans votre architecture. Cependant, les petits modèles sont plus susceptibles de souffrir d'un sous-ajustement. Cela signifie que pour de nombreux problèmes, il est logique d'essayer d'utiliser le plus grand modèle pouvant tenir en mémoire. Cependant, l'utilisation de modèles plus grands entraînera é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 élevé, ce qui signifie que le processeur de votre appareil passe plus de temps à travailler et moins de temps d'inactivité. Cela augmentera la consommation d'énergie et la production de chaleur, ce qui peut être un problème en fonction de votre application.

Soutien opérationnel

TensorFlow Lite pour microcontrôleurs prend actuellement en charge un sous-ensemble limité d'opérations TensorFlow, ce qui a un impact sur les architectures de modèles qu'il est possible d'exécuter. Nous travaillons à l'extension du support opérationnel, à la fois en termes d'implémentations de référence et d'optimisations pour des architectures spécifiques.

Les opérations prises en charge sont visibles dans le fichier all_ops_resolver.cc