👋 只有实战、不讲理论、一文读懂 👋
🥇 版权: 本文由【墨理学AI】认真原创、各位大佬、一文读懂、敬请查阅 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️
🥇 YOLOX Deployment
👋 ncnn in C++
整个步骤过程如下:
yolox_s.pth –》 yolox.onnx –》 yolox.param + yolox.bin –》yolox-opt.param + yolox-opt.bin
所参考教程
- YOLOX/tree/main/demo/ncnn/cpp
- 本博文基本按照该文档进行撰写记录
📙 环境搭建
环境搭建主要包括
- YOLOX 环境搭建
- ncnn 编译安装环境
- 有兴趣可参考如上两篇博文即可,此处不再赘述
📙 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 !
这一部分的理解
📙 Step4【Open yolox.param 对其进行修正】
📙 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
主要修改如下地方:
vim CMakeLists.txt
主要修改如下地方:
重新编译 ncnn
cd ..
# 删除 之前的 build 目录,这一步是有必要的
rm -rf build
mkdir build
cmake ..
make -j
# 环境OK,则编译顺利
📙 Step7 【Inference image with executable file yolox】
运行测试
- copy 一张图片到当前目录
- 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 .......
效果如下
❤️ 你只看一篇就够用的教程 感谢各位大佬一键三连
🚀🚀 墨理学AI
🎉 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ ❤️ 如果文章对你有帮助、点赞、评论鼓励博主的每一分认真创作