TensorFlow Lite Micro Integration
SkillDev toolsUse when integrating or debugging TensorFlow Lite Micro (LiteRT) on MCUs — op resolver, tensor arena sizing, AllocateTensors, Invoke, int8 quantization, and missing-op errors
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the TensorFlow Lite Micro Integration skill
What this skill tells your AI
The instructions your AI receives, as published by easyzoom/aix-skills in skills/tflite-micro-integration/SKILL.md and read by ahel’s review.
Overview
Use this skill to bring up TensorFlow Lite for Microcontrollers (TFLM / LiteRT for Microcontrollers) on an MCU: register exactly the ops the model uses, size the tensor_arena correctly, and quantize inputs so Invoke() returns valid output. Most failures are missing ops, an undersized arena, or unquantized input, not model logic. TFLM is Google's official microcontroller runtime and is integrated by several vendor toolchains — Espressif esp-tflite-micro (with ESP-NN kernels), NXP eIQ, and ST X-CUBE-AI, where TFLM is available as an optional runtime alongside ST's own proprietary Cube.AI runtime. Use tinymaix-integration instead when you want a lighter, dependency-free runtime.
When To Use
Use this skill when:
- The user runs
tensorflow/tflite-microand works withtflite::MicroInterpreter,tflite::MicroMutableOpResolver,AllocateTensors(), orInvoke(). - The build or runtime hits
Didn't find op for builtin opcode 'CONV_2D','QUANTIZE', arena/AllocateTensorsfailures, or output that is all zeros or drifting. - The project embeds a
.tflitemodel as a C array (xxd -i) and needs int8scale/zero_pointhandling.
Do not use this skill when the model is not yet converted and quantized to .tflite; run the TFLite converter and validate on the host first.
First Questions
Ask for:
- Target core, RAM/flash, and toolchain; whether CMSIS-NN / ESP-NN / vendor kernels are used.
- The
.tflitemodel, its op list (from Netron orflatc), and its input/output dtype (int8,uint8, orfloat32). - Current
kTensorArenaSizeand whetherAllocateTensors()returnskTfLiteOk. - Input
scale/zero_pointand expected output; a known golden input/output pair. - Exact symptom: link error, missing-op error, allocation failure, or wrong output.
Integration Checklist
-
Convert and embed the model. Produce a quantized
.tflite, thenxxd -i model.tflite > model.cc. Reference it viatflite::GetModel(g_model)and checkmodel->version() != TFLITE_SCHEMA_VERSION. -
Register only the needed ops. Use
tflite::MicroMutableOpResolver<N>whereNmatches the exact count ofAddConv2D(),AddDepthwiseConv2D(),AddFullyConnected(),AddReshape(),AddSoftmax(),AddQuantize(), etc.AllOpsResolver(which registers all built-in ops) bloats flash; avoid it in production. -
Allocate the tensor arena. Declare
alignas(16) uint8_t tensor_arena[kTensorArenaSize];, constructtflite::MicroInterpreterwith the model, resolver,tensor_arena, andkTensorArenaSize, then useMicroPrintffor logging. -
Allocate tensors and check the code. Call
interpreter.AllocateTensors()and confirm it returnskTfLiteOk. GrowkTensorArenaSizeif it fails, then trim towardinterpreter.arena_used_bytes(). -
Quantize the input. Read
input->params.scaleandinput->params.zero_point, computeq = round(real / scale) + zero_point, clamp to[-128, 127], and writeinput->data.int8[i]. -
Invoke and dequantize. Check
interpreter.Invoke() == kTfLiteOk, then convertoutput->data.int8[i]back withreal = (q - zero_point) * scale.
Common Failures
Didn't find op for builtin opcode 'CONV_2D'/'QUANTIZE': op missing from the resolver, orNinMicroMutableOpResolver<N>too small to hold allAdd*calls.- Opcode version mismatch (same message with
version 'N'plus "An older version of this builtin might be supported"): model exported by a newer converter than the runtime; rebuildtflite-microor re-export. AllocateTensors()fails or returns non-kTfLiteOkbecausekTensorArenaSizeis too small.- Output is all zeros or drifts: input written as raw floats/pixels without applying
scale/zero_point. - Hard fault or stack overflow inside
AllocateTensors()/Invoke(): give the calling thread enough stack (typically several KB). - Unaligned or too-small
tensor_arena(missingalignas(16)) causing allocation errors.
Verification
Before claiming TFLM inference works:
- State the model, its op list, input/output dtype, and
kTensorArenaSizevsarena_used_bytes(). - Confirm
AllocateTensors()andInvoke()both returnkTfLiteOk. - Confirm a golden input reproduces the host reference output within quantization tolerance.
- Confirm input quantization and output dequantization use the tensor's actual
scale/zero_point.
Example
User:
TFLM 里 Invoke 报 "Didn't find op for builtin opcode 'DEPTHWISE_CONV_2D'"。
Agent:
- Asks for the model op list (Netron/
flatc) and the currentMicroMutableOpResolver<N>registrations. - Adds
resolver.AddDepthwiseConv2D()and bumpsNto match the totalAdd*count. - Re-runs, confirms
AllocateTensors()andInvoke()returnkTfLiteOk, and checks a golden vector.
Signals
- GitHub stars
- 31
- Forks
- 3
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
tflite-micro-integration- Source
- github.com/easyzoom/aix-skills