Window系统中onnx转化为ncnn详细教程

文章目录

  • 前言
  • 一、onnx和ncnn是什么?
  • 二、使用步骤
    • 1.安装protobuf
    • 2.克隆安装ncnn
    • 3.生成ncnn文件
  • 总结


前言

本文记录了将onnx转化为ncnn框架,方便部署到移动端。前提是你已经安装了vs2016或者其它版本。


一、onnx和ncnn是什么?

简单描述一下官方介绍,开放神经网络交换(Open Neural Network Exchange)简称ONNX是微软和Facebook提出用来表示深度学习模型的开放格式。所谓开放就是ONNX定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性。
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架,也是腾讯优图实验室成立以来的第一个开源项目。ncnn 从设计之初深刻考虑手机端的部署和使用,无第三方依赖,跨平台,手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 App。

二、使用步骤

1.安装protobuf

1)下载protobuf-3.4.0安装包,并解压;
然后在vs2019的X64命令行执行以下命令。注意以下命令都是在vs2019上执行的。

git clone https://github.com/protocolbuffers/protobuf.git

注:<protobuf-root-dir>为解压的protobuf-3.4.0文件夹的根目录。
代码如下(示例):

cd <protobuf-root-dir>

mkdir build-vs2019 
cd build-vs2019


cmake -G"NMake Makefiles"-DCMAKE_BUILD_TYPE=ReTease -DCMAKE_INSTALL_PREFIX=%cd%/insta11 -Dprotobuf_BUILD_TESTS=OFF-Dprotobuf_MSVC_STATIC_RUNTIME=OFF../cmake

nmake
nmake install

例如:

cmake -G"NMake Makefiles"-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake

编译后可以执行以下语句说明安装成功

protoc.exe-- version

2.克隆安装ncnn

执行以下语句克隆ncnn

git clone https://github.com/Tencent/ncnn.git

打开VS2019的X64命令行(进入到ncnn根目录下)执行以下语句
注意:cmake-G...这条命令有三个<protobuf-root-dir>需要换成protobuf-3.4.0的根目录

cd <protobuf-root-dir>

mkdir build-vs2019 
cd build-vs2019

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=D:/weigth_ncnn/protobuf-3.4.0/build-vs2019/install/include -DProtobuf_LIBRARIES=D:/weigth_ncnn/protobuf-3.4.0/build-vs2019/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=D:/weigth_ncnn/protobuf-3.4.0/build-vs2019/install/bin/protoc.exe -DNCNN_VULKAN=OFF ..

nmake
nmake install

编译后
nccn/build-vs2019 /tools/onnx目录下有onnx2ncnn.exe文件

3.生成ncnn文件

拷贝你的onnx文件例如:yolox.onnx到D:\ncnn\build-vs2019\tools\onnx 生成ncnn相应的param和bin文件
然后cd到onnx2ncnn.exe文件的根目录,在执行以下语句

onnx2ncnn.exe yolox.onnx yolox.param yolox.bin 

因为ncnn不支持Focus模块.会有警告:
Unsupported slice step!
但没有关系,Focus层在C++中实现。

总结

踩了很多坑才把onnx转化为ncnn文件,里面有以下步骤是省略了请读者执行摸索,因为时间紧迫,没有认真检查,如果发现有错误请指出,谢谢

你可能感兴趣的:(yolov5部署到安卓,深度学习,人工智能,android,计算机视觉,目标检测)