yangjun dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前
..
CMakeLists.txt dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前
README.md dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前
main.cpp dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前
picodet_mnn.cpp dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前
picodet_mnn.hpp dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 1 年之前

README.md

PicoDet MNN Demo

本Demo提供的预测代码是根据Alibaba's MNN framework 推理库预测的。

C++ Demo

  • 第一步:根据MNN官方编译文档 编译生成预测库.
  • 第二步:编译或下载得到OpenCV库,可参考OpenCV官网,为了方便如果环境是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
    
  • 第三步:准备模型

    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
    # 将模型转换至MNN格式
    python -m MNN.tools.mnnconvert -f ONNX --modelFile picodet_s_320_lcnet_processed.onnx --MNNModel picodet_s_320_lcnet.mnn
    

    为了快速测试,可直接下载:picodet_s_320_lcnet.mnn(不带后处理)。

注意:由于MNN里,Matmul算子的输入shape如果不一致计算有问题,带后处理的Demo正在升级中,很快发布。

编译可执行程序

  • 第一步:导入lib包 mkdir mnn && cd mnn && mkdir lib cp /path/to/MNN/build/libMNN.so . cd .. cp -r /path/to/MNN/include .
  • 第二步:修改CMakeLists.txt中OpenCV和MNN的路径
  • 第三步:开始编译 shell mkdir build && cd build cmake .. make 如果在build目录下生成picodet-mnn可执行文件,就证明成功了。

开始运行

首先新建预测结果存放目录:

cp -r ../demo_onnxruntime/imgs .
cd build
mkdir ../results
  • 预测一张图片 shell ./picodet-mnn 0 ../picodet_s_320_lcnet_3.mnn 320 320 ../imgs/dog.jpg

-测试速度Benchmark

./picodet-mnn 1 ../picodet_s_320_lcnet.mnn 320 320

FAQ

  • 预测结果精度不对: 请先确认模型输入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数组。

Reference

MNN