当前位置:   article > 正文

从端到端打通模型端侧部署流程(NCNN)_ncnn模型部署

ncnn模型部署

背景介绍:

深度学习已经在生活的方方面面被应用和重视。随着手机算力的不断提升,以及深度学习的快速发展,特别是小网络模型不断成熟,原本在云端执行的推理预测就可以转移到端上来做。端智能即在端侧部署运行 AI 算法,相比服务端智能,端智能具有低延时、兼顾数据隐私、节省云端资源等优势。目前端智能正逐渐变为趋势,从业界来看,它已经在 AI 摄像、视觉特效等场景发挥了巨大价值。

为什么要做端侧推理:

目前如何将神经网络部署到端侧,一般的模式是“云侧训练,端侧推理”。也就是说,把用户的数据传到云侧上面,云侧基于获得的多数据进行训练模型,训练好的模型直接下放到端侧,然后端侧利用训练好的模型直接进行推理。由于云端数据中心有更高的处理能力和更宽松的能耗限制,所以这种做法是更容易实践的。但这样的做法存在一个比较重要的问题:隐私问题。端设备收集的使用数据常常带有用户隐私:例如邮件App 得到的用户回复文本都可能含有用户私人信息。近几年的一系列事件唤起了用户对隐私的慎重态度:欧盟发布了GDPR 法案,限制科技公司从用户收集数据。除此之外,对于高访问量的应用需要调用大量的服务端部署资源来部署识别模型;另一方面,DL 在云端则意味着数据必须上传。即使不考虑计算压力,从网络延时、流量、隐私保护等角度,也给用户体验带来种种限制。因此,对相当多的应用来说,DL 模型前移到移动端部署可以看作是一种刚需。

端侧深度学习部署流程:

一般来说,端侧深度学习的应用可以分成如下几个阶段:

  • 模型训练阶段,主要解决模型训练,利用标注数据训练出对应的模型文件。面向端侧设计模型时,需要考虑模型大小和计算量;
  • 模型压缩阶段,主要优化模型大小,可以通过剪枝、量化等手段降低模型大小,以便在端上使用;
  • 模型部署阶段,主要实现模型部署,包括模型管理和部署、运维监控等;
  • 端侧推理阶段,主要完成模型推理,即加载模型,完成推理相关的所有计算;
    例子:MNN的部署流程
    在这里插入图片描述
    大致分为三个阶段,训练,转换,推理。

一条主要技术路线:

训练框架训练模型->模型转化为ONNX格式->ONNX格式转化为其他格式(NCNN,TNN,MNN的模型格式)->在对应的推理框架中部署

对于不同的推理框架,虽然细节部分略有不同,但是整体的流程则都是上面这样。

ONNX:

ONNX:(Open Neural Network Exchange):开放神经网络交换是一种针对机器学习算法所设计的开放式文件格式标准,用于存储训练好的算法模型。许多主流的深度学习框架(如 PyTorch、TensorFlow、MXNet)都支持将模型导出为 ONNX 模型。ONNX 使得不同的深度学习框架可以以一种统一的格式存储模型数据以及进行交互。
ONNX Runtime:ONNX运行时,支持Linux、Windows、Mac OS、Android、iOS等多种平台和多种硬件(CPU、GPU、NPU等)上进行模型部署和推理。
关于不同框架的分析可以参考如下文章:
深度学习框架大PK:TNN决战MNN,ncnn依旧经典

NCNN框架:

NCNN

NCNN的官方介绍:

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

NCNN问题解决:

NCNN作为最早开源的一批深度学习推理框架,拥有着较为完善的社区和问题解决,基本上在开发过程中遇到的大多数问题都能够找到相应的解决方法。这个链接是NCNN的官方处理issue的地方,遇到了部署的问题可以首先在这里搜一下。

NCNN使用样例

https://github.com/nihui/ncnn-android-squeezenet
https://github.com/nihui/ncnn-android-styletransfer
https://github.com/nihui/ncnn-android-mobilenetssd
https://github.com/moli232777144/mtcnn_ncnn
https://github.com/nihui/ncnn-android-yolov5
https://github.com/xiang-wuu/ncnn-android-yolov7
https://github.com/nihui/ncnn-android-scrfd

推荐阅读
相关标签