mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 20:02:53 +08:00 
			
		
		
		
	[RKNPU2] Add Quantized PPHumanSeg (#905)
* 更新rknpu2 backend核心代码 * 更新模型导出核心代码 * 删除无用的config文件 * 新增配置文件以及修改文档 * 模型转换以及文档 * 更新文档 * 更新与配置文件 * 更新PPHumanSeg全量化 * 更新文档 * 更新文档 * 更新文档
This commit is contained in:
		| @@ -25,80 +25,7 @@ RKNPU部署模型前需要将Paddle模型转换成RKNN模型,具体步骤如 | ||||
|  | ||||
| ## 模型转换example | ||||
|  | ||||
| 下面以Portait-PP-HumanSegV2_Lite(肖像分割模型)为例子,教大家如何转换PPSeg模型到RKNN模型。 | ||||
| ```bash | ||||
| # 下载Paddle2ONNX仓库 | ||||
| git clone https://github.com/PaddlePaddle/Paddle2ONNX | ||||
|  | ||||
| # 下载Paddle静态图模型并为Paddle静态图模型固定输入shape | ||||
| ## 进入为Paddle静态图模型固定输入shape的目录 | ||||
| cd Paddle2ONNX/tools/paddle | ||||
| ## 下载Paddle静态图模型并解压 | ||||
| wget https://bj.bcebos.com/paddlehub/fastdeploy/Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz | ||||
| tar xvf Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz | ||||
| python paddle_infer_shape.py --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer/ \ | ||||
|                              --model_filename model.pdmodel \ | ||||
|                              --params_filename model.pdiparams \ | ||||
|                              --save_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ | ||||
|                              --input_shape_dict="{'x':[1,3,144,256]}" | ||||
|  | ||||
| # 静态图转ONNX模型,注意,这里的save_file请和压缩包名对齐 | ||||
| paddle2onnx --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ | ||||
|             --model_filename model.pdmodel \ | ||||
|             --params_filename model.pdiparams \ | ||||
|             --save_file Portrait_PP_HumanSegV2_Lite_256x144_infer/Portrait_PP_HumanSegV2_Lite_256x144_infer.onnx \ | ||||
|             --enable_dev_version True | ||||
|  | ||||
| # ONNX模型转RKNN模型 | ||||
| # 将ONNX模型目录拷贝到Fastdeploy根目录 | ||||
| cp -r ./Portrait_PP_HumanSegV2_Lite_256x144_infer /path/to/Fastdeploy | ||||
| # 转换模型,模型将生成在Portrait_PP_HumanSegV2_Lite_256x144_infer目录下 | ||||
| python tools/rknpu2/export.py --config_path tools/rknpu2/config/RK3588/Portrait_PP_HumanSegV2_Lite_256x144_infer.yaml | ||||
| ``` | ||||
|  | ||||
| ## 修改yaml配置文件 | ||||
|  | ||||
| 在**模型转换example**中,我们对模型的shape进行了固定,因此对应的yaml文件也要进行修改,如下: | ||||
|  | ||||
| **原yaml文件** | ||||
| ```yaml | ||||
| Deploy: | ||||
|   input_shape: | ||||
|   - -1 | ||||
|   - 3 | ||||
|   - -1 | ||||
|   - -1 | ||||
|   model: model.pdmodel | ||||
|   output_dtype: float32 | ||||
|   output_op: none | ||||
|   params: model.pdiparams | ||||
|   transforms: | ||||
|   - target_size: | ||||
|     - 256 | ||||
|     - 144 | ||||
|     type: Resize | ||||
|   - type: Normalize | ||||
| ``` | ||||
|  | ||||
| **修改后的yaml文件** | ||||
| ```yaml | ||||
| Deploy: | ||||
|   input_shape: | ||||
|   - 1 | ||||
|   - 3 | ||||
|   - 144 | ||||
|   - 256 | ||||
|   model: model.pdmodel | ||||
|   output_dtype: float32 | ||||
|   output_op: none | ||||
|   params: model.pdiparams | ||||
|   transforms: | ||||
|   - target_size: | ||||
|     - 256 | ||||
|     - 144 | ||||
|     type: Resize | ||||
|   - type: Normalize | ||||
| ``` | ||||
| * [PPHumanSeg](./pp_humanseg.md) | ||||
|  | ||||
| ## 详细部署文档 | ||||
| - [RKNN总体部署教程](../../../../../docs/cn/faq/rknpu2/rknpu2.md) | ||||
|   | ||||
| @@ -62,16 +62,12 @@ make install | ||||
|  | ||||
| ```bash | ||||
| cd ./build/install | ||||
| ./rknpu_test | ||||
| ./rknpu_test model/Portrait_PP_HumanSegV2_Lite_256x144_infer/ images/portrait_heng.jpg | ||||
| ``` | ||||
|  | ||||
| ## 运行结果展示 | ||||
| 运行后将在install文件夹下生成human_pp_humansegv2_lite_npu_result.jpg文件,如下图: | ||||
|  | ||||
|  | ||||
| ## 注意事项 | ||||
| RKNPU上对模型的输入要求是使用NHWC格式,且图片归一化操作会在转RKNN模型时,内嵌到模型中,因此我们在使用FastDeploy部署时, | ||||
| 需要先调用DisableNormalizePermute(C++)或`disable_normalize_permute(Python),在预处理阶段禁用归一化以及数据格式的转换。 | ||||
| 需要先调用DisableNormalizeAndPermute(C++)或`disable_normalize_and_permute(Python),在预处理阶段禁用归一化以及数据格式的转换。 | ||||
|  | ||||
| - [模型介绍](../../) | ||||
| - [Python部署](../python) | ||||
|   | ||||
| @@ -92,7 +92,7 @@ int main(int argc, char* argv[]) { | ||||
|   } | ||||
|  | ||||
|   RKNPU2Infer(argv[1], argv[2]); | ||||
|   ONNXInfer(argv[1], argv[2]); | ||||
| //  ONNXInfer(argv[1], argv[2]); | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										80
									
								
								examples/vision/segmentation/paddleseg/rknpu2/pp_humanseg.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								examples/vision/segmentation/paddleseg/rknpu2/pp_humanseg.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| # PPHumanSeg模型部署 | ||||
|  | ||||
| ## 转换模型 | ||||
| 下面以Portait-PP-HumanSegV2_Lite(肖像分割模型)为例子,教大家如何转换PPSeg模型到RKNN模型。 | ||||
|  | ||||
| ```bash | ||||
| # 下载Paddle2ONNX仓库 | ||||
| git clone https://github.com/PaddlePaddle/Paddle2ONNX | ||||
|  | ||||
| # 下载Paddle静态图模型并为Paddle静态图模型固定输入shape | ||||
| ## 进入为Paddle静态图模型固定输入shape的目录 | ||||
| cd Paddle2ONNX/tools/paddle | ||||
| ## 下载Paddle静态图模型并解压 | ||||
| wget https://bj.bcebos.com/paddlehub/fastdeploy/Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz | ||||
| tar xvf Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz | ||||
| python paddle_infer_shape.py --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer/ \ | ||||
|                              --model_filename model.pdmodel \ | ||||
|                              --params_filename model.pdiparams \ | ||||
|                              --save_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ | ||||
|                              --input_shape_dict="{'x':[1,3,144,256]}" | ||||
|  | ||||
| # 静态图转ONNX模型,注意,这里的save_file请和压缩包名对齐 | ||||
| paddle2onnx --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ | ||||
|             --model_filename model.pdmodel \ | ||||
|             --params_filename model.pdiparams \ | ||||
|             --save_file Portrait_PP_HumanSegV2_Lite_256x144_infer/Portrait_PP_HumanSegV2_Lite_256x144_infer.onnx \ | ||||
|             --enable_dev_version True | ||||
|  | ||||
| # ONNX模型转RKNN模型 | ||||
| # 将ONNX模型目录拷贝到Fastdeploy根目录 | ||||
| cp -r ./Portrait_PP_HumanSegV2_Lite_256x144_infer /path/to/Fastdeploy | ||||
| # 转换模型,模型将生成在Portrait_PP_HumanSegV2_Lite_256x144_infer目录下 | ||||
| python tools/rknpu2/export.py \ | ||||
|         --config_path tools/rknpu2/config/Portrait_PP_HumanSegV2_Lite_256x144_infer.yaml \ | ||||
|         --target_platform rk3588 | ||||
| ``` | ||||
|  | ||||
| ## 修改yaml配置文件 | ||||
|  | ||||
| 在**模型转换example**中,我们对模型的shape进行了固定,因此对应的yaml文件也要进行修改,如下: | ||||
|  | ||||
| **原yaml文件** | ||||
| ```yaml | ||||
| Deploy: | ||||
|   input_shape: | ||||
|   - -1 | ||||
|   - 3 | ||||
|   - -1 | ||||
|   - -1 | ||||
|   model: model.pdmodel | ||||
|   output_dtype: float32 | ||||
|   output_op: none | ||||
|   params: model.pdiparams | ||||
|   transforms: | ||||
|   - target_size: | ||||
|     - 256 | ||||
|     - 144 | ||||
|     type: Resize | ||||
|   - type: Normalize | ||||
| ``` | ||||
|  | ||||
| **修改后的yaml文件** | ||||
| ```yaml | ||||
| Deploy: | ||||
|   input_shape: | ||||
|   - 1 | ||||
|   - 3 | ||||
|   - 144 | ||||
|   - 256 | ||||
|   model: model.pdmodel | ||||
|   output_dtype: float32 | ||||
|   output_op: none | ||||
|   params: model.pdiparams | ||||
|   transforms: | ||||
|   - target_size: | ||||
|     - 256 | ||||
|     - 144 | ||||
|     type: Resize | ||||
|   - type: Normalize | ||||
| ``` | ||||
| @@ -23,15 +23,11 @@ python3 infer.py --model_file ./Portrait_PP_HumanSegV2_Lite_256x144_infer/Portra | ||||
|                 --image images/portrait_heng.jpg | ||||
| ``` | ||||
|  | ||||
| 运行完成可视化结果如下图所示 | ||||
| <div  align="center">   | ||||
| <img src="https://user-images.githubusercontent.com/16222477/191712880-91ae128d-247a-43e0-b1e3-cafae78431e0.jpg", width=512px, height=256px /> | ||||
| </div> | ||||
|  | ||||
|  | ||||
| ## 注意事项 | ||||
| RKNPU上对模型的输入要求是使用NHWC格式,且图片归一化操作会在转RKNN模型时,内嵌到模型中,因此我们在使用FastDeploy部署时, | ||||
| 需要先调用DisableNormalizePermute(C++)或`disable_normalize_permute(Python),在预处理阶段禁用归一化以及数据格式的转换。 | ||||
| 需要先调用DisableNormalizeAndPermute(C++)或`disable_normalize_and_permute(Python),在预处理阶段禁用归一化以及数据格式的转换。 | ||||
|  | ||||
| ## 其它文档 | ||||
|  | ||||
| - [PaddleSeg 模型介绍](..) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zheng_Bicheng
					Zheng_Bicheng