此博客为ncnn系列第一篇
文章目录
前言
在实习的时候,开始学习如何移植算法到边缘端,跑通了up主的yolov5+ncnn+Android的demo,但是想具体学习移植的过程(demo大师)。第一次接触到ncnn框架,中间经历里重装系统(电脑原来的vs环境太复杂了),编译不出来ncnn框架(不会用cmake),不知道怎么跑通examples(不会用vs)等各种坑,顺便重装系统搞崩了我电脑其它的环境;另一方面,自己本身c++基础就很差,很多东西都还要慢慢学习,总结下就是我很菜。在这里感谢ncnn的作者nihui(up主),以及群里的ZZ大佬和其它小伙伴的帮忙,以后励志当一个合格的调参师(伪)。
此部分只包含Windows10环境下ncnn-vs2019编译,之后会慢慢更新完整的系列ncnn学习过程,我会好好学的!
如果有哪里写得不好的地方请评论里指正,文章中会列出我自己踩的坑和解决办法,本文参考如下:
ncnn
参考的其它博主
opencv的安装
Vulkan Visual Studio环境配置
ZZ大佬的ncnn编译教程
一、ncnn简介
首先我们必须要了解的是,什么是ncnn,这里当然是直接抄up主的话了。
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
优点是部署方便,速度够快,只有前向计算,因此ncnn只是用来部署的框架,想要训练还是老实的用tensorflow和pytorch等等框架,在移植的过程中,拿yolov5举例,需要经过pytorch->onnx->ncnn的模型转换过程,这里推荐一个大佬提供的工具一键转换模型,当然模型转换过程中遇到的坑,自行寻找答案,或者进群问大佬们吧,推荐进ncnn群,里面大佬超多的。
二、Windows10环境下ncnn-vs2019编译
这里我是在windows10平台下,编译vs2019的ncnn框架,因为坑比较多(我比较菜),如果可以更推荐大家在Ubuntu或者Linux上编译测试,下面是步骤。
1、Visual Studio 2019 安装
在vs官网上下载社区版本的vs2019,注意选择使用C++的桌面开发(ncnn是C++的神经网络框架)。
顺序安装完成即可。
2、安装Cmake 3.19.2
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
在cmake官网上下载最新版的camke:
下载完成解压后放在一个统一新建的文件夹中,方便之后其它工具包的存放,解压完成后的文件夹如下:
接下来需要添加环境变量,在此电脑=>高级系统设置=>环境变量的系统变量部分的Path添加cmake的bin目录(之前以为cmake有bug退了个版本,up主提的方法,后面知道是自己cmake命令写错了出的bug,后面会写到),如下:
配置完成后win+R打开cmd窗口,输入cmake,测试是否安装成功。
3、安装Opencv 3.4.10
win环境下安装Opencv,参考opencv的安装,在opencv官网下载opencv3.4.10,注意选择win版本。
注意OpenCV同样需要配置环境变量,,但和cmake又有一些差别。如果不配置opencv的话,之后编译的过程中会有报错。在此电脑=>高级系统设置=>环境变量的用户变量部分的Path添加D:\package\opencv\build\x64\vc15\bin目录(注意换成自己的解压目录),如下:
先不着急部署进vs2019中,之后有更简单的方法将所有的包导入项目中。
4、编译protobuf 3.4.0
Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。
从该地址下载protobuf3.4.0的压缩包,解压后放在之前新建的文件中,然后在开始菜单找到Visual Studio 2019=>x64 Native Tools Command Prompt for VS 2019右击,点击更多,以管理员身份运行,输入以下命令编译protobuf3.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_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
> nmake
> nmake install
其中protobuf-root-dir是你的protobuf解压的路径。
输入nmake,等待编译结束后nmake install。
安装完成后的build-vs2019文件夹,之后编译ncnn的时候需要用到。
5、安装VulkanSDK 1.2.148.0
vulkan是新一代的图形和计算API,它提供了对现代图形处理器的高效、跨平台访问,这些图形处理器应用于各种各样的设备,从pc和主机到移动电话和嵌入式平台。ncnn支持vulkan使用gpu进行加速。当然如果在编译ncnn的时候如果不想使用gpu可跳过此步骤。
从下载处下载VulkanSDK 1.2.148.0 的win安装版本。
下载完成后一键安装,注意地址修改为E:\lib\VulkanSDK\1.2.148.0,方便之后编译的使用,正常安装应该是没有问题的,如何在vs2019中导入vulkan包,之后会在讲到。安装完成后的文件夹如下:
6、编译ncnn框架-ncnn-full-source
接下来就到最重要的一步了,ncnn框架的编译是我踩坑最多的一步。如果以上的步骤都正确安装,那接下来我会将我踩过的坑都告诉你们,以供参考。
首先第一个坑就是在于你下载的包上,如果你直接下载ncnn的话,会报这个错误:
因为缺少了submodule代码,而通过git又没法正常安装,这时候up告诉我下载full包可以解决问题。在ncnn-Releases中下载ncnn-full-source.zip,解压后统一放在之前创建的文件夹中,准备编译。
在开始菜单找到Visual Studio 2019=>x64 Native Tools Command Prompt for VS 2019(右击,点击更多,以管理员身份运行,输入以下命令编译ncnn:
> cd <ncnn-root-dir>
> mkdir build-vs2019
> cd build-vs2019
> cmake -G"NMake Makefiles" ^-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install ^
-DProtobuf_INCLUDE_DIR=<protobuf-root-dir>/build-vs2019/install/include ^
-DProtobuf_LIBRARIES=<protobuf-root-dir>/build-vs2019/install/lib/libprotobuf.lib ^
-DProtobuf_PROTOC_EXECUTABLE=<protobuf-root-dir>/build-vs2019/install/bin/protoc.exe ^
-DNCNN_VULKAN=ON .. ^-DOpenCV_DIR=<opencv-root-dir>/build
> nmake
> nmake install
其中 <ncnn-root-dir>
是ncnn-full-source的根目录,<protobuf-root-dir>
是protobuf的根目录,<opencv-root-dir>
是opencv的根目录,如果之前放在一个目录下面的话就很容易管理。如果不想使用vulkan,可以将-DNCNN_VULKAN=OFF
。一定注意编译的时候,地址斜杠的方向,小心翼翼的粘贴。输入cmake命令后,出现如下信息说明之前的步骤没有出错:
输入nmake开始编译,如果出现警告没有事,幸运的话没有报bug就可以直接到100%,使用nmake install安装:
安装成功:
不幸运的话就可能在编译到一半的时候报bug,比如我自己因为cmake命令中少了一个-
,一直在报这个错误:
之后要好好学一学cmake的用法T T。
如果以上步骤,你都完整的做到了,没有踩坑!那么你就可以在build-vs2019文件夹中,看到完整的编译好的ncnn!!
如果你是大佬只是想正常编译使用ncnn,到此应该结束了,如果你是看了up的知乎,想要运行其中的yolov5 examples学习,你可以看我的下一篇博客。