本文档是在NVIDIA Jetson Xavier NX (Jetpack的版本为4.4.1)上部署PaddleDetection的c++推理教程。
Jetpack 4.4.1的环境配置为:
CUDA 10.2
cuDNN 8.8.0
1. 获取部署代码
笔者下载的是2.3版本。
下载链接如下:https://github/PaddlePaddle/PaddleDetection.git
2. 下载paddle_inference预测库,下载链接如下:https://paddleinference.paddlepaddle/user_guides/download_lib.html
解压后的文件夹内容如下;
paddle_inference
├── paddle # paddle核心库和头文件
├── third_party # 第三方依赖库和头文件
└── version.txt # 版本和编译信息
3. 进入PaddleDetection-release-2.3\deploy\cpp\scripts文件中
编译cmake的命令在scripts/build.sh中,通过vim修改主要参数,修改后的例子如下:
# 是否使用GPU(即是否使用 CUDA)
WITH_GPU=ON
# 是否使用MKL or openblas,TX2需要设置为OFF
WITH_MKL=ON
# 是否集成 TensorRT(仅WITH_GPU=ON 有效)
WITH_TENSORRT=ON
# paddle 预测库lib名称,由于不同平台不同版本预测库lib名称不同,请查看所下载的预测库中`paddle_inference/lib/`文件夹下`lib`的名称
PADDLE_LIB_NAME=libpaddle_inference
# TensorRT 的include路径
TENSORRT_INC_DIR=/usr/include/aarch64-linux-gnu
# TensorRT 的lib路径
TENSORRT_LIB_DIR=/usr/lib/aarch64-linux-gnu
# Paddle 预测库路径(上一步下载的paddle_inference解压后的路径)
PADDLE_DIR=/path/to/paddle_inference
# CUDA 的 lib 路径
CUDA_LIB=/usr/local/cuda-10.2/lib64
# CUDNN 的 lib 路径
CUDNN_LIB=/usr/lib/aarch64-linux-gnu/
# 是否开启关键点模型预测功能
WITH_KEYPOINT=ON
# 是否开启跟踪模型预测功能
WITH_MOT=OFF
MACHINE_TYPE=`uname -m`
echo "MACHINE_TYPE: "${MACHINE_TYPE}
if [ "$MACHINE_TYPE" = "x86_64" ]
then
echo "set OPENCV_DIR for x86_64"
# linux系统通过以下命令下载预编译的opencv
mkdir -p $(pwd)/deps && cd $(pwd)/deps
wget -c https://paddledet.bj.bcebos.com/data/opencv-3.4.16_gcc8.2_ffmpeg.tar.gz
tar -xvf opencv-3.4.16_gcc8.2_ffmpeg.tar.gz && cd ..
# set OPENCV_DIR
OPENCV_DIR=$(pwd)/deps/opencv-3.4.16_gcc8.2_ffmpeg
elif [ "$MACHINE_TYPE" = "aarch64" ]
then
echo "set OPENCV_DIR for aarch64"
# TX2平台通过以下命令下载预编译的opencv
mkdir -p $(pwd)/deps && cd $(pwd)/deps
wget -c https://bj.bcebos.com/v1/paddledet/data/TX2_JetPack4.3_opencv_3.4.6_gcc7.5.0.tar.gz
tar -xvf TX2_JetPack4.3_opencv_3.4.6_gcc7.5.0.tar.gz && cd ..
# set OPENCV_DIR
OPENCV_DIR=$(pwd)/deps/TX2_JetPack4.3_opencv_3.4.6_gcc7.5.0/
else
echo "Please set OPENCV_DIR manually"
fi
echo "OPENCV_DIR: "$OPENCV_DIR
# 以下无需改动
rm -rf build
mkdir -p build
cd build
cmake .. \
-DWITH_GPU=${WITH_GPU} \
-DWITH_MKL=${WITH_MKL} \
-DWITH_TENSORRT=${WITH_TENSORRT} \
-DTENSORRT_LIB_DIR=${TENSORRT_LIB_DIR} \
-DTENSORRT_INC_DIR=${TENSORRT_INC_DIR} \
-DPADDLE_DIR=${PADDLE_DIR} \
-DWITH_STATIC_LIB=${WITH_STATIC_LIB} \
-DCUDA_LIB=${CUDA_LIB} \
-DCUDNN_LIB=${CUDNN_LIB} \
-DOPENCV_DIR=${OPENCV_DIR} \
-DPADDLE_LIB_NAME=${PADDLE_LIB_NAME} \
-DWITH_KEYPOINT=${WITH_KEYPOINT} \
-DWITH_MOT=${WITH_MOT}
make
echo "make finished!"
修改脚本设置好主要参数后,执行build脚本:
sh ./scripts/build.sh
执行完build脚本后,会在deploy/cpp文件中生成build文件夹,编译后的文件在build文件中。
4. 预测和可视化
编译成功后,预测程序为build/main,其主要命令参数说明如下:
参数说明:
--model_dir 导出的检测预测模型所在路径
--model_dir_keypoint Option
--image_file 要预测的图片文件路径
--image_dir 要预测的图片文件夹路径
--video_file 要预测的视频文件路径
--camera_id Option
--device 运行时的设备,可选择CPU/GPU/XPU,默认为CPU
--gpu_id 指定进行推理的GPU device id(默认值为0)
--run_mode 使用GPU时,默认为paddle, 可选(paddle/trt_fp32/trt_fp16/trt_int8)
--batch_size 检测模型预测时的batch size,在指定image_dir时有效
--batch_size_keypoint 关键点模型预测时的batch size,默认为8
--run_benchmark 是否重复预测来进行benchmark测速 |
--output_dir 输出图片所在的文件夹, 默认为output |
--use_mkldnn CPU预测中是否开启MKLDNN加速
--cpu_threads 设置cpu线程数,默认为1
--use_dark 关键点模型输出预测是否使用DarkPose后处理,默认为true
例子如下:
./main --model_dir=/path/to/yolov3_darknet --image_file=/path/to/test.jpg --device=GPU
更多推荐
(亲测有效)paddledetection在Jetson上的编译指南
发布评论