Skip to content

Commit ec67f8e

Browse files
[Model] Refactor insightface models (PaddlePaddle#919)
* 重构insightface代码 * 重写insightface example代码 * 重写insightface example代码 * 删除多余代码 * 修改预处理代码 * 修改文档 * 修改文档 * 恢复误删除的文件 * 修改cpp example * 修改cpp example * 测试python代码 * 测试python代码 * 测试python代码 * 测试python代码 * 测试python代码 * 测试python代码 * 测试python代码 * 跑通python代码 * 修复重复初始化的bug * 更新adaface的python代码 * 修复c++重复初始化的问题 * 修复c++重复初始化的问题 * 修复Python重复初始化的问题 * 新增preprocess的几个参数的获取方式 * 修复注释的错误 * 按照要求修改 * 修改文档中的图片为图片压缩包 * 修改编译完成后程序的提示 * 更新错误include * 删除无用文件 * 更新文档
1 parent df940b7 commit ec67f8e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+1755
-2105
lines changed

Diff for: cmake/rknpu2.cmake

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ download_and_decompress(${RKNPU2_URL} ${CMAKE_CURRENT_BINARY_DIR}/${RKNPU2_FILE}
1010
# set path
1111
set(RKNPU_RUNTIME_PATH ${THIRD_PARTY_PATH}/install/rknpu2_runtime)
1212

13-
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
14-
else ()
15-
message(FATAL_ERROR "[rknpu2.cmake] Only support build rknpu2 in Linux")
16-
endif ()
13+
#if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
14+
#else ()
15+
# message(FATAL_ERROR "[rknpu2.cmake] Only support build rknpu2 in Linux")
16+
#endif ()
1717

1818

1919
if (EXISTS ${RKNPU_RUNTIME_PATH})

Diff for: examples/vision/faceid/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# 人脸识别模型
22

33

4+
## 模型支持列表
5+
46
FastDeploy目前支持如下人脸识别模型部署
57

68
| 模型 | 说明 | 模型格式 | 版本 |
@@ -10,3 +12,7 @@ FastDeploy目前支持如下人脸识别模型部署
1012
| [deepinsight/PartialFC](./insightface) | PartialFC 系列模型 | ONNX | [CommitID:babb9a5](https://github.com/deepinsight/insightface/commit/babb9a5) |
1113
| [deepinsight/VPL](./insightface) | VPL 系列模型 | ONNX | [CommitID:babb9a5](https://github.com/deepinsight/insightface/commit/babb9a5) |
1214
| [paddleclas/AdaFace](./adaface) | AdaFace 系列模型 | PADDLE | [CommitID:babb9a5](https://github.com/PaddlePaddle/PaddleClas/tree/v2.4.0) |
15+
16+
## 模型demo简介
17+
18+
ArcFace,CosFace,PartialFC,VPL同属于deepinsight系列,因此demo使用ONNX作为推理框架。AdaFace则采用PaddleInference作为推理框架。

Diff for: examples/vision/faceid/adaface/cpp/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PROJECT(infer_demo C CXX)
1+
PROJECT(infer_adaface_demo C CXX)
22
CMAKE_MINIMUM_REQUIRED (VERSION 3.12)
33

44
# 指定下载解压后的fastdeploy库路径
@@ -9,5 +9,5 @@ include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)
99
# 添加FastDeploy依赖头文件
1010
include_directories(${FASTDEPLOY_INCS})
1111

12-
add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.cc)
13-
target_link_libraries(infer_demo ${FASTDEPLOY_LIBS})
12+
add_executable(infer_adaface_demo ${PROJECT_SOURCE_DIR}/infer.cc)
13+
target_link_libraries(infer_adaface_demo ${FASTDEPLOY_LIBS})

Diff for: examples/vision/faceid/adaface/cpp/README.md

+27-34
Original file line numberDiff line numberDiff line change
@@ -8,56 +8,43 @@
88
- 1. 软硬件环境满足要求,参考[FastDeploy环境要求](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
99
- 2. 根据开发环境,下载预编译部署库和samples代码,参考[FastDeploy预编译库](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
1010

11-
以Linux上CPU推理为例,在本目录执行如下命令即可完成编译测试,支持此模型需保证FastDeploy版本0.7.0以上(x.x.x>=0.7.0)
11+
以Linux上CPU推理为例,在本目录执行如下命令即可完成编译测试
1212

1313
```bash
14+
# “如果预编译库不包含本模型,请从最新代码编译SDK”
1415
mkdir build
1516
cd build
16-
# 下载FastDeploy预编译库,用户可在上文提到的`FastDeploy预编译库`中自行选择合适的版本使用
1717
wget https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-x64-x.x.x.tgz
1818
tar xvf fastdeploy-linux-x64-x.x.x.tgz
1919
cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-linux-x64-x.x.x
2020
make -j
2121

2222
#下载测试图片
23-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_0.JPG
24-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_1.JPG
25-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_2.JPG
23+
wget https://bj.bcebos.com/paddlehub/fastdeploy/rknpu2/face_demo.zip
24+
unzip face_demo.zip
2625

2726
# 如果为Paddle模型,运行以下代码
2827
wget https://bj.bcebos.com/paddlehub/fastdeploy/mobilefacenet_adaface.tgz
2928
tar zxvf mobilefacenet_adaface.tgz -C ./
3029
# CPU推理
31-
./infer_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
30+
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
3231
mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
33-
test_lite_focal_arcface_0.JPG \
34-
test_lite_focal_arcface_1.JPG \
35-
test_lite_focal_arcface_2.JPG \
36-
0
32+
face_0.jpg face_1.jpg face_2.jpg 0
3733

3834
# GPU推理
39-
./infer_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
35+
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
4036
mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
41-
test_lite_focal_arcface_0.JPG \
42-
test_lite_focal_arcface_1.JPG \
43-
test_lite_focal_arcface_2.JPG \
44-
1
37+
face_0.jpg face_1.jpg face_2.jpg 1
4538

4639
# GPU上TensorRT推理
47-
./infer_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
40+
./infer_adaface_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
4841
mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
49-
test_lite_focal_arcface_0.JPG \
50-
test_lite_focal_arcface_1.JPG \
51-
test_lite_focal_arcface_2.JPG \
52-
2
42+
face_0.jpg face_1.jpg face_2.jpg 2
5343

5444
# XPU推理
5545
./infer_demo mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
5646
mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
57-
test_lite_focal_arcface_0.JPG \
58-
test_lite_focal_arcface_1.JPG \
59-
test_lite_focal_arcface_2.JPG \
60-
3
47+
face_0.jpg face_1.jpg face_2.jpg 3
6148
```
6249

6350
运行完成可视化结果如下图所示
@@ -101,16 +88,22 @@ AdaFace模型加载和初始化,如果使用PaddleInference推理,model_file
10188
> > * **im**: 输入图像,注意需为HWC,BGR格式
10289
> > * **result**: 检测结果,包括检测框,各个框的置信度, FaceRecognitionResult说明参考[视觉模型预测结果](../../../../../docs/api/vision_results/)
10390
104-
### 类成员变量
105-
#### 预处理参数
106-
用户可按照自己的实际需求,修改下列预处理参数,从而影响最终的推理和部署效果
107-
108-
109-
> > * **size**(vector<int>): 通过此参数修改预处理过程中resize的大小,包含两个整型元素,表示[width, height], 默认值为[112, 112]
110-
> > * **alpha**(vector<float>): 预处理归一化的alpha值,计算公式为`x'=x*alpha+beta`,alpha默认为[1. / 127.5, 1.f / 127.5, 1. / 127.5]
111-
> > * **beta**(vector<float>): 预处理归一化的beta值,计算公式为`x'=x*alpha+beta`,beta默认为[-1.f, -1.f, -1.f]
112-
> > * **swap_rb**(bool): 预处理是否将BGR转换成RGB,默认true
113-
> > * **l2_normalize**(bool): 输出人脸向量之前是否执行l2归一化,默认false
91+
### 修改预处理以及后处理的参数
92+
预处理和后处理的参数的需要通过修改AdaFacePostprocessor,AdaFacePreprocessor的成员变量来进行修改。
93+
94+
#### AdaFacePreprocessor成员变量(预处理参数)
95+
> > * **size**(vector<int>): 通过此参数修改预处理过程中resize的大小,包含两个整型元素,表示[width, height], 默认值为[112, 112],
96+
通过AdaFacePreprocessor::SetSize(std::vector<int>& size)来进行修改
97+
> > * **alpha**(vector&lt;float&gt;): 预处理归一化的alpha值,计算公式为`x'=x*alpha+beta`,alpha默认为[1. / 127.5, 1.f / 127.5, 1. / 127.5],
98+
通过AdaFacePreprocessor::SetAlpha(std::vector<float>& alpha)来进行修改
99+
> > * **beta**(vector&lt;float&gt;): 预处理归一化的beta值,计算公式为`x'=x*alpha+beta`,beta默认为[-1.f, -1.f, -1.f],
100+
通过AdaFacePreprocessor::SetBeta(std::vector<float>& beta)来进行修改
101+
> > * **permute**(bool): 预处理是否将BGR转换成RGB,默认true,
102+
通过AdaFacePreprocessor::SetPermute(bool permute)来进行修改
103+
104+
#### AdaFacePostprocessor成员变量(后处理参数)
105+
> > * **l2_normalize**(bool): 输出人脸向量之前是否执行l2归一化,默认false,
106+
AdaFacePostprocessor::SetL2Normalize(bool& l2_normalize)来进行修改
114107
115108
- [模型介绍](../../)
116109
- [Python部署](../python)

Diff for: examples/vision/faceid/adaface/cpp/infer.cc

+38-27
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
/***************************************************************************
2-
*
3-
* Copyright (c) 2021 Baidu.com, Inc. All Rights Reserved
4-
*
5-
**************************************************************************/
6-
7-
/**
8-
* @author Baidu
9-
* @brief demo_image_inference
10-
*
11-
**/
1+
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
1215
#include "fastdeploy/vision.h"
1316

1417
void CpuInfer(const std::string &model_file, const std::string &params_file,
@@ -28,8 +31,8 @@ void CpuInfer(const std::string &model_file, const std::string &params_file,
2831
fastdeploy::vision::FaceRecognitionResult res1;
2932
fastdeploy::vision::FaceRecognitionResult res2;
3033

31-
if ((!model.Predict(&face0, &res0)) || (!model.Predict(&face1, &res1)) ||
32-
(!model.Predict(&face2, &res2))) {
34+
if ((!model.Predict(face0, &res0)) || (!model.Predict(face1, &res1)) ||
35+
(!model.Predict(face2, &res2))) {
3336
std::cerr << "Prediction Failed." << std::endl;
3437
}
3538

@@ -40,9 +43,11 @@ void CpuInfer(const std::string &model_file, const std::string &params_file,
4043
std::cout << "--- [Face 2]:" << res2.Str();
4144

4245
float cosine01 = fastdeploy::vision::utils::CosineSimilarity(
43-
res0.embedding, res1.embedding, model.l2_normalize);
46+
res0.embedding, res1.embedding,
47+
model.GetPostprocessor().GetL2Normalize());
4448
float cosine02 = fastdeploy::vision::utils::CosineSimilarity(
45-
res0.embedding, res2.embedding, model.l2_normalize);
49+
res0.embedding, res2.embedding,
50+
model.GetPostprocessor().GetL2Normalize());
4651
std::cout << "Detect Done! Cosine 01: " << cosine01
4752
<< ", Cosine 02:" << cosine02 << std::endl;
4853
}
@@ -65,8 +70,8 @@ void XpuInfer(const std::string &model_file, const std::string &params_file,
6570
fastdeploy::vision::FaceRecognitionResult res1;
6671
fastdeploy::vision::FaceRecognitionResult res2;
6772

68-
if ((!model.Predict(&face0, &res0)) || (!model.Predict(&face1, &res1)) ||
69-
(!model.Predict(&face2, &res2))) {
73+
if ((!model.Predict(face0, &res0)) || (!model.Predict(face1, &res1)) ||
74+
(!model.Predict(face2, &res2))) {
7075
std::cerr << "Prediction Failed." << std::endl;
7176
}
7277

@@ -77,9 +82,11 @@ void XpuInfer(const std::string &model_file, const std::string &params_file,
7782
std::cout << "--- [Face 2]:" << res2.Str();
7883

7984
float cosine01 = fastdeploy::vision::utils::CosineSimilarity(
80-
res0.embedding, res1.embedding, model.l2_normalize);
85+
res0.embedding, res1.embedding,
86+
model.GetPostprocessor().GetL2Normalize());
8187
float cosine02 = fastdeploy::vision::utils::CosineSimilarity(
82-
res0.embedding, res2.embedding, model.l2_normalize);
88+
res0.embedding, res2.embedding,
89+
model.GetPostprocessor().GetL2Normalize());
8390
std::cout << "Detect Done! Cosine 01: " << cosine01
8491
<< ", Cosine 02:" << cosine02 << std::endl;
8592
}
@@ -103,8 +110,8 @@ void GpuInfer(const std::string &model_file, const std::string &params_file,
103110
fastdeploy::vision::FaceRecognitionResult res1;
104111
fastdeploy::vision::FaceRecognitionResult res2;
105112

106-
if ((!model.Predict(&face0, &res0)) || (!model.Predict(&face1, &res1)) ||
107-
(!model.Predict(&face2, &res2))) {
113+
if ((!model.Predict(face0, &res0)) || (!model.Predict(face1, &res1)) ||
114+
(!model.Predict(face2, &res2))) {
108115
std::cerr << "Prediction Failed." << std::endl;
109116
}
110117

@@ -115,9 +122,11 @@ void GpuInfer(const std::string &model_file, const std::string &params_file,
115122
std::cout << "--- [Face 2]:" << res2.Str();
116123

117124
float cosine01 = fastdeploy::vision::utils::CosineSimilarity(
118-
res0.embedding, res1.embedding, model.l2_normalize);
125+
res0.embedding, res1.embedding,
126+
model.GetPostprocessor().GetL2Normalize());
119127
float cosine02 = fastdeploy::vision::utils::CosineSimilarity(
120-
res0.embedding, res2.embedding, model.l2_normalize);
128+
res0.embedding, res2.embedding,
129+
model.GetPostprocessor().GetL2Normalize());
121130
std::cout << "Detect Done! Cosine 01: " << cosine01
122131
<< ", Cosine 02:" << cosine02 << std::endl;
123132
}
@@ -143,8 +152,8 @@ void TrtInfer(const std::string &model_file, const std::string &params_file,
143152
fastdeploy::vision::FaceRecognitionResult res1;
144153
fastdeploy::vision::FaceRecognitionResult res2;
145154

146-
if ((!model.Predict(&face0, &res0)) || (!model.Predict(&face1, &res1)) ||
147-
(!model.Predict(&face2, &res2))) {
155+
if ((!model.Predict(face0, &res0)) || (!model.Predict(face1, &res1)) ||
156+
(!model.Predict(face2, &res2))) {
148157
std::cerr << "Prediction Failed." << std::endl;
149158
}
150159

@@ -155,9 +164,11 @@ void TrtInfer(const std::string &model_file, const std::string &params_file,
155164
std::cout << "--- [Face 2]:" << res2.Str();
156165

157166
float cosine01 = fastdeploy::vision::utils::CosineSimilarity(
158-
res0.embedding, res1.embedding, model.l2_normalize);
167+
res0.embedding, res1.embedding,
168+
model.GetPostprocessor().GetL2Normalize());
159169
float cosine02 = fastdeploy::vision::utils::CosineSimilarity(
160-
res0.embedding, res2.embedding, model.l2_normalize);
170+
res0.embedding, res2.embedding,
171+
model.GetPostprocessor().GetL2Normalize());
161172
std::cout << "Detect Done! Cosine 01: " << cosine01
162173
<< ", Cosine 02:" << cosine02 << std::endl;
163174
}

Diff for: examples/vision/faceid/adaface/python/README.md

+18-15
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ cd examples/vision/faceid/adaface/python/
1515

1616
#下载AdaFace模型文件和测试图片
1717
#下载测试图片
18-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_0.JPG
19-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_1.JPG
20-
wget https://bj.bcebos.com/paddlehub/test_samples/test_lite_focal_arcface_2.JPG
18+
wget https://bj.bcebos.com/paddlehub/fastdeploy/rknpu2/face_demo.zip
19+
unzip face_demo.zip
2120

2221
# 如果为Paddle模型,运行以下代码
2322
wget https://bj.bcebos.com/paddlehub/fastdeploy/mobilefacenet_adaface.tgz
@@ -26,25 +25,25 @@ tar zxvf mobilefacenet_adaface.tgz -C ./
2625
# CPU推理
2726
python infer.py --model mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
2827
--params_file mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
29-
--face test_lite_focal_arcface_0.JPG \
30-
--face_positive test_lite_focal_arcface_1.JPG \
31-
--face_negative test_lite_focal_arcface_2.JPG \
28+
--face face_0.jpg \
29+
--face_positive face_1.jpg \
30+
--face_negative face_2.jpg \
3231
--device cpu
3332
# GPU推理
3433
python infer.py --model mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
3534
--params_file mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
36-
--face test_lite_focal_arcface_0.JPG \
37-
--face_positive test_lite_focal_arcface_1.JPG \
38-
--face_negative test_lite_focal_arcface_2.JPG \
35+
--face face_0.jpg \
36+
--face_positive face_1.jpg \
37+
--face_negative face_2.jpg \
3938
--device gpu
4039
# GPU上使用TensorRT推理
4140
python infer.py --model mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
4241
--params_file mobilefacenet_adaface/mobilefacenet_adaface.pdiparams \
43-
--face test_lite_focal_arcface_0.JPG \
44-
--face_positive test_lite_focal_arcface_1.JPG \
45-
--face_negative test_lite_focal_arcface_2.JPG \
46-
--device gpu \
47-
--use_trt True
42+
--face face_0.jpg \
43+
--face_positive face_1.jpg \
44+
--face_negative face_2.jpg \
45+
--device gpu \
46+
--use_trt True
4847

4948
# XPU推理
5049
python infer.py --model mobilefacenet_adaface/mobilefacenet_adaface.pdmodel \
@@ -106,11 +105,15 @@ AdaFace模型加载和初始化,其中model_file为导出的ONNX模型格式
106105
#### 预处理参数
107106
用户可按照自己的实际需求,修改下列预处理参数,从而影响最终的推理和部署效果
108107
109-
108+
#### AdaFacePreprocessor的成员变量
109+
以下变量为AdaFacePreprocessor的成员变量
110110
> > * **size**(list[int]): 通过此参数修改预处理过程中resize的大小,包含两个整型元素,表示[width, height], 默认值为[112, 112]
111111
> > * **alpha**(list[float]): 预处理归一化的alpha值,计算公式为`x'=x*alpha+beta`,alpha默认为[1. / 127.5, 1.f / 127.5, 1. / 127.5]
112112
> > * **beta**(list[float]): 预处理归一化的beta值,计算公式为`x'=x*alpha+beta`,beta默认为[-1.f, -1.f, -1.f]
113113
> > * **swap_rb**(bool): 预处理是否将BGR转换成RGB,默认True
114+
115+
#### AdaFacePostprocessor的成员变量
116+
以下变量为AdaFacePostprocessor的成员变量
114117
> > * **l2_normalize**(bool): 输出人脸向量之前是否执行l2归一化,默认False
115118
116119

0 commit comments

Comments
 (0)