STM32N6 NPU Deployment — Politecnico di Milano  1.0
Documentation for Neural Network Deployment on STM32N6 NPU - Politecnico di Milano 2024-2025
3.1 — ST Model Zoo

3.1 — ST Model Zoo

Where the models come from

The ST Model Zoo is a public GitHub repository maintained by STMicroelectronics containing a curated collection of pre-trained neural network models, all validated for deployment on STM32 devices.

🔗 github.com/STMicroelectronics/stm32ai-modelzoo

What it is — and why it matters

Training a neural network from scratch requires large datasets, powerful GPUs, and days of computation. For most embedded AI projects — including this one — this is neither necessary nor practical. The Model Zoo solves this by providing models that are already trained, quantized, and validated on reference STM32 hardware. You download the model file and proceed directly to deployment.

As of release 4.0, the Model Zoo supports three frameworks — TensorFlow, PyTorch, and ONNX — and provides performance benchmarks on both MCU and MPU targets for every model.

What’s new in release 4.0 (latest):
  • Major PyTorch support for Image Classification and Object Detection
  • Support of STEdgeAI Core v3.0.0
  • New use cases: Face Detection, Arc Fault Detection, Re-Identification
  • Mixed precision models (Weights 4-bit, Activations 8-bit)
  • Support for Keras 3.8.0, TensorFlow 2.18.0, PyTorch 2.7.1, ONNX 1.16.1
  • Docker-based setup with ready-to-use image including the full software stack

Repository structure

The repository is organised by application domain. Each folder contains multiple model architectures, each pre-trained on public datasets. Within each domain, models are further organised by training source.

stm32ai-modelzoo/
├── arc_fault_detection/
├── audio_event_detection/
├── depth_estimation/
├── face_detection/
├── hand_posture/
├── human_activity_recognition/
├── image_classification/
├── instance_segmentation/
├── neural_style_transfer/
├── object_detection/
├── pose_estimation/    ← used in this project
│   ├── handlandmarks/
│   ├── headlandmarks/
│   ├── movenet/        ← MoveNet Lightning lives here
│   │   ├── ST_pretrainedmodel_public_dataset/
│   │   ├── ST_pretrainedmodel_custom_dataset/
│   │   └── Public_pretrainedmodel_custom_dataset/
│   ├── yolov8n_pose/
│   └── yolov11n_pose/
├── re_identification/
├── semantic_segmentation/
└── speech_enhancement/
Subfolder Description
ST_pretrainedmodel_public_dataset Models trained by ST on public datasets (e.g. COCO). Best validated option.
ST_pretrainedmodel_custom_dataset Models trained by ST on custom / proprietary datasets.
Public_pretrainedmodel_public_dataset Public models (e.g. Google MoveNet) on public datasets.

Available use cases

The table below shows all supported use cases and which STM32 board is recommended for each. Notice that the STM32N6570-DK supports the widest range of use cases — a direct consequence of its Neural-ART NPU.

Use Case Description STM32N6570-DK
Image Classification Classifies content within predefined classes
Object Detection Detects and locates objects in images
Pose Estimation ← this project Detects keypoints on people (hands, face, body) Recommended
Semantic Segmentation Labels every pixel in an image
Instance Segmentation Labels pixels per object instance
Depth Estimation Pixel-wise depth map from image
Neural Style Transfer Applies artistic style to images
Speech Enhancement Audio enhancement in noisy environments
Re-Identification Reidentifies person/object across frames
Zoom in: Pose Estimation folder

The pose_estimation/ folder contains five model families:

  • movenet — single pose, 13 or 17 keypoints  used in this project
  • yolov8n_pose — multi pose, 17 keypoints (COCO standard)  used in this project
  • yolov11n_pose — multi pose, 17 keypoints (latest YOLO)
  • handlandmarks — single pose, 21 hand keypoints
  • headlandmarks — single pose, 468/478 face keypoints

MoveNet Lightning — Official performance on STM32N6570-DK

The following data comes directly from the Model Zoo README — these are the official ST benchmarks for the model we deployed. Our measured results (22 ms at 192×192) are consistent with these figures.

Memory footprint on STM32N6
Model Resolution Format Internal RAM (KiB) Weights Flash (KiB)
ST MoveNet Lightning heatmaps 192×192×3 Int8 914.88 2304.0
ST MoveNet Lightning heatmaps 224×224×3 Int8 1239.04 2304.0
ST MoveNet Lightning heatmaps 256×256×3 Int8 1607.68 2304.0
Inference time on STM32N6570-DK (NPU/MCU)
Model Resolution Inference (ms) Inf/sec STEdgeAI version
ST MoveNet Lightning heatmaps 192×192×3 22.05 ms 45.35 3.0.0
ST MoveNet Lightning heatmaps 224×224×3 27.64 ms 36.18 3.0.0
ST MoveNet Lightning heatmaps 256×256×3 35.50 ms 28.17 3.0.0
Accuracy — OKS on COCO Person dataset
Model Resolution Quantization OKS (%)
ST MoveNet Lightning heatmaps 192×192 per-channel 57.64%
ST MoveNet Lightning heatmaps 224×224 per-channel 62.29%
ST MoveNet Lightning heatmaps 192×192 per-tensor 55.84%
MoveNet Lightning (Google) 192×192 per-channel 54.12%

How to clone and use it

The repo uses Git LFS for large binary files (model weights). You must install and initialise Git LFS before cloning, otherwise model files will download as empty pointers.

# 1. Install Git LFS (Ubuntu)
sudo apt-get install git-lfs

# 2. Initialise Git LFS for your account
git lfs install
# Expected output: Git LFS initialized.

# 3. Clone — place it in the SAME folder as modelzoo-services
git clone https://github.com/STMicroelectronics/stm32ai-modelzoo.git

# 4. Navigate to the model you want
cd stm32ai-modelzoo/pose_estimation/movenet/ST_pretrainedmodel_public_dataset/
Important — folder placement: Clone the Model Zoo in the same parent folder as stm32ai-modelzoo-services. The config file examples in Services reference model paths relative to this structure. If the folders are not siblings, you will need to update every model_path in user_config.yaml manually.

What we used in this project

Model Source Format Zoo? Quantization needed?
MoveNet Lightning ST Model Zoo .tflite INT8 Yes No — pre-quantized
YOLOv8n-pose Ultralytics (external) .pt → .tflite No Yes — PTQ via TFLite
TinyBERT HuggingFace (external) .onnx No Yes — PTQ required
Next step: once you have your model file, you pass it to ModelZoo Services via user_config.yaml. The Services framework handles everything else — quantization if needed, profiling, and deployment. That is what we look at in the next section.
← Chapter 3 Overview Next: 3.2 ModelZoo Services →