该Demo提供的预测代码是根据Tencent's NCNN framework推理库预测的。
Download and Install Visual Studio from https://visualstudio.microsoft.com/vs/community/
Download and install OpenCV from https://github.com/opencv/opencv/releases
为了方便,如果环境是gcc8.2 x86环境,可直接下载以下库:
wget https://paddledet.bj.bcebos.com/data/opencv-3.4.16_gcc8.2_ffmpeg.tar.gz
tar -xf opencv-3.4.16_gcc8.2_ffmpeg.tar.gz
Download and install Vulkan SDK from https://vulkan.lunarg.com/sdk/home
git clone --recursive https://github.com/Tencent/ncnn.git
Build NCNN following this tutorial: Build for Windows x64 using VS2017
增加 ncnn_DIR
= YOUR_NCNN_PATH/build/install/lib/cmake/ncnn
到系统变量中
Build project: Open x64 Native Tools Command Prompt for VS 2019 or 2017
cd <this-folder>
mkdir -p build
cd build
cmake ..
msbuild picodet_demo.vcxproj /p:configuration=release /p:platform=x64
Build and install OpenCV from https://github.com/opencv/opencv
Download Vulkan SDK from https://vulkan.lunarg.com/sdk/home
Clone NCNN repository
git clone --recursive https://github.com/Tencent/ncnn.git
Build NCNN following this tutorial: Build for Linux / NVIDIA Jetson / Raspberry Pi
cd <this-folder>
mkdir build
cd build
cmake ..
make
- 准备模型
modelName=picodet_s_320_coco_lcnet # 导出Inference model python tools/export_model.py \ -c configs/picodet/${modelName}.yml \ -o weights=${modelName}.pdparams \ --output_dir=inference_model # 转换到ONNX paddle2onnx --model_dir inference_model/${modelName} \ --model_filename model.pdmodel \ --params_filename model.pdiparams \ --opset_version 11 \ --save_file ${modelName}.onnx # 简化模型 python -m onnxsim ${modelName}.onnx ${modelName}_processed.onnx # 将模型转换至NCNN格式 Run onnx2ncnn in ncnn tools to generate ncnn .param and .bin file.
转NCNN模型可以利用在线转换工具 https://convertmodel.com
为了快速测试,可直接下载:picodet_s_320_coco_lcnet-opt.bin/ picodet_s_320_coco_lcnet-opt.param(不带后处理)。
**注意:**由于带后处理后,NCNN预测会出NAN,暂时使用不带后处理Demo即可,带后处理的Demo正在升级中,很快发布。
首先新建预测结果存放目录:
cp -r ../demo_onnxruntime/imgs .
cd build
mkdir ../results
- 预测一张图片
./picodet_demo 0 ../picodet_s_320_coco_lcnet.bin ../picodet_s_320_coco_lcnet.param 320 320 ../imgs/dog.jpg 0
具体参数解析可参考main.cpp
。
-测试速度Benchmark
./picodet_demo 1 ../picodet_s_320_lcnet.bin ../picodet_s_320_lcnet.param 320 320 0
- 预测结果精度不对: 请先确认模型输入shape是否对齐,并且模型输出name是否对齐,不带后处理的PicoDet增强版模型输出name如下:
# 分类分支 | 检测分支
{"transpose_0.tmp_0", "transpose_1.tmp_0"},
{"transpose_2.tmp_0", "transpose_3.tmp_0"},
{"transpose_4.tmp_0", "transpose_5.tmp_0"},
{"transpose_6.tmp_0", "transpose_7.tmp_0"},
可使用netron查看具体name,并修改picodet_mnn.hpp
中相应non_postprocess_heads_info
数组。