mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 20:02:53 +08:00 
			
		
		
		
	[Backend] Add YOLOv5、PPYOLOE and PP-Liteseg for RV1126 (#647)
* add yolov5 and ppyoloe for rk1126 * update code, rename rk1126 to rv1126 * add PP-Liteseg * update lite lib * updade doc for PPYOLOE * update doc * fix docs * fix doc and examples * update code * uodate doc * update doc Co-authored-by: Jason <jiangjiajun@baidu.com>
This commit is contained in:
		
							
								
								
									
										37
									
								
								examples/vision/detection/yolov5/rv1126/cpp/CMakeLists.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								examples/vision/detection/yolov5/rv1126/cpp/CMakeLists.txt
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| PROJECT(infer_demo C CXX) | ||||
| CMAKE_MINIMUM_REQUIRED (VERSION 3.10) | ||||
|  | ||||
| # 指定下载解压后的fastdeploy库路径 | ||||
| option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.") | ||||
|  | ||||
| include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake) | ||||
|  | ||||
| # 添加FastDeploy依赖头文件 | ||||
| include_directories(${FASTDEPLOY_INCS}) | ||||
| include_directories(${FastDeploy_INCLUDE_DIRS}) | ||||
|  | ||||
| add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.cc) | ||||
| # 添加FastDeploy库依赖 | ||||
| target_link_libraries(infer_demo ${FASTDEPLOY_LIBS}) | ||||
|  | ||||
| set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/build/install) | ||||
|  | ||||
| install(TARGETS infer_demo DESTINATION ./) | ||||
|  | ||||
| install(DIRECTORY models DESTINATION ./) | ||||
| install(DIRECTORY images DESTINATION ./) | ||||
|  | ||||
| file(GLOB FASTDEPLOY_LIBS ${FASTDEPLOY_INSTALL_DIR}/lib/*) | ||||
| install(PROGRAMS ${FASTDEPLOY_LIBS} DESTINATION lib) | ||||
|  | ||||
| file(GLOB OPENCV_LIBS ${FASTDEPLOY_INSTALL_DIR}/third_libs/install/opencv/lib/lib*) | ||||
| install(PROGRAMS ${OPENCV_LIBS} DESTINATION lib) | ||||
|  | ||||
| file(GLOB PADDLELITE_LIBS ${FASTDEPLOY_INSTALL_DIR}/third_libs/install/paddlelite/lib/lib*) | ||||
| install(PROGRAMS ${PADDLELITE_LIBS} DESTINATION lib) | ||||
|  | ||||
| file(GLOB TIMVX_LIBS ${FASTDEPLOY_INSTALL_DIR}/third_libs/install/paddlelite/lib/verisilicon_timvx/*) | ||||
| install(PROGRAMS ${TIMVX_LIBS} DESTINATION lib) | ||||
|  | ||||
| file(GLOB ADB_TOOLS run_with_adb.sh) | ||||
| install(PROGRAMS ${ADB_TOOLS} DESTINATION ./) | ||||
							
								
								
									
										54
									
								
								examples/vision/detection/yolov5/rv1126/cpp/README.md
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										54
									
								
								examples/vision/detection/yolov5/rv1126/cpp/README.md
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| # YOLOv5 量化模型 C++ 部署示例 | ||||
|  | ||||
| 本目录下提供的 `infer.cc`,可以帮助用户快速完成 YOLOv5 量化模型在 RV1126 上的部署推理加速。 | ||||
|  | ||||
| ## 部署准备 | ||||
| ### FastDeploy 交叉编译环境准备 | ||||
| - 1. 软硬件环境满足要求,以及交叉编译环境的准备,请参考:[FastDeploy 交叉编译环境准备](../../../../../../docs/cn/build_and_install/rv1126.md#交叉编译环境搭建)   | ||||
|  | ||||
| ### 量化模型准备 | ||||
| - 1. 用户可以直接使用由 FastDeploy 提供的量化模型进行部署。 | ||||
| - 2. 用户可以使用 FastDeploy 提供的[一键模型自动化压缩工具](../../../../../../tools/common_tools/auto_compression/),自行进行模型量化, 并使用产出的量化模型进行部署。 | ||||
| - 更多量化相关相关信息可查阅[模型量化](../../quantize/README.md) | ||||
|  | ||||
| ## 在 RV1126 上部署量化后的 YOLOv5 检测模型 | ||||
| 请按照以下步骤完成在 RV1126 上部署 YOLOv5 量化模型: | ||||
| 1. 交叉编译编译 FastDeploy 库,具体请参考:[交叉编译 FastDeploy](../../../../../../docs/cn/build_and_install/rv1126.md#基于-paddlelite-的-fastdeploy-交叉编译库编译) | ||||
|  | ||||
| 2. 将编译后的库拷贝到当前目录,可使用如下命令: | ||||
| ```bash | ||||
| cp -r FastDeploy/build/fastdeploy-tmivx/ FastDeploy/examples/vision/detection/yolov5/rv1126/cpp | ||||
| ``` | ||||
|  | ||||
| 3. 在当前路径下载部署所需的模型和示例图片: | ||||
| ```bash | ||||
| mkdir models && mkdir images | ||||
| wget https://bj.bcebos.com/fastdeploy/models/yolov5s_ptq_model.tar.gz | ||||
| tar -xvf yolov5s_ptq_model.tar.gz | ||||
| cp -r yolov5s_ptq_model models | ||||
| wget https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg | ||||
| cp -r 000000014439.jpg images | ||||
| ``` | ||||
|  | ||||
| 4. 编译部署示例,可使入如下命令: | ||||
| ```bash | ||||
| mkdir build && cd build | ||||
| cmake -DCMAKE_TOOLCHAIN_FILE=${PWD}/../fastdeploy-tmivx/timvx.cmake -DFASTDEPLOY_INSTALL_DIR=${PWD}/../fastdeploy-tmivx .. | ||||
| make -j8 | ||||
| make install | ||||
| # 成功编译之后,会生成 install 文件夹,里面有一个运行 demo 和部署所需的库 | ||||
| ``` | ||||
|  | ||||
| 5. 基于 adb 工具部署 YOLOv5 检测模型到 Rockchip RV1126,可使用如下命令: | ||||
| ```bash | ||||
| # 进入 install 目录 | ||||
| cd FastDeploy/examples/vision/detection/yolov5/rv1126/cpp/build/install/ | ||||
| # 如下命令表示:bash run_with_adb.sh 需要运行的demo 模型路径 图片路径 设备的DEVICE_ID | ||||
| bash run_with_adb.sh infer_demo yolov5s_ptq_model 000000014439.jpg $DEVICE_ID | ||||
| ``` | ||||
|  | ||||
| 部署成功后,vis_result.jpg 保存的结果如下: | ||||
|  | ||||
| <img width="640" src="https://user-images.githubusercontent.com/30516196/203706969-dd58493c-6635-4ee7-9421-41c2e0c9524b.png"> | ||||
|  | ||||
| 需要特别注意的是,在 RV1126 上部署的模型需要是量化后的模型,模型的量化请参考:[模型量化](../../../../../../docs/cn/quantize.md) | ||||
							
								
								
									
										64
									
								
								examples/vision/detection/yolov5/rv1126/cpp/infer.cc
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										64
									
								
								examples/vision/detection/yolov5/rv1126/cpp/infer.cc
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| // Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. | ||||
| // | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| #include "fastdeploy/vision.h" | ||||
| #ifdef WIN32 | ||||
| const char sep = '\\'; | ||||
| #else | ||||
| const char sep = '/'; | ||||
| #endif | ||||
|  | ||||
| void InitAndInfer(const std::string& model_dir, const std::string& image_file) { | ||||
|   auto model_file = model_dir + sep + "model.pdmodel"; | ||||
|   auto params_file = model_dir + sep + "model.pdiparams"; | ||||
|   auto subgraph_file = model_dir + sep + "subgraph.txt"; | ||||
|  | ||||
|   fastdeploy::RuntimeOption option; | ||||
|   option.UseTimVX(); | ||||
|   option.SetLiteSubgraphPartitionPath(subgraph_file); | ||||
|  | ||||
|   auto model = fastdeploy::vision::detection::YOLOv5( | ||||
|       model_file, params_file, option, fastdeploy::ModelFormat::PADDLE); | ||||
|   assert(model.Initialized()); | ||||
|  | ||||
|   auto im = cv::imread(image_file); | ||||
|  | ||||
|   fastdeploy::vision::DetectionResult res; | ||||
|   if (!model.Predict(im, &res)) { | ||||
|     std::cerr << "Failed to predict." << std::endl; | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   std::cout << res.Str() << std::endl; | ||||
|  | ||||
|   auto vis_im = fastdeploy::vision::VisDetection(im, res); | ||||
|   cv::imwrite("vis_result.jpg", vis_im); | ||||
|   std::cout << "Visualized result saved in ./vis_result.jpg" << std::endl; | ||||
| } | ||||
|  | ||||
| int main(int argc, char* argv[]) { | ||||
|   if (argc < 3) { | ||||
|     std::cout << "Usage: infer_demo path/to/quant_model " | ||||
|                  "path/to/image " | ||||
|                  "run_option, " | ||||
|                  "e.g ./infer_demo ./yolov5s_quant ./000000014439.jpg" | ||||
|               << std::endl; | ||||
|     return -1; | ||||
|   } | ||||
|  | ||||
|   std::string model_dir = argv[1]; | ||||
|   std::string test_image = argv[2]; | ||||
|   InitAndInfer(model_dir, test_image); | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										47
									
								
								examples/vision/detection/yolov5/rv1126/cpp/run_with_adb.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								examples/vision/detection/yolov5/rv1126/cpp/run_with_adb.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| #!/bin/bash | ||||
| HOST_SPACE=${PWD} | ||||
| echo ${HOST_SPACE} | ||||
| WORK_SPACE=/data/local/tmp/test | ||||
|  | ||||
| # The first parameter represents the demo name | ||||
| DEMO_NAME=image_classification_demo | ||||
| if [ -n "$1" ]; then | ||||
|   DEMO_NAME=$1 | ||||
| fi | ||||
|  | ||||
| # The second parameter represents the model name | ||||
| MODEL_NAME=mobilenet_v1_fp32_224 | ||||
| if [ -n "$2" ]; then | ||||
|   MODEL_NAME=$2 | ||||
| fi | ||||
|  | ||||
| # The third parameter indicates the name of the image to be tested | ||||
| IMAGE_NAME=0001.jpg | ||||
| if [ -n "$3" ]; then | ||||
|   IMAGE_NAME=$3 | ||||
| fi | ||||
|  | ||||
| # The fourth parameter represents the ID of the device | ||||
| ADB_DEVICE_NAME= | ||||
| if [ -n "$4" ]; then | ||||
|   ADB_DEVICE_NAME="-s $4" | ||||
| fi | ||||
|  | ||||
| # Set the environment variables required during the running process | ||||
| EXPORT_ENVIRONMENT_VARIABLES="export GLOG_v=5; export VIV_VX_ENABLE_GRAPH_TRANSFORM=-pcq:1; export VIV_VX_SET_PER_CHANNEL_ENTROPY=100; export TIMVX_BATCHNORM_FUSION_MAX_ALLOWED_QUANT_SCALE_DEVIATION=300000; export VSI_NN_LOG_LEVEL=5;" | ||||
|  | ||||
| EXPORT_ENVIRONMENT_VARIABLES="${EXPORT_ENVIRONMENT_VARIABLES}export LD_LIBRARY_PATH=${WORK_SPACE}/lib:\$LD_LIBRARY_PATH;" | ||||
|  | ||||
| # Please install adb, and DON'T run this in the docker. | ||||
| set -e | ||||
| adb $ADB_DEVICE_NAME shell "rm -rf $WORK_SPACE" | ||||
| adb $ADB_DEVICE_NAME shell "mkdir -p $WORK_SPACE" | ||||
|  | ||||
| # Upload the demo, librarys, model and test images to the device | ||||
| adb $ADB_DEVICE_NAME push ${HOST_SPACE}/lib $WORK_SPACE | ||||
| adb $ADB_DEVICE_NAME push ${HOST_SPACE}/${DEMO_NAME} $WORK_SPACE | ||||
| adb $ADB_DEVICE_NAME push models $WORK_SPACE | ||||
| adb $ADB_DEVICE_NAME push images $WORK_SPACE | ||||
|  | ||||
| # Execute the deployment demo | ||||
| adb $ADB_DEVICE_NAME shell "cd $WORK_SPACE; ${EXPORT_ENVIRONMENT_VARIABLES} chmod +x ./${DEMO_NAME}; ./${DEMO_NAME} ./models/${MODEL_NAME} ./images/$IMAGE_NAME" | ||||
		Reference in New Issue
	
	Block a user
	 yeliang2258
					yeliang2258