YOLOX Deployment 教程 | ncnn in C++

释放双眼,带上耳机,听听看~!
本教程介绍了在C++中使用ncnn进行YOLOX模型部署的详细步骤,包括环境搭建、模型转换和优化,旨在帮助读者快速实践部署YOLOX模型。
  • 👋 只有实战、不讲理论、一文读懂 👋
  • 🥇 版权: 本文由【墨理学AI】认真原创、各位大佬、一文读懂、敬请查阅
  • 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
  • 本博文接上篇 YOLOX (pytorch)模型 export ONNX 运行推理【❤️YOLOX 实战二❤️】

    🥇 YOLOX Deployment

    👋 ncnn in C++

    整个步骤过程如下:

    yolox_s.pth –》 yolox.onnx –》 yolox.param + yolox.bin –》yolox-opt.param + yolox-opt.bin

    所参考教程

    📙 环境搭建

    环境搭建主要包括

    📙 Step1 【ncnn 极简编译安装】

    git clone https://github.com/Tencent/ncnn.git
    
    cd ncnn
    
    mkdir build
    
    cmake ..
    
    make -j
    

    📙 Step2【 Use provided tools to generate onnx file 】

    cd yoloDir/YOLOX
    
    python3 tools/export_onnx.py -n yolox-s
    
    # 输出如下
    
    2021-08-xx 02:05:03.438 | INFO     | __main__:main:89 - generated onnx model named yolox.onnx
    2021-08-xx 02:05:05.206 | INFO     | __main__:main:101 - generated simplified onnx model named yolox.onnx
    
    
    
    # ll 查看 可以发现,已经成功得到 simplified onnx
    
    yolox.onnx
    

    📙 Step3【Generate ncnn param and bin file.】

    cd ncnn
    cd build/tools/ncnn
    
    # copy 模型至当前目录
    cp  xx/yolox.onnx .
    ./onnx2ncnn yolox.onnx yolox.param yolox.bin
    
    # 运行输出如下
    
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    Unsupported slice step !
    
    

    这一部分的理解

    YOLOX Deployment 教程 | ncnn in C++

    📙 Step4【Open yolox.param 对其进行修正】

    YOLOX Deployment 教程 | ncnn in C++

    YOLOX Deployment 教程 | ncnn in C++

    📙 Step5 【Use ncnn_optimize to generate new param and bin】

    最后的 flag 如果是 0 指的的是 fp32,如果是 1 指的是 fp16

    
    # 我们仍然在这个目录下进行操作即可
    
    cd ncnn/build/tools/onnx
    
    ../ncnnoptimize yolox.param yolox.bin yolox-opt.param yolox-opt.bin 1
    
    # 运行输出如下
    
    create_custom_layer YoloV5Focus
    fuse_convolution_activation Conv_254 Sigmoid_264
    fuse_convolution_activation Conv_262 Sigmoid_263
    fuse_convolution_activation Conv_275 Sigmoid_285
    fuse_convolution_activation Conv_283 Sigmoid_284
    fuse_convolution_activation Conv_296 Sigmoid_306
    fuse_convolution_activation Conv_304 Sigmoid_305
    model has custom layer, shape_inference skipped
    model has custom layer, estimate_memory_footprint skipped
    
    

    📙 Step6 【 运行测试 刚刚优化后的 yolox-opt.param yolox-opt.bin 】

    Copy or Move yolox.cpp file into ncnn/examples, modify the CMakeList.txt, then build yolox

    
    cd ncnn/examples/
    
    cp /xx/xx/yoloDir/YOLOX/demo/ncnn/cpp/yolox.cpp .
    
    vim yolox.cpp
    

    主要修改如下地方:

    YOLOX Deployment 教程 | ncnn in C++
    YOLOX Deployment 教程 | ncnn in C++

    vim CMakeLists.txt
    

    主要修改如下地方:

    YOLOX Deployment 教程 | ncnn in C++

    重新编译 ncnn

    cd ..
    
    # 删除 之前的 build 目录,这一步是有必要的
    
    rm -rf build
    
    mkdir build
    
    cmake ..
    
    make -j
    
    # 环境OK,则编译顺利
    

    📙 Step7 【Inference image with executable file yolox】

    运行测试

    1. copy 一张图片到当前目录
    2. copy yolox-opt.* 到刚刚 yolox.cpp 中指定的路径
    
    cd ncnn/build/examples
    
    # 可以看到 一堆的 可执行文件 包括刚刚添加的 yolox
    
    

    如果 模型找不到, 则报错如下

    ./yolox  dog.jpg 
    
    
    fopen yolox-opt.param failed
    fopen yolox-opt.bin failed
    find_blob_index_by_name images failed
    Try
    find_blob_index_by_name output failed
    Try
    

    正确运行的输出

    
    ## copy 模型到 正确路径即可,我这里是copy 到当前目录
    
    cp xx/ncnn/build/tools/onnx/yolox-opt.* .
    
    # 正确运行输出如下
    
    ./yolox  dog.jpg 
    
    2 = 0.80229 at 460.83 81.42 241.84 x 92.63
    1 = 0.69867 at 107.73 122.94 459.45 x 383.90
    15 = 0.47716 at 129.65 209.46 259.46 x 287.37
    
    image_yolox.png saved ....... 
    

    效果如下

    YOLOX Deployment 教程 | ncnn in C++

  • ❤️ 你只看一篇就够用的教程 感谢各位大佬一键三连
  • YOLOX Deployment 教程 | ncnn in C++

    🚀🚀 墨理学AI

  • 🎉 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
  • ❤️ 如果文章对你有帮助、点赞、评论鼓励博主的每一分认真创作
  • YOLOX Deployment 教程 | ncnn in C++

    本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
    AI教程

    基于 PyTorch 实现图像分类的机器学习模型分享

    2023-12-18 13:35:14

    AI教程

    基于深度学习的高精度工人安全帽检测识别系统使用教程

    2023-12-18 13:51:14

    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索