Flatbuffer Converter Tool#

The Flatbuffer Converter Tool helps to convert a .tflite file into a C array that can be compiled into a binary for an embedded system. This array can be used with the TensorFlow Lite for Microcontrollers API, which takes a void pointer to a buffer containing the model as an argument to its tflite::GetModel() init function.

In addition to converting the flatbuffer into a C array, the tool supports emitting model parameters embedded as metadata in the .tflite file as C preprocessor macros.

Input#

The tool takes a directory containing one or more .tflite files as input. If the directory consists of multiple files, only the first file in alphabetical order is converted.

Tip: If you have multiple files in the directory, but the one you want to convert isn't the first file in alphabetical order, you can rename the other files to add a .bak extension or rename the target file accordingly.

Output#

The tool writes its output into multiple files in a single output directory.

Model Array#

The tool always emits a pair of files sl_tflite_micro_model.c/.h, which declares the variables as follows

  • const uint8_t sl_tflite_model_array[] containing the full contents of the .tflite file

  • const uint32_t sl_tflite_model_len containing the length of the model array

Opcode Resolver#

A header file sl_tflite_micro_opcode_resolver.h is also emitted. This file declares a C preprocessor macro SL_TFLITE_MICRO_OPCODE_RESOLVER(opcode_resolver, error_reporter) that instantiates a tflite::MicroMutableOpResolver object and automatically registers the set of operators required to parse the model.

This macro can be used as part of an initialization sequence to automatically initializing the optimal opcode resolver.

Model Parameters#

If the .tflite file contains model parameters in its metadata section, a third header file sl_tflite_micro_model_parameters.h is emitted.

For every model parameter key-value pair, a C preprocessor macro SL_TFLITE_MODEL_<key> is created with the relevant value.

See the MLTK documentation to learn more about embedding model parameters in the .tflite file.

SLC Project Configuration Integration#

The Flatbuffer Converter Tool integrates with the SLC project configuration tools in Simplicty Studio and on the command line using SLC-CLI. When using these tools, the Flatbuffer Converter is automatically run with the config/tflite/ directory of the project as input, and the autogen/ directory as output.

In other words, any file with the .tflite extension in the config/tflite/ directory in the project will be automatically converted when the project is generated. If using Simplicity Studio, a directory watcher ensures that the project is automatically generated if a .tflite file is added or removed. This means that it is sufficient to drag-and-drop a .tflite file into the project, and it is automatically converted into C code.

Manual Usage#

If conversion is desired outside of a full SLC project generation cycle, the flatbuffer converter can be invoked manually. This is generally not necessary, but is an option for advanced users. This can only be done using the SLC-CLI, users of Simplicity Studio are recommended to regenerate the full project.

As SLC Project Generator#

SLC-CLI supports running a single project generation tool by passing the -tools to the slc generate command.

The Flatbuffer Converter step of the project generation process can be run standalone by running the following command:

slc generate -p <my_project.slcp> -tools tflite

As Standalone SLC-CLI Command#

The flatbuffer converter is also available as a standalone command in SLC-CLI for use outside of the context of a project. Execute the following command using absolute paths for both input and output directories.

slc tflite generate -contentFolder [/path/to/config/tflite] -generationOutput [/path/to/autogen]