Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

English | 简体中文

AdaFace C++ Deployment Example

This directory provides examples that infer_xxx.py fast finishes the deployment of AdaFace on CPU/GPU and GPU accelerated by TensorRT.

Taking AdaFace as an example, we demonstrate how infer.cc fast finishes the deployment of AdaFace on CPU/GPU and GPU accelerated by TensorRT.

Before deployment, two steps require confirmation

Taking the CPU inference on Linux as an example, the compilation test can be completed by executing the following command in this directory. FastDeploy version 0.7.0 or above (x.x.x>=0.7.0) is required to support this model.

# “If the precompiled library does not contain this model, compile SDK from the latest code”
mkdir build
cd build
wget https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-x64-x.x.x.tgz
tar xvf fastdeploy-linux-x64-x.x.x.tgz
cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-linux-x64-x.x.x
make -j

# Download test images
wget https://bj.bcebos.com/paddlehub/fastdeploy/rknpu2/face_demo.zip
unzip face_demo.zip

# Run the following code if the model is in Paddle format
wget https://bj.bcebos.com/paddlehub/fastdeploy/mobilefacenet_adaface.tgz
tar zxvf mobilefacenet_adaface.tgz -C ./
# CPU inference
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
              mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
              face_0.jpg face_1.jpg face_2.jpg 0

# GPU inference
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
              mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
              face_0.jpg face_1.jpg face_2.jpg 1

# GPU上TensorRT推理
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
              mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
              face_0.jpg face_1.jpg face_2.jpg 2

# KunlunXin XPU inference
./infer_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
              mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
              face_0.jpg face_1.jpg face_2.jpg 3

The visualized result after running is as follows

The above command works for Linux or MacOS. For SDK use-pattern in Windows, refer to:

AdaFace C++ Interface

AdaFace Class

fastdeploy::vision::faceid::AdaFace(
        const string& model_file,
        const string& params_file = "",
        const RuntimeOption& runtime_option = RuntimeOption(),
        const ModelFormat& model_format = ModelFormat::PADDLE)

AdaFace model loading and initialization, model_file and params_file are in PaddleInference format if using PaddleInference for inference; model_file is in ONNX format and params_file is empty if using ONNXRuntime for inference

Predict Function

AdaFace::Predict(cv::Mat* im, FaceRecognitionResult* result)

Model prediction interface. Input images and output detection results.

Parameter

  • im: Input images in HWC or BGR format
  • result: Detection results, including detection box and confidence of each box. Refer to Vision Model Prediction Results for FaceRecognitionResult.

Revise pre-processing and post-processing parameters

Pre-processing and post-processing parameters can be changed by modifying the member variables of AdaFacePostprocessor and AdaFacePreprocessor.

AdaFacePreprocessor member variables (preprocessing parameters)

  • size(vector<int>): This parameter changes the size of the resize during preprocessing, containing two integer elements for [width, height] with default value [112, 112]. Revise through AdaFacePreprocessor::SetSize(std::vector& size)
  • alpha(vector<float>): Preprocess normalized alpha, and calculated as x'=x*alpha+beta. alpha defaults to [1. / 127.5, 1.f / 127.5, 1. / 127.5]. Revise through AdaFacePreprocessor::SetAlpha(std::vector& alpha)
  • beta(vector<float>): Preprocess normalized beta, and calculated as x'=x*alpha+beta,beta defaults to [-1.f, -1.f, -1.f], Revise through AdaFacePreprocessor::SetBeta(std::vector& beta)
  • permute(bool): Whether to convert BGR to RGB in pre-processing. Default true. Revise through AdaFacePreprocessor::SetPermute(bool permute)

AdaFacePostprocessor member variables (post-processing parameters)

  • l2_normalize(bool): Whether to perform l2 normalization before outputting the face vector. Default false. Revise through AdaFacePostprocessor::SetL2Normalize(bool& l2_normalize)