近年来,随着 AI 技术的快速发展,AI 模型部署到移动端设备的需求越来越强烈。AI 模型部署到移动端设备,能带来诸多好处:
然而,AI 模型在移动端设备部署,却面临如下挑战和限制:
因此,要将 AI 模型成功部署到移动端设备,并提供很好的用户体验,需要从模型轻量级设计、模型转换、模型量化以及推理加速等方面不断探索和优化。
模型轻量级设计
AI 模型在模型结构设计阶段,应该根据移动端设备的硬件特性进行设计,在满足模型的性能前提下,模型的层数和每个层的通道数尽量小。卷积层的卷积核大小尽量小,不宜大量使用 5x5 、7x7,以 3x3 和 1x1 为主。模型轻量级设计可参考 MobileNet 和 ShuffleNet 。MobileNet 是 Google 面向移动端设备推出的轻量级模型,已经经历了三个版本的迭代。MobileNet V1 模型的核心思想是将原来标准的卷积操作因式分解成一个 depthwise convolution 和一个 1x1 的 pointwise convolution 操作; MobileNet V2 在 V1 的基础上引入了残差结构,扩充了维度,并且在输出端 pointwise 卷积采用了线性激活; MobileNet V3 采用了 Neural Architecture Search ( NAS ),引入基于 squeeze and excitation 结构的轻量级注意力模型。ShuffleNet 是旷视科技提出的轻量级模型,并经过了二个版本迭代。ShuffleNet V1 的核心采用了两种操作:pointwise group convolution 和 channel shuffle,在保持精度的同时大大降低了模型的计算量; ShuffleNet V2 则根据相同的 FLOPs ( float-point operations )情况下模型速度差别很大的现象,指出内存访问损失时间( MAC )和 FLOPs 共同决定实际落地时训练和运行的速度。
模型转换
当前,主流的深度学习开源训练框架有 Tensorflow 、Pytorch 等,Tensorflow 凭借先发优势和完整的社区,在工业界得到广泛的应用,而 Pytorch 借助其易用性和不错的性能,在学术界的影响力已超越了 Tensorflow 。虽然 Tensorflow 和 Pytorch 均提供了移动端版本,但推理速度有限,不能满足移动端对推理速度的要求。经过几年的发展,移动端的推理框架已经形成群雄争霸的局部。当前主流的移动端推理框架有 ncnn 、MACE 、MNN 、TNN 。
ncnn 是腾讯优图实验室首个开源项目,是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部属和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。
MACE 是小米公司推出的一个专为移动端异构计算平台的神经网络计算框架,主要从性能、功耗、系统响应内存占用、模型加密与保护、硬件支持范围进行了专门的优化。
MNN 是一个高效、轻量的深度学习框架。它支持深度模型推理与训练,尤其在端侧的推理与训练性能在业界处于领先地位。目前,MNN 已经在阿里巴巴的手机淘宝、手机天猫、优酷、钉钉、闲鱼等 20 多个 App 中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等 70 多个场景。此外,IoT 等场景下也有若干应用。
TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN 框架在原有 Rapidnet 、ncnn 框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。
移动端推理框架 ncnn 、MACE 、MNN 、TNN,并不能直接兼容 Tensorflow 、Pytorch 的模型,而需要先将 Tensorflow 、Pytorch 转换成 ONNX ( Open Neural Network Exchange ),再将 ONNX 转换到 ncnn 、MACE 、MNN 、TNN 所支持的模型。ONNX 是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。
移动端部署
通过 ONNX 将 Tensorflow 、Pytorch 转换至 ncnn 、MACE 、MNN 或 TNN,根据 ios 或 android,编译移动端推理框架的库。为了进一步追求模型的推理速度,可利用推理框架对模型进行卷积层与激活层融合,减小网络层间的 IO 开销;也可将 float32 进行 int8 量化,在不降低模型的精度前提下,理论上可将模型大小缩减 4 倍,推理速度提高 2~3 倍的提高。
1
ruanimal 2021-01-25 17:43:05 +08:00
所以,这就是我手机越来越卡的原因??
|