背景

之前调研了dlib的方法,发现手机端运行的效率较低,需要对比一下阿里的mnn和腾讯的ncnn

官方文档解读

ncnn首页一览

地址:https://github.com/Tencent/ncnn
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

可见此项目主要是针对移动端。
同时ncnn有其他的友情项目,如下图(来自ncnn的首页)
在这里插入图片描述

ncnn的wiki一览

地址:https://github.com/Tencent/ncnn/wiki
wiki里面对ncnn的性能参数做了一些对比,并且写了一些qa。
我在wiki里面得知:pc端x86框架的ncnn没有做优化,所以在linux服务器上注定跑不快

此处省略很多字。。。

环境搭建过程

vmware安装

windows看运行ncnn的代码不太方便,最合适的系统是Ubuntu,而使用Ubuntu的前提是要有虚拟机,这里选择vmware。
在这里插入图片描述
安装过程省略,这个只需要按下一步就好了

Ubuntu安装

网址:https://ubuntu.com/download
在这里插入图片描述
vm安装Ubuntu系统后,如下图:
在这里插入图片描述
Ubuntu的桌面还是非常绚丽的

ncnn源码下载

最好下载release版本,我这里下载的20190611的版本
release地址:https://github.com/Tencent/ncnn/releases
在这里插入图片描述

opencv安装

ncnn对opencv有依赖,需要先安装opencv(即使Ubuntu中可能会自带,也推荐重新安装,编译选项需要调整)
注:我曾经遇到了一个坑,opencv没有重新安装的情况下,运行ncnn的fastrcnn出现了一下错误
OpenCV Error: Unspecified error (The function is not implemented...

参考博客:https://blog.csdn.net/zhenguo26/article/details/84402530,得以解决
过程如下

下载opencv3.4.6版本
# 参考地址:https://docs.opencv.org/3.0.0/d7/d9f/tutorial_linux_install.html
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
# 解压opencv并创建编译目录
cd ~/opencv
mkdir build
cd build
# 编译配置(WITH_GTK=ON需要加上)
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_GTK=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 开始编译
make -j4
# 安装
sudo make install

时间有点长,耐心等待

cmake安装

c++项目必备的cmake(clion环境的默认构建就是用的cmake,这个很重要)
在这里插入图片描述
我下载的是预编译版本,直接配置一下环境变量就可以了
在这里插入图片描述

protobuf安装

ncnn在模型转换的时候(把caffe的模型转换成为ncnn自己的模型),需要使用protobuf。
具体参考:https://www.jianshu.com/p/d06f59e78297

clion安装

地址:http://www.jetbrains.com/
此处略
在这里插入图片描述

启动项目查看结果

打开clion,file->open->ncnn根目录地址,在新窗口打开
在这里插入图片描述
项目默认是不是编译examples目录的,需要手动修改(这点在wiki里面有提到):
在这里插入图片描述

file->reload cmake project,重新加载cmake文件,生成编译目录,如下图
在这里插入图片描述
运行fasterrcnn(首先会进入编译阶段)

在这里插入图片描述
注:fasterrcnn(快速物体检测demo)是需要有预训练模型和目标图片才可以跑的。
预训练模型:
在这里插入图片描述
这些都需要从另外一个项目下载(从此来推断,ncnn其实是使用的caffe的模型,然后在手机端去使用。所以深度学习的重点还是caffe和tensorflow,使用着两个框架训练好模型,然后再进行移动端的分享使用,而移动端则必须使用ncnn和mnn这种进行过编译优化的库才可以,否则移动端的效率很低)

下载的模型必须要进行模型格式转化
使用demo中的caffe2ncnn即可进行转换,这点wiki中有提到(开源的库,wiki是必须要看的,虽然文档做的一般,但还是很有指导性质)
在这里插入图片描述
以下是生成的结果
在这里插入图片描述
ncnn的bin和proto,可以直接在fasterrcnn中去使用了,当然需要改为代码里面对应的名字。
以下是我运行fasterrcnn的结果
在这里插入图片描述

总结

  • ncnn文档一般,需要自己多琢磨一下
  • caffe和tensorflow需要重点去学习和使用
  • 算法需要进行深入的理解,神经网络还是需要自己写的,否则在深度学习中走的远
  • 样本非常重要
  • 机器非常重要,得有一台好机器才可以的
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐