Use case : Image classification
This folder contains a custom model ST-MNIST for MNIST type datasets. ST-MNIST model is a depthwise separable convolutional based model architecture and can be used for different MNIST use-cases, e.g. alphabet recognition, digit recognition, or fashion MNIST etc.
ST-MNIST model accepts an input shape of 28 x 28, which is standard for MNIST type datasets. The pretrained model is also quantized in int8 using tensorflow lite converter.
Network Information | Value |
---|---|
Framework | TensorFlow Lite |
Quantization | int8 |
For an image resolution of 28x28 and 36 classes : 10 integers (from 0-9) and 26 alphabets (upper-case A-Z)
Input Shape | Description |
---|---|
(1, 28, 28, 1) | Single 28x28 grey-scale image with UINT8 values between 0 and 255 |
Output Shape | Description |
---|---|
(1, 36) | Per-class confidence for 36 classes in FLOAT32 |
Platform | Supported | Recommended |
---|---|---|
STM32L0 | [] | [] |
STM32L4 | [x] | [x] |
STM32U5 | [x] | [x] |
STM32H7 | [x] | [x] |
STM32MP1 | [x] | [] |
STM32MP2 | [x] | [] |
This model is trained on a subset version of EMNIST dataset. In these experiment we kept only the ten digits classes [0,9] and capital alphabets [A-Z] from the matlab version of the EMNIST byclass dataset. The dataset can be downloaded from the link. We used all the samples for these classes and we have 533,993 images in train dataset, and 89,264 images for the for the test dataset.
The training configurations for the training model are provided in, stmnist_v1_tfs_config.yaml file.
To deploy your trained model, you need to configure the user_config.yaml file following the tutorial under the deployment section and deploy the .tflite model.
Measures are done with default STM32Cube.AI configuration with enabled input / output allocated option.
Reference MCU memory footprint based on EMNIST-Byclass dataset (see Accuracy for details on dataset)
Model | Format | Resolution | Series | Activation RAM | Runtime RAM | Weights Flash | Code Flash | Total RAM | Total Flash | STM32Cube.AI version |
---|---|---|---|---|---|---|---|---|---|---|
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | STM32H7 | 17.21 KiB | 4.49 KiB | 10.08 KiB | 46.8 KiB | 21.7 KiB | 56.88 KiB | 9.1.0 |
Model | Format | Resolution | Board | Frequency | Inference time (ms) | STM32Cube.AI version |
---|---|---|---|---|---|---|
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | STM32H747I-DISCO | 400 MHz | 3.41 ms | 9.1.0 |
Model | Format | Resolution | Quantization | Board | Execution Engine | Frequency | Inference time (ms) | %NPU | %GPU | %CPU | X-LINUX-AI version | Framework |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | per-channel** | STM32MP257F-DK2 | 2 CPU | 1500 MHz | 0.31 ms | 0 | 0 | 100 | v5.1.0 | TensorFlowLite 2.11.0 |
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | per-channel | STM32MP157F-DK2 | 2 CPU | 800 MHz | 0.69 ms | NA | NA | 100 | v5.1.0 | TensorFlowLite 2.11.0 |
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | per-channel | STM32MP135F-DK2 | 1 CPU | 1000 MHz | 1.070 ms | NA | NA | 100 | v5.1.0 | TensorFlowLite 2.11.0 |
** To get the most out of MP25 NPU hardware acceleration, please use per-tensor quantization
Dataset details: link , by_class, digits from [0-9] and capital letters [A-Z]. Number of classes: 36, Number of train images: 533,993, Number of test images: 89,264.
Model | Format | Resolution | Top 1 Accuracy |
---|---|---|---|
ST MNIST Byclass v1 tfs | Float | 28x28x1 | 91.89 % |
ST MNIST Byclass v1 tfs | Int8 | 28x28x1 | 91.47 % |
Following we provide the confusion matrix for the model with Float32 weights.
Following we provide the confusion matrix for the quantized model with INT8 weights.
Please refer to the yaml explanations: here
Please refer to the generic guideline here
[1] "EMNIST : NIST Special Dataset," [Online]. Available: https://www.nist.gov/itl/products-and-services/emnist-dataset.
[2] "EMNIST: an extension of MNIST to handwritten letters". https://arxiv.org/abs/1702.05373