Skip to content
The Ananse ReportsNo. 1 · Part I

The Ananse Reports: TinyML Reality Check, Part I: The Floor of the Curve

Part I sets up Report No. 1 and its headline result: the Nano 33 wins every measured task on energy, with gaps large enough to change a board decision.

Share

Send this post with the canonical Agoo AI link.

LinkedIn X

Three small development boards are lined up on my desk. Together they cost less than a mid-range smartphone. Each one is built around a microcontroller, the kind of processor used to control thermostats, factory sensors, household appliances, and many other embedded systems.

For the past several weeks I have been asking the same question about them again and again: in energy, not dollars, what does it cost to run AI on each board?

Speed numbers for boards like these are easy to find. In contrast, energy numbers are harder. MLPerf Tiny, the industry's standard benchmark for this class of hardware, scores devices primarily on latency; its energy results are a separate standardized measurement made on specialized equipment along an isolated current path that strips away the rest of the board. Vendor datasheets quote current draw for the chip, not for the board you actually deploy. The practical question for a battery-powered product is simpler: which board drains the battery slowest while running my model? As far as I can find, there is no public apples-to-apples answer for these boards. Fragments exist: a power figure for one board here, a latency table there, coarse comparisons across different boards on different workloads. Nothing puts these three boards on the same model, under the same protocol, behind the same measurement boundary.

I ran each model on each board using one rig and one protocol. Two results surprised me.

The first surprise: the STM32 NUCLEO-F401RE, the most conventional embedded development board in the lineup, used the most energy per inference on keyword spotting. It used eight times more than the lowest-energy board in the test.

The second surprise: the winner was an Arduino. The Nano 33 BLE Sense Rev2 is marketed as a beginner-friendly sensor board. Nothing about its positioning suggests an AI workhorse. Yet on every task in this report it consumed a fraction of the energy of its competitors. On the two tasks where I ran the full on-device accuracy evaluation, it matched the other boards exactly, score for score. Its measured average board-level power during back-to-back inference was roughly one-third of a published figure for the same board under a different workload. The gap led me to verify the measurement using a second, independent power path. For context, the first path used an INA219 wired inline on the board's 5 V input. The second used an FNB58 USB meter at the wall. The result held, although I did not yet know what accounted for the difference. That investigation gets its own report in this series.

Here is the result translated into the terms that matter for a battery-powered product.

Energy-equivalent inferences per CR2032 coin-cell battery

CR2032: 20 mm diameter, 3.2 mm thick lithium coin cell · 675 mWh nominal capacity
Energy-equivalent inferences 0 1,000,000 2,000,000 3,000,000 Nano 33 BLE Sense Rev2 · Keyword spotting: 253,000 energy-equivalent inferences 253k Keyword spotting Nano 33 BLE Sense Rev2 · Image classification: 48,000 energy-equivalent inferences 48k Image classification Nano 33 BLE Sense Rev2 · Anomaly detection: 3,600,000 energy-equivalent inferences 3.6M Anomaly detection Nano 33 ESP32-S3 · Keyword spotting: 50,000 energy-equivalent inferences 50k Keyword spotting ESP32-S3 · Image classification: 9,800 energy-equivalent inferences 9.8k Image classification ESP32-S3 · Anomaly detection: 469,000 energy-equivalent inferences 469k Anomaly detection ESP32-S3 STM32 NUCLEO-F401RE · Keyword spotting: 32,000 energy-equivalent inferences 32k Keyword spotting STM32 NUCLEO-F401RE · Image classification: 9,400 energy-equivalent inferences 9.4k Image classification STM32 NUCLEO-F401RE · Anomaly detection: 521,000 energy-equivalent inferences 521k Anomaly detection F401RE
Figure 1. Energy-equivalent inferences per CR2032 coin-cell battery. Calculated energy-equivalent inference counts for three boards and workloads against a nominal 675 mWh CR2032 capacity. Compute-only behind the measured power boundary.

What Figure 1 Tells Us

Figure 1 translates the measured energy per inference into a common battery-sized budget. It asks how many inferences each board's measured compute cost would represent within the nominal 675 mWh capacity of a CR2032 coin cell.

Consider the Nano 33 anomaly-detection result. The board used approximately 0.19 mWh per 1,000 inferences. Dividing 675 mWh by that rate gives approximately 3.55 million inferences, which is rounded to 3.6 million in the chart.

That value is not a prediction that a finished Nano 33 product will perform exactly 3.6 million anomaly detections on one coin cell. The calculation covers the measured compute path. A deployed product must also power its sensors, radio, regulator, and other components. Its duty cycle, operating temperature, and the battery's behavior under load will further affect the result.

The bars should primarily be compared within each workload. A taller bar means that the board used less energy per inference and could therefore perform more of that same workload within the common energy budget. On keyword spotting, the Nano 33 reaches an estimated 253,000 inferences, compared with 50,000 for the ESP32-S3 and 32,000 for the F401RE. On image classification, it reaches 48,000, compared with 9,800 and 9,400. On anomaly detection, it reaches 3.6 million, compared with 469,000 and 521,000.

Consequently, the Nano 33 converts the same nominal energy budget into approximately five to eight times as many inferences, depending on the workload. The comparison between boards is the result to carry forward. The absolute counts remain calculated energy equivalents rather than battery-life predictions.

What an Ananse Report includes

An Ananse Report publishes hardware-grounded numbers with disclosed variance and enough methodology to reproduce them from the public repository. The analysis explains what those measurements change for someone choosing hardware. For this report, that means wall-side power from a USB power meter, board-side current from an inline current sensor, ambient conditions from an environmental sensor, and inference timing reported as distributions rather than single polished numbers.

The existing ecosystem deserves credit for getting TinyML this far. Edge Impulse made the machine learning deployment workflow practical for teams that do not want to rebuild an embedded pipeline from scratch. MLPerf Tiny gave the field canonical workloads, reference models, and a shared vocabulary. This report stands on that work. Those tools are not wrong. The missing piece is narrower: a team deciding whether to put inference on a microcontroller still needs board-level energy, repeatability, and environmental context in the same frame as latency and accuracy. A benchmark can be technically correct and still incomplete for someone who has to choose a board, a power budget, and a deployment envelope.

I built signal-bench, the open-source tool behind this series, to make that pipeline repeatable: define the tasks, run the measurements, capture telemetry, export the matrix, and generate the charts without hand-massaging the result. Repeatability matters because trust comes from rerunning the work, and it lets other builders challenge the conclusion without reverse-engineering the setup. signal-bench keeps noisy results visible, including cases where efficiency trades against speed or a board changes rank when the metric changes. That tradeoff is why both measurements belong in the report.

What was tested

There are three tasks and three boards. That makes nine combinations, and each combination was measured in at least three separate sessions on different days.

The tasks come from MLPerf Tiny, so the models and datasets are standard and recognizable: keyword spotting, image classification, and anomaly detection. In practical terms, that means an always-on audio workload, a compact vision model, and an autoencoder listening for a machine going wrong. The boards represent three different answers to "what kind of MCU should run AI": the STM32 NUCLEO-F401RE as the conventional embedded development board, the Arduino Nano 33 BLE Sense Rev2 as the accessible sensor board, and the ESP32-S3 as the connected MCU marketed for AI workloads.

Task F401RE Nano 33 BLE Sense Rev2 ESP32-S3
Keyword spotting 158.9 ms / 0.0214 Wh per 1000 224.2 ms / 0.0027 Wh per 1000 106.5 ms / 0.0136 Wh per 1000
Image classification 755.4 ms / 0.0718 Wh per 1000 1232.6 ms / 0.0142 Wh per 1000 551.1 ms / 0.0686 Wh per 1000
Anomaly detection 8.1 ms / 0.0013 Wh per 1000 12.4 ms / 0.0002 Wh per 1000 11.7 ms / 0.0014 Wh per 1000

Each result reports median latency and median energy per 1,000 inferences from the published session set.

The metric

The headline metric is watt-hours per 1,000 inferences: how much energy the board consumed to run the model a thousand times. Latency answers how fast. Energy answers at what cost. The unit is simple: energy per inference, scaled to a thousand inferences and converted to watt-hours for readability. The measurement boundary is the whole development board, USB bridge and regulators included, because that is the hardware you actually buy and power.

That boundary matters when comparing against other published numbers. MLPerf Tiny's official energy results are measured on an isolated current path that feeds the microcontroller alone, with the rest of the board stripped out of the measurement. Those numbers and mine describe different physical systems, and neither is wrong. That difference becomes important in the next two reports: Part II shows the Nano 33 result clearly, and Report No. 1.5 explains why it looked so far from a published reference figure.

Where this is going

Part II presents the evidence: the full task-by-task results, the accuracy scores, the run-to-run variance, and why the Nano 33's number needed a second check. Part III turns the data into decisions: when to optimize for speed, when to optimize for energy, and why the intuitive way of reading a model card can lead you wrong.

Every number in this series traces to a run ID in the signal-bench repository, which is public as of today. The methodology is published so the numbers can be checked, challenged, and rerun.

#ananse-reports #tinyml #edge-ai #benchmarking #mcu #signal-bench

Reader Response

Questions, corrections, and challenges welcome

If you have a correction, a methodological challenge, or a follow-up question, send it with the post context attached so I know exactly what you're responding to.