1 ncnn深度学习框架
1.1 ncnn简介
ncnn 是腾讯优图实验室首个开源项目,为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。同样的,ncnn适用于嵌入式平台,可以明显的提高深度学习算法模型在嵌入式平台上的运算速度。如图1,在手机上的识别示例。左图为使用Mobile netSSD实现目标检测;右图为人脸检测。
图1
1.2 ncnn优势
ncnn主要有以下几个优点:
(1)支持卷积神经网络,支持多输入和多分支结构,可计算部分分支;
(2)除OPENCV外(即使没有ncnn,做图像处理,也必要的库),无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架,极大的的降低了对嵌入式系统的性能要求,同时也降低了开发人员在搭建环境时的工作。
(3)纯 C++ 实现,可以实现跨平台编程。
(4)支持多核并行计算加速,ARM big.LITTLE cpu 调度优化。
(5)整体库体积小于 500K,并可轻松精简到小于 300K。
(6)可扩展的模型设计,支持 8bit 量化和半精度浮点存储。
(7),可导入 caffe 模型,对pytorch、tensorflow模型也有很好的支持。
2 搭建ncnn深度学习框架
2.1 准备
安装cmake。
安装一些依赖库。
- apt-get install -y gfortran
- apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
- apt-get install --no-install-recommends libboost-all-dev
- apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev
复制代码 下载ncnn源码(我喜欢用浏览器下载):ncnn github下载地址。放在你喜欢的目录下解压。
图2
没unzip的,使用:apt install unzip安装一个。
2.2 编译
在ncnn-master目录下,创建build文件夹。
- cd ncnn-master
- mkdir build
复制代码进入build文件夹。
3 测试ncnn
在编译完成的build文件夹下,examples文件夹,里面有编译好的例子,模型在各自对应的cpp文件(ncnn-master/examples/ 文件夹下)里面都有链接,可以选择下载。tools文件夹下,有转换ncnn模型的工具(最新版只有caffer转ncnn的工具)
图3
测试mobilenetV2-ssd。识别效果还可以。测试中,识别一张图片的时间大约在200MS左右,如果再进一步优化模型,速度还可以有大幅度的提升。
图4
查看系统占用率:
图5
可以看到ncnn,可以充分的调用cpu的每个核心的资源。
至此,ncnn环境搭建完成。
|