Evaluation of Face Detection Model

January 22, 2026 ยท View on GitHub

Our evaluation service is a comprehensive tool that enables users to assess the accuracy of their TensorFlow Lite (.tflite) or ONNX (.onnx) Face Detection model. By uploading their model and a validation set, users can quickly and easily evaluate the performance of their model and generate various metrics, such as mAP.

The evaluation service is designed to be fast, efficient, and accurate, making it an essential tool for anyone looking to evaluate the performance of their Face Detection model.

1. Configure the YAML file

To use this service and achieve your goals, you can use the user_config.yaml or directly update the evaluation_yunet_config.yaml file and use it. This file provides an example of how to configure the evaluation service to meet your specific needs.

Alternatively, you can follow the tutorial below, which shows how to evaluate your pre-trained Face Detection model using our evaluation service.

    1.1 Set the model and the operation mode

    operation_mode should be set to evaluation and the evaluation section should be filled as in the following example:

    model:
      model_path: ../../stm32ai-modelzoo/face_detection/yunet/Public_pretrainedmodel_public_dataset/widerface/yunetn_320/yunetn_320_qdq_int8.onnx
      model_type: yunet
    
    operation_mode: evaluation
    

    In this example, the path to the yunet model is provided in the model_path parameter.

    evaluation:
       target: host # host, stedgeai_host, stedgeai_n6
    

    In the 'evaluation' section, if users are using a quantized TFLITE or ONNX model, they can decide to do the inferences with the classic python interpreters (host -> by default), with the C code generated by stedgeai on the PC (stedgeai_host), or with the C code generated by stedgeai on the N6 board directly (stedgeai_n6) using the target attribute.

    1.2 Prepare the dataset

    Information about the dataset you want to use for evaluation is provided in the dataset section of the configuration file, as shown in the YAML code below.

    dataset:
      dataset_name: widerface                                    # Dataset name. Optional, defaults to "<unnamed>".
      test_path: <test-set-root-directory>                       # Path to the root directory of the test set.
      check_image_files: False                                   # Enable/disable image file checking.
    

    In this example, the path to the validation set is provided in the test_path parameter.

    The state machine below describes the rules to follow when handling dataset paths for the evaluation.

    plot

    dataset:
      name: widerface
      class_names: [ person ]
      training_path: ./datasets/widerface/
      validation_path:
      validation_split: 0.20
      test_path:
    
    1.3 Apply preprocessing

    The images from the dataset need to be preprocessed before they are presented to the network for evaluation. This includes rescaling and resizing. In particular, they need to be rescaled exactly as they were at the training step. This is illustrated in the YAML code below:

    preprocessing:
      rescaling: { scale: 1, offset: 0 }
      resizing:
        aspect_ratio: fit
        interpolation: bilinear
      color_mode: bgr
    

    In this example, the pixels of the input images read in the dataset are in the interval [0, 255], that is UINT8. If you set scale to 1./255 and offset to 0, they will be rescaled to the interval [0.0, 1.0]. If you set scale to 1/127.5 and offset to -1, they will be rescaled to the interval [-1.0, 1.0].

    The resizing attribute specifies the image resizing methods you want to use:

    • The value of interpolation must be one of {"bilinear", "nearest", "bicubic", "area", "lanczos3", "lanczos5", "gaussian", "mitchellcubic"}.
    • The value of aspect_ratio must be "fit" as we do not support other values such as "crop". If you set it to "fit", the resized images will be distorted if their original aspect ratio is not the same as in the resizing size.

    The color_mode attribute must be one of "grayscale", "rgb" or "rgba".

    When you define the preprocessing parameter in the configuration file, the annotation file for the Face Detection dataset will be automatically modified during preprocessing to ensure that it is aligned with the preprocessed images. This typically involves updating the bounding box coordinates to reflect any resizing or cropping that was performed during preprocessing. This automatic modification of the annotations file is an important step in preparing the dataset for Face Detection, as it ensures that the annotations accurately reflect the preprocessed images and enables the model to learn from the annotated data.

    1.4 Apply post-processing

    Apply post-processing by modifying the postprocessing parameters in user_config.yaml as follows:

    • confidence_thresh - A float between 0.0 and 1.0, the score threshold to filter detections.
    • NMS_thresh - A float between 0.0 and 1.0, NMS threshold to filter and reduce overlapped boxes.
    • IoU_eval_thresh - A float between 0.0 and 1.0, IoU threshold to calculate TP and FP.
    1.5 Hydra and MLflow Settings

    The mlflow and hydra sections must always be present in the YAML configuration file. The hydra section can be used to specify the name of the directory where experiment directories are saved and/or the pattern used to name experiment directories. With the YAML code below, every time you run the Model Zoo, an experiment directory is created that contains all the directories and files created during the run. The names of experiment directories are all unique as they are based on the date and time of the run.

    hydra:
      run:
        dir: ./tf/src/experiments_outputs/${now:%Y_%m_%d_%H_%M_%S}
    

    The mlflow section is used to specify the location and name of the directory where MLflow files are saved, as shown below:

    mlflow:
      uri: ./tf/src/experiments_outputs/mlruns
    
2. Evaluate your model

If you chose to modify the user_config.yaml, you can evaluate the model by running the following command from the UC folder:

python stm32ai_main.py 

If you chose to update the evaluation_config.yaml and use it, then run the following command from the UC folder:

python stm32ai_main.py --config-path ./config_file_examples/ --config-name evaluation_yunet_config.yaml

In case you want to evaluate the accuracy of the quantized model and then benchmark it, you can either launch the evaluation operation mode followed by the benchmark service that describes in detail how to proceed, or you can use chained services like launching the chain_eqeb example with the command below:

python stm32ai_main.py --config-path ./config_file_examples/ --config-name chain_eqeb_config.yaml
3. Visualize the evaluation results

You can retrieve the confusion matrix generated after evaluating the float/quantized model on the test set by navigating to the appropriate directory within experiments_outputs/<date-and-time>.

You can also find the evaluation results saved in the log file stm32ai_main.log under experiments_outputs/<date-and-time>.