Créer et convertir des modèles

Les microcontrôleurs ont une RAM et un stockage limités, ce qui impose des contraintes à la la taille des modèles de ML. En outre, LiteRT pour Les microcontrôleurs sont actuellement compatibles avec un sous-ensemble limité d'opérations. sont possibles.

Ce document explique le processus de conversion d'un modèle TensorFlow à exécuter sur de microcontrôleurs. Il décrit également les opérations prises en charge et donne des informations des conseils sur la conception et l'entraînement d'un modèle pour tenir dans 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 le Bonjour à titre d'exemple.

Conversion du modèle

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

Pour obtenir la plus petite taille de modèle possible, envisagez d'utiliser 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. La le moyen le plus simple d'utiliser un modèle de votre programme est de l'inclure sous forme de tableau C le compiler dans votre programme.

La commande Unix suivante génère un fichier source C contenant le fichier Modèle LiteRT sous forme de 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 bénéficier d'une meilleure mémoire l'efficacité sur les plates-formes intégrées.

Pour savoir 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 tenir 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 l'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 des couches de moins en plus petites de l'architecture. Toutefois, les petits modèles sont plus susceptibles de souffrir de sous-apprentissage. Pour de nombreux problèmes, il est donc logique d'essayer d'utiliser le plus grand modèle qui tiennent en mémoire. Cependant, l'utilisation de modèles plus grands d'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. Grand et complexe peuvent entraîner un cycle d'utilisation plus long, ce qui signifie que le processeur passe plus de temps à travailler et moins de temps d'inactivité. Cela augmentera la puissance et la production de chaleur, ce qui peut poser problème application.

Assistance opérationnelle

LiteRT for Microcontrollers prend actuellement en charge un sous-ensemble limité de TensorFlow Operations, qui a un impact sur les architectures de modèle possibles s'exécuter. Nous nous efforçons d'étendre la prise en charge des opérations, à la fois référencer les implémentations et optimisations pour des architectures spécifiques.

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