SensorForgeOptimizer
Optimize for the edge

We shrink your models to fit edge devices.

Upload a trained model (.tflite or ONNX; Keras and PyTorch models export to either) and a sample of its data. Get back a file for stock TensorFlow Lite Micro that needs a fraction of the SRAM and flash, within the accuracy limit you set. Every memory and accuracy figure for the file you download is measured by running it under TensorFlow Lite Micro; the few estimates in a report (the search's plan sizes) say so.

Sign up and try it on your own model →See the results

Measured on real models, across sensors

Your int8 file as given against the optimized int8 file, within a 1-point accuracy limit. SRAM is measured under TensorFlow Lite Micro built for a 32-bit RISC-V core.

Motion
20×
less memory, more accurate than plain int8
Gesture recognition, GRUPyTorch model as ONNX
SRAM103.8 → 5.9 KB
Flash264.4 → 12.1 KB
Accuracy92.0% → 93.4%
368.2 KB → 18.0 KB of memory
Audio
4.4×
less memory on a public Arm model
Keyword spotting, DS-CNN-MArm ML-Zoo, int8 .tflite
SRAM67.4 → 19.4 KB
Flash181.9 → 36.7 KB
Accuracy85.6% → 89.5%
249.4 KB → 56.1 KB of memory
Images
Fits
a camera model that did not fit now runs on the chip
Person detection, MobileNetV2MCU board, 188 KB of app RAM
Needed207.5 KB of RAM
On the chip85.8 KB used
Outputssame as on the PC, 496/496 photos
Lossless mode: no data, no retraining
ModelSRAMFlashAccuracyLess memory
AudioKeyword spotting, CNN-LArm ML-Zoo, int8 .tflite
23.6 → 12.8 KB
473.2 → 106.7 KB
84.4% → 87.8% (+3.4 pts)4.2×
AudioWake word, GRUKeras, int8 .tflite
48.2 → 10.2 KB
157.7 → 63.5 KB
89.7% → 89.8% (unchanged)2.8×
AudioWake word, DS-CNN-SArm ML-Zoo, int8 .tflite
22.6 → 13.0 KB
46.5 → 12.6 KB
84.8% → 84.7% (within 0.1 pts)2.7×
AudioKeyword spotting, DS-CNN-LArm ML-Zoo, int8 .tflite
111.4 → 105.3 KB
492.0 → 127.9 KB
86.0% → 92.7% (+6.7 pts)2.6×
ImagesPerson detection, MobileNetV1public model zoo, int8 .tflite
98.7 → 69.9 KB
325.5 → 145.8 KB
80.9% → 80.9% (unchanged)2.0×
Not just the best cases. On 14 public models, SRAM came down on every one (median 44%, from 3% to 89%) and flash by a median of 66%. A quantization-only tool run on the same 14 models changed neither.

How it works

1Upload

Your trained model and a sample of its training data. No code changes, no new runtime.

2Pick the chip

RISC-V, Arm Cortex-M or an NPU. Minimize SRAM, flash or both, within your accuracy limit.

3It searches

Removes channels and picks bit widths layer by layer, re-plans memory, and retrains against your model.

4Download

A .tflite for stock TensorFlow Lite Micro with your file's inputs and outputs, in the same order and under the same names (the report lists any change of scale), its C sources, and a report of every measurement. About 15 minutes.

Formats

.tflite (int8, int16, float) and ONNX (float, QDQ, QOperator); Keras and PyTorch models export to either

Models

CNNs and depthwise CNNs, GRU and LSTM (streaming too), small transformer classifiers, multi-output models and detectors

Checks

Your file and the optimized file both run under TensorFlow Lite Micro on every test sample, and the accuracy limit is judged there, so a file that runs but computes differently on the chip cannot pass

Try it on your own model

Sign up with your email and run your model right away. If your chip is not in the list, or you want help with a model, tell us about it.