mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-16 05:30:58 +08:00
Merge branch 'develop' of https://github.com/PaddlePaddle/FastDeploy into huawei
This commit is contained in:
@@ -62,7 +62,7 @@ if(PADDLEINFERENCE_DIRECTORY)
|
|||||||
execute_process(COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/copy_directory.py ${PADDLEINFERENCE_DIRECTORY} ${THIRD_PARTY_PATH}/install/paddle_inference)
|
execute_process(COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/copy_directory.py ${PADDLEINFERENCE_DIRECTORY} ${THIRD_PARTY_PATH}/install/paddle_inference)
|
||||||
else()
|
else()
|
||||||
set(PADDLEINFERENCE_URL_BASE "https://bj.bcebos.com/fastdeploy/third_libs/")
|
set(PADDLEINFERENCE_URL_BASE "https://bj.bcebos.com/fastdeploy/third_libs/")
|
||||||
set(PADDLEINFERENCE_VERSION "2.4-dev3")
|
set(PADDLEINFERENCE_VERSION "2.4-dev4")
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if (WITH_GPU)
|
if (WITH_GPU)
|
||||||
set(PADDLEINFERENCE_FILE "paddle_inference-win-x64-gpu-trt-${PADDLEINFERENCE_VERSION}.zip")
|
set(PADDLEINFERENCE_FILE "paddle_inference-win-x64-gpu-trt-${PADDLEINFERENCE_VERSION}.zip")
|
||||||
|
@@ -23,4 +23,4 @@ ONNX模型不能直接调用RK芯片中的NPU进行运算,需要把ONNX模型
|
|||||||
| Segmentation | [PP-HumanSegV2Lite](../../../../examples/vision/segmentation/paddleseg/rknpu2/README.md) | portrait(int8) | 133/43 |
|
| Segmentation | [PP-HumanSegV2Lite](../../../../examples/vision/segmentation/paddleseg/rknpu2/README.md) | portrait(int8) | 133/43 |
|
||||||
| Segmentation | [PP-HumanSegV2Lite](../../../../examples/vision/segmentation/paddleseg/rknpu2/README.md) | human(int8) | 133/43 |
|
| Segmentation | [PP-HumanSegV2Lite](../../../../examples/vision/segmentation/paddleseg/rknpu2/README.md) | human(int8) | 133/43 |
|
||||||
| Face Detection | [SCRFD](../../../../examples/vision/facedet/scrfd/rknpu2/README.md) | SCRFD-2.5G-kps-640(int8) | 108/42 |
|
| Face Detection | [SCRFD](../../../../examples/vision/facedet/scrfd/rknpu2/README.md) | SCRFD-2.5G-kps-640(int8) | 108/42 |
|
||||||
| Classification | [ResNet](../../../../examples/vision/classification/paddleclas/rknpu2/README.md) | ResNet50_vd | -/92 |
|
| Classification | [ResNet](../../../../examples/vision/classification/paddleclas/rknpu2/README.md) | ResNet50_vd | -/33 |
|
||||||
|
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
# Linux上C++部署
|
# Linux上C++部署
|
||||||
|
|
||||||
1. 编译完成运行,提示找不到.so文件
|
1. 编译完成运行,提示找不到.so文件 "cannot open shared object file: No such file or directory"
|
||||||
|
|
||||||
|
|
||||||
在执行二进制文件时,需要能够在环境变量中找到FastDeploy相关的库文件。FastDeploy提供了辅助脚本来帮助完成。
|
在执行二进制文件时,需要能够在环境变量中找到FastDeploy相关的库文件。FastDeploy提供了辅助脚本来帮助完成。
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
## 转换模型
|
## 转换模型
|
||||||
下面以 ResNet50_vd为例子,教大家如何转换分类模型到RKNN模型。
|
下面以 ResNet50_vd为例子,教大家如何转换分类模型到RKNN模型。
|
||||||
|
|
||||||
|
### 导出ONNX模型
|
||||||
```bash
|
```bash
|
||||||
# 安装 paddle2onnx
|
# 安装 paddle2onnx
|
||||||
pip install paddle2onnx
|
pip install paddle2onnx
|
||||||
@@ -17,34 +18,59 @@ paddle2onnx --model_dir ResNet50_vd_infer \
|
|||||||
--params_filename inference.pdiparams \
|
--params_filename inference.pdiparams \
|
||||||
--save_file ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
--save_file ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
||||||
--enable_dev_version True \
|
--enable_dev_version True \
|
||||||
--opset_version 12 \
|
--opset_version 10 \
|
||||||
--enable_onnx_checker True
|
--enable_onnx_checker True
|
||||||
|
|
||||||
# 固定shape,注意这里的inputs得对应netron.app展示的 inputs 的 name,有可能是image 或者 x
|
# 固定shape,注意这里的inputs得对应netron.app展示的 inputs 的 name,有可能是image 或者 x
|
||||||
python -m paddle2onnx.optimize --input_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
python -m paddle2onnx.optimize --input_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
||||||
--output_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
--output_model ResNet50_vd_infer/ResNet50_vd_infer.onnx \
|
||||||
--input_shape_dict "{'inputs':[1,3,224,224]}"
|
--input_shape_dict "{'inputs':[1,3,224,224]}"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 编写模型导出配置文件
|
### 编写模型导出配置文件
|
||||||
以转化RK3588的RKNN模型为例子,我们需要编辑tools/rknpu2/config/ResNet50_vd_infer_rknn.yaml,来转换ONNX模型到RKNN模型。
|
以转化RK3588的RKNN模型为例子,我们需要编辑tools/rknpu2/config/ResNet50_vd_infer_rknn.yaml,来转换ONNX模型到RKNN模型。
|
||||||
|
|
||||||
默认的 mean=0, std=1是在内存做normalize,如果你需要在NPU上执行normalize操作,请根据你的模型配置normalize参数,例如:
|
如果你需要在NPU上执行normalize操作,请根据你的模型配置normalize参数,例如:
|
||||||
```yaml
|
```yaml
|
||||||
model_path: ./ResNet50_vd_infer.onnx
|
model_path: ./ResNet50_vd_infer/ResNet50_vd_infer.onnx
|
||||||
output_folder: ./
|
output_folder: ./ResNet50_vd_infer
|
||||||
target_platform: RK3588
|
mean:
|
||||||
normalize:
|
-
|
||||||
mean: [[0.485,0.456,0.406]]
|
- 123.675
|
||||||
std: [[0.229,0.224,0.225]]
|
- 116.28
|
||||||
outputs: []
|
- 103.53
|
||||||
outputs_nodes: []
|
std:
|
||||||
|
-
|
||||||
|
- 58.395
|
||||||
|
- 57.12
|
||||||
|
- 57.375
|
||||||
|
outputs_nodes:
|
||||||
do_quantization: False
|
do_quantization: False
|
||||||
dataset:
|
dataset: "./ResNet50_vd_infer/dataset.txt"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**在CPU上做normalize**可以参考以下yaml:
|
||||||
|
```yaml
|
||||||
|
model_path: ./ResNet50_vd_infer/ResNet50_vd_infer.onnx
|
||||||
|
output_folder: ./ResNet50_vd_infer
|
||||||
|
mean:
|
||||||
|
-
|
||||||
|
- 0
|
||||||
|
- 0
|
||||||
|
- 0
|
||||||
|
std:
|
||||||
|
-
|
||||||
|
- 1
|
||||||
|
- 1
|
||||||
|
- 1
|
||||||
|
outputs_nodes:
|
||||||
|
do_quantization: False
|
||||||
|
dataset: "./ResNet50_vd_infer/dataset.txt"
|
||||||
|
```
|
||||||
|
这里我们选择在NPU上执行normalize操作.
|
||||||
|
|
||||||
# ONNX模型转RKNN模型
|
|
||||||
|
### ONNX模型转RKNN模型
|
||||||
```shell
|
```shell
|
||||||
python tools/rknpu2/export.py \
|
python tools/rknpu2/export.py \
|
||||||
--config_path tools/rknpu2/config/ResNet50_vd_infer_rknn.yaml \
|
--config_path tools/rknpu2/config/ResNet50_vd_infer_rknn.yaml \
|
||||||
@@ -54,4 +80,4 @@ python tools/rknpu2/export.py \
|
|||||||
## 其他链接
|
## 其他链接
|
||||||
- [Cpp部署](./cpp)
|
- [Cpp部署](./cpp)
|
||||||
- [Python部署](./python)
|
- [Python部署](./python)
|
||||||
- [视觉模型预测结果](../../../../../docs/api/vision_results/)
|
- [视觉模型预测结果](../../../../../docs/api/vision_results/)
|
||||||
|
@@ -57,7 +57,7 @@ bool PaddleClasPreprocessor::BuildPreprocessPipelineFromConfig() {
|
|||||||
int height = op.begin()->second["size"].as<int>();
|
int height = op.begin()->second["size"].as<int>();
|
||||||
processors_.push_back(std::make_shared<CenterCrop>(width, height));
|
processors_.push_back(std::make_shared<CenterCrop>(width, height));
|
||||||
} else if (op_name == "NormalizeImage") {
|
} else if (op_name == "NormalizeImage") {
|
||||||
if (!disable_normalize) {
|
if (!disable_normalize_) {
|
||||||
auto mean = op.begin()->second["mean"].as<std::vector<float>>();
|
auto mean = op.begin()->second["mean"].as<std::vector<float>>();
|
||||||
auto std = op.begin()->second["std"].as<std::vector<float>>();
|
auto std = op.begin()->second["std"].as<std::vector<float>>();
|
||||||
auto scale = op.begin()->second["scale"].as<float>();
|
auto scale = op.begin()->second["scale"].as<float>();
|
||||||
@@ -67,7 +67,7 @@ bool PaddleClasPreprocessor::BuildPreprocessPipelineFromConfig() {
|
|||||||
processors_.push_back(std::make_shared<Normalize>(mean, std));
|
processors_.push_back(std::make_shared<Normalize>(mean, std));
|
||||||
}
|
}
|
||||||
} else if (op_name == "ToCHWImage") {
|
} else if (op_name == "ToCHWImage") {
|
||||||
if (!disable_permute) {
|
if (!disable_permute_) {
|
||||||
processors_.push_back(std::make_shared<HWC2CHW>());
|
processors_.push_back(std::make_shared<HWC2CHW>());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -83,14 +83,14 @@ bool PaddleClasPreprocessor::BuildPreprocessPipelineFromConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PaddleClasPreprocessor::DisableNormalize() {
|
void PaddleClasPreprocessor::DisableNormalize() {
|
||||||
this->disable_normalize = true;
|
this->disable_normalize_ = true;
|
||||||
// the DisableNormalize function will be invalid if the configuration file is loaded during preprocessing
|
// the DisableNormalize function will be invalid if the configuration file is loaded during preprocessing
|
||||||
if (!BuildPreprocessPipelineFromConfig()) {
|
if (!BuildPreprocessPipelineFromConfig()) {
|
||||||
FDERROR << "Failed to build preprocess pipeline from configuration file." << std::endl;
|
FDERROR << "Failed to build preprocess pipeline from configuration file." << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void PaddleClasPreprocessor::DisablePermute() {
|
void PaddleClasPreprocessor::DisablePermute() {
|
||||||
this->disable_permute = true;
|
this->disable_permute_ = true;
|
||||||
// the DisablePermute function will be invalid if the configuration file is loaded during preprocessing
|
// the DisablePermute function will be invalid if the configuration file is loaded during preprocessing
|
||||||
if (!BuildPreprocessPipelineFromConfig()) {
|
if (!BuildPreprocessPipelineFromConfig()) {
|
||||||
FDERROR << "Failed to build preprocess pipeline from configuration file." << std::endl;
|
FDERROR << "Failed to build preprocess pipeline from configuration file." << std::endl;
|
||||||
|
@@ -59,9 +59,9 @@ class FASTDEPLOY_DECL PaddleClasPreprocessor {
|
|||||||
// GPU device id
|
// GPU device id
|
||||||
int device_id_ = -1;
|
int device_id_ = -1;
|
||||||
// for recording the switch of hwc2chw
|
// for recording the switch of hwc2chw
|
||||||
bool disable_permute = false;
|
bool disable_permute_ = false;
|
||||||
// for recording the switch of normalize
|
// for recording the switch of normalize
|
||||||
bool disable_normalize = false;
|
bool disable_normalize_ = false;
|
||||||
// read config file
|
// read config file
|
||||||
std::string config_file_;
|
std::string config_file_;
|
||||||
};
|
};
|
||||||
|
@@ -3,6 +3,6 @@ requests
|
|||||||
tqdm
|
tqdm
|
||||||
numpy
|
numpy
|
||||||
opencv-python
|
opencv-python
|
||||||
fastdeploy-tools>=0.0.1
|
fastdeploy-tools>=0.0.2
|
||||||
pyyaml
|
pyyaml
|
||||||
fastapi
|
fastapi
|
||||||
|
@@ -1,10 +1,15 @@
|
|||||||
model_path: ./ResNet50_vd_infer.onnx
|
model_path: ./ResNet50_vd_infer/ResNet50_vd_infer.onnx
|
||||||
output_folder: ./
|
output_folder: ./ResNet50_vd_infer
|
||||||
target_platform: RK3588
|
mean:
|
||||||
normalize:
|
-
|
||||||
mean: [[0, 0, 0]]
|
- 123.675
|
||||||
std: [[1, 1, 1]]
|
- 116.28
|
||||||
outputs: []
|
- 103.53
|
||||||
outputs_nodes: []
|
std:
|
||||||
|
-
|
||||||
|
- 58.395
|
||||||
|
- 57.12
|
||||||
|
- 57.375
|
||||||
|
outputs_nodes:
|
||||||
do_quantization: False
|
do_quantization: False
|
||||||
dataset:
|
dataset: "./ResNet50_vd_infer/dataset.txt"
|
||||||
|
Reference in New Issue
Block a user