当前位置: 首页 > article >正文

NCNN入门之编译与安装

文章目录

    • 一、NCNN介绍
    • 二、NCNN编译
    • 三、NCNN测试
    • 四、参考文档

一、NCNN介绍

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

NCNN overview

功能概述

  1. 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支
  2. 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架
  3. 纯 C++ 实现,跨平台,支持 Android / iOS 等
  4. ARM Neon 汇编级良心优化,计算速度极快
  5. 精细的内存管理和数据结构设计,内存占用极低
  6. 支持多核并行计算加速,ARM big.LITTLE CPU 调度优化
  7. 支持基于全新低消耗的 Vulkan API GPU 加速
  8. 可扩展的模型设计,支持 8bit 量化 和半精度浮点存储,可导入 caffe/pytorch/mxnet/onnx/darknet/keras/tensorflow(mlir) 模型
  9. 支持直接内存零拷贝引用加载网络模型
  10. 可注册自定义层实现并扩展

总之NCNN 是一个专门为移动设备和嵌入式系统设计的高效神经网络推理框架,以其轻量级、高性能、跨平台和易用性赢得了广泛的应用。它特别适合那些需要在资源有限的环境中部署深度学习模型的场景。

二、NCNN编译

使用以下命令安装所有必需的依赖项:

sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libomp-dev libvulkan-dev vulkan-utils libopencv-dev

NCNN源码下载:

git clone https://github.com/Tencent/ncnn.git
cd ncnn 
git submodule update --init
image-20240823170901902

进入 NCNN 源码目录后,使用 CMake 配置和编译项目:

#在ncnn主目录下
mkdir build && cd build
cmake .. -DNCNN_BENCHMARK=ON -DNCNN_VULKAN=ON
make -j8

这部分代码是ncnn的主目录下CMakeLists.txt里的内容,用于控制构建选项设置NCNN_BENCHMARK=ON可以打印出每个算子的耗时,NCNN_VULKAN=ON可以开启vulkan加速

image-20240823172102726

成功编译,对编译后的库进行安装,默认安装的根目录是:your_dir/ncnn/build/install/,也就是会在build目录下新建一个install目录来安装。

sudo make install

image-20240823172605832zhi

三、NCNN测试

安装成功后检查是否环境是否正确。

cd ../examples
../build/examples/squeezenet ../images/256-ncnn.png

运行结果:

image-20240823172918660

至此ncnn的编译与安装已经完成。

四、参考文档

  • 如果在其它平台(arm、树莓派、安卓)编译可以参考如下:https://github.com/Tencent/ncnn/wiki/how-to-build
  • 编译成最小体积:https://github.com/Tencent/ncnn/wiki/build-minimal-library
  • 学习文档:https://github.com/Tencent/ncnn/wiki
  • ncnn文档:https://ncnn.readthedocs.io/en/latest/index.html

http://www.kler.cn/a/283931.html

相关文章:

  • android dvr黑屏
  • 10款PDF合并工具的使用体验与推荐!!!
  • YUM 的使用
  • 编译ffmpeg动态库时设置RPATH为$ORIGIN
  • 单元测试、集成测试、系统测试有什么区别
  • 如何查看电脑关机时间
  • Redis的内存淘汰策略- volatile-lru
  • Linux命令行更换yum源repo为阿里源-centos7
  • 【分布式注册中心】NACOS_2.3.0部署与实战
  • DPR:一种用于开放与问答任务的检索方法
  • 暴搜、深搜、回溯算法题集
  • AI如何改变科学与数学领域:陶哲轩演讲解析
  • SpringBoot+redis+aop处理黑白名单
  • PHP伪协议总结
  • QT实战项目之音乐播放器
  • ES6基础----iterator接口的使用
  • 【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等
  • 分布式计算架构详解以及任务调度方式
  • python用波形显示udp数据实现一个模拟示波器
  • Leetcode3240. 最少翻转次数使二进制矩阵回文 II
  • ES常用多条件查询
  • 西方法律思想史考试复习材料
  • 每天一个数据分析题(五百一十一)- 神经网络
  • 技术风暴中的应急策略:开发团队如何应对突发故障与危机
  • Java笔试面试题AI答之面向对象(9)
  • 自己开发完整项目一、登录注册功能-01