2020-01-23 09:07:03

机器之心报道

参与:一鸣、Jamin

近来,有越来越多的深度学习框架开始面向移动端进行发展。近日,阿里也基于其 MNN 推理引擎开源了最新的 MNNKit 深度学习 SDK,安卓和 iOS 开发者都可以方便地进行调用。

近年来,很多企业都在研发面向移动端的深度学习框架。在国内有 小米的 Mace、腾讯的 FeatherCNN(腾讯 AI)和 ncnn(腾讯优图)、百度的 Paddle-moblie 等。而阿里也开发了自己的移动端深度学习框架 MNN。
近日,阿里开源了基于 MNN 引擎的项目 MNNKit,面向安卓和 iOS,以 SDK 的方式提供 AI 端侧推理能力。开发者不需要了解算法细节就可以直接使用。
项目地址:https://github.com/alibaba/MNNKit
目前,MNNKit 已经有人脸检测、手势识别、人像分割等,后续可能有更多 API 接入。
MNNKit:基于 MNN 的深度学习工具
MNN 是基于阿里的 MNN 端上推理引擎所开发的应用解决方案,主要面向安卓和 iOS 系统,帮助将 AI 能力应用在实际的移动端场景中。
MNNKit 架构
MNNKit 提供了一个 SDK 供开发者使用,以下为 SDK 的架构。

从图中可以看出,MNNKit 可以分为三层结构,从底向上分别为:

  1. MNN 引擎层,是 MNN (https://github.com/alibaba/MNN) 库在 Android/iOS 上编译好的包的二进制 Release 版本,提供端侧运行环境。
  2. Core 基础层,这主要抽象和封装与 MNN c++接口调用粒度基本一致的上层 API,iOS 通过 OC 接口提供,Android 通过 Java 接口提供(TODO)。这一层同时也为上层 SDK 提供一些公共服务类或结构定义。
  3. 业务 Kit 层,包括了人脸检测、手势识别封装的 API。据项目介绍,之后的业务 Kit 层会不断扩展。

内部原理
因为 MNNKit 主要提供阿里的端侧 AI 能力,因此封装了很多相关应用的 API。调用如下:

例如,当用户需要调用 API 的时候,需要首先创建实例,然后将图像、视频或其他结构化数据输入,进行 AI 模型的推理工作。工作完成后释放实例即可。
目前 MNNKit 已支持的 API 有:

  • 人脸检测 API
  • 手势识别 API
  • 人像分割 API

以人脸检测为例,检测内容主要分为三大板块:

  • 人脸基本信息
  • 人脸位置的矩形坐标
  • 106 个关键点坐标(区分被遮挡的和未被遮挡的)
  • 置信度

106 个关键点的分布(来自官方开源 github)

人脸各区域关键点分布对应表

  • 欧拉角度

摇头(Yaw)、点头(Pitch)、歪头(Roll)三个角度值

  • 人脸动作(包含 5 个人脸的动作)
  • 眨眼
  • 张嘴
  • 摇头
  • 点头
  • 扬眉

处理过程
我们知道了人脸检测需要检测的数据后,接下来看看处理过程:

如图所示,该流程是 iOS 和安卓设备后置摄像头正向拍摄后,在移动端上的整体处理过程。
首先,系统从摄像头获取数据,作为 SDK 的输入。接着,SDK 会进行如下操作:

  1. 在 MNN 引擎执行推理之前,对原始的输入进行预处理,保证输入数据中的人脸为正向
  2. 使用 AI 模型进行推理;
  3. 推理后,产生基于输入图像(预处理之后的)坐标系的关键点结果;。
  4. 把关键点坐标变换到和屏幕渲染坐标系相同的方向,方便渲染。

程应用中,最后的结果关键点要显示在用户屏幕上,前端会使用一个用来渲染的"画布"。画布的坐标系被称为渲染坐标系,
在 SDK 检测的最后一步,我们将关键点变换到和渲染坐标系相同的方向,然后等比例映射关键点坐标到渲染坐标系的坐标即可。映射后可以直接渲染到画布上
代码示例
MNNKit 提供了包括人脸检测、手势识别等方面的示例代码。接下来我们以人脸检测为例,看看怎样可以在安卓或 iOS 中调用 API 进行推理工作。
安卓代码
前文提到,调用 API 需要首先创建一个实例,以下为异步创建 FaceDetector 实例,主线程中回调的代码。

publicstaticvoidcreateInstanceAsync(Contextcontext,FaceDetectorCreateConfigcreateConfig,InstanceCreatedListener<FaceDetector>listener)

在这里,人脸检测 API 会进行检测和跟踪两个动作。检测会遭到人脸位置和关键点,而跟踪是在人脸移动时重新定位关键点的位置。
在视频模式下,系统默认每 20 帧检测一次,其余帧只跟踪。图片模式下则每一次调用都检测。
创建实例后,可以将数据输入模型进行推理。MNNKit 现在已支持多种数据格式输入。在视频流检测场景中,我们可以使用摄像头的回调数据作为接口的输入。输入数据的代码如下:

publicsynchronizedFaceDetectionReport[]inference(byte[]data,intwidth,intheight,MNNCVImageFormatformat,longdetectConfig,intinAngle,intoutAngle,MNNFlipTypeoutputFlip)

使用输入数据为 bitmap 的推理代码如下:

publicsynchronizedFaceDetectionReport[]inference(Bitmapbitmap,longdetectConfig,intinAngle,intoutAngle,MNNFlipTypeoutputFlip)

当 FaceDetector 实例用完之后,我们需要手动释放实例,否则会产生 native 的内存泄露。

publicsynchronizedvoidrelease()

iOS 代码
和安卓代码类似,首先需要创建人脸检测实例:

+(void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)configCallback:(void(^)(NSError*error,MNNFaceDetector*faceDetector))blockCallbackQueue:(dispatch_queue_t)callbackQueue;

默认主线程回调:

+(void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)configCallback:(void(^)(NSError*error,MNNFaceDetector*faceDetector))block;

PixelBuffer 输入进行推理的代码如下:

-(NSArray<MNNFaceDetectionReport*>*)inference:(CVPixelBufferRef)pixelBufferConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

UIImage 输入进行推理的代码如下:

-(NSArray<MNNFaceDetectionReport*>*)inferenceImage:(UIImage*)imageConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

使用通用 buffer 数组输入的代码如下:

-(NSArray<MNNFaceDetectionReport*>*)inference:(unsignedchar*)dataWidth:(float)wHeight:(float)hFormat:(MNNCVImageFormat)formatConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

实例生命周期结束后,会自动触发相关内存的释放,无需调用方手动释放。
据悉,MNNKit 是 MNN 团队在阿里系应用大规模业务实践后的成熟解决方案,历经双十一等项目考验,在不依赖于后端的情况下进行高性能推理,使用起来稳定方便。

阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS相关推荐

  1. 阿里巴巴重磅开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    机器之心报 点击上方"开发者技术前线",选择"星标" 13:21 在看|留言|真爱 来自:机器之心   参与:一鸣.Jamin 近来,有越来越多的深度学习框架开 ...

  2. 小米开源移动端深度学习框架MACE,自主研发,专为IoT设备优化

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 这可能是小米目前为止最重要的AI大动作. 昨天(6月28日),在2018开源中国开源世界高峰论坛现场,小米人工智能与云平台副总裁崔宝秋对外 ...

  3. 小米开源自研移动端深度学习框架MACE

    小米人工智能与云平台副总裁崔宝秋博士在开源中国开源世界高峰论坛上发表<小米 AI 时代的开源>演讲,并在会上宣布,开源小米自研的移动端深度学习框架 Mobile AI Compute En ...

  4. 大数据早报:百度开源移动端深度学习框架 中国联通成立大数据公司(9.26)

    数据早知道,上36dsj看早报! 来源36大数据,作者:奥兰多 『深度学习』百度开源移动端深度学习框架mobile-deep-learning 2017 年 9 月 25 日,百度在 GitHub 开 ...

  5. 移动端深度学习开源框架及部署

    TensorFlow Lite 开源企业:谷歌 GitHub地址:https://github.com/tensorflow/tflite-micro TensorFlow Lite for Micr ...

  6. 雅虎开源CaffeOnSpark:基于Hadoop/Spark的分布式深度学习

    雅虎开源CaffeOnSpark:基于Hadoop/Spark的分布式深度学习 [日期:2016-02-26] 来源:极客头条 作者: [字体:大 中 小] 在基于Hadoop集群的大规模分布式深度学 ...

  7. 支持移动端深度学习的几种开源框架

    原文:http://blog.csdn.net/zchang81/article/details/74280019 支持移动端深度学习的几种开源框架 1.Caffe的移动端项目 caffe项目连接如下 ...

  8. 基于端到端深度学习的自动驾驶:AirSim教程(包含Ubuntu18.04下配置AIrsim仿真环境解决方案)

    这是微软自动驾驶食谱的第一个教程(目前共两个).之前看到过,这里记录一下. https://github.com/microsoft/AutonomousDrivingCookbook 前言 在本教程 ...

  9. 【移动端DL框架】当前主流的移动端深度学习框架一览

    大家好,继之前的12大深度学习开源框架之后,我们准备开通新的专栏<移动端DL框架>,这是第一篇文章,先来做一个总体的介绍,更多的细节可以关注以后的文章. 在这个专栏中,我们会介绍与移动端的 ...

最新文章

  1. word如何(以标题)另起一页(段落 --> 换行和分页 --> 段前分页)
  2. Ubuntu16.04下CUDA 9.0 + cuDNN v7.0 + tensorflow 1.6.0(GPU)环境搭建
  3. html5 网页弹幕,Damoo
  4. java hasfocus_Java KeyEvent.hasNoModifiers方法代碼示例
  5. TCP协议连接过程详解
  6. 饿了么超级会员,年卡低至108元!饿了么会员,点外卖超省钱!
  7. atomic java_在Java中添加@atomic操作
  8. 《菜菜的机器学习sklearn课堂》sklearn入门与决策树
  9. VB 读写TXT文本文件函数
  10. java class教程_深入理解Java Class文件格式(七)
  11. java core 之 异常处理详解
  12. Python爬虫用到的一些浏览器代理标识
  13. Mbps、Kbps、bps、kb、mb单位换算及区别
  14. matlab读取hpf文件,chpf
  15. 项目管理工作中的一些自我反省
  16. 怎么去掉视频上的水印?快速去除水印或字幕的大神技巧
  17. HBuilder发布H5,nginx部署
  18. 使用连接管理器出现“安装程序无法复制文件”错误的解决方法
  19. 商城App接入快递100
  20. 接口定义语言IDL,COM

热门文章

  1. socket的长连接与短连接
  2. 一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别 一、这四个方法的用处 1、用来编码和解码URI的 统一资源标识符
  3. oracle如何上传图片,js实现上传图片之上传前预览图片
  4. 将jar deploy到私服nexus常见问题
  5. 只用1/500数据就打败人类!一种采样高效的强化学习算法 | 报告详解
  6. 乏善可陈的Neuralink
  7. Struts权威著作
  8. 吴恩达:告别大数据,AI需要高质量小数据!
  9. 最新计算机技能需求排名出炉:Python仅排第三,第一你猜得到吗?(附链接)...
  10. 近期活动盘点:清华严飞大数据探寻中国文脉讲座、2019前沿信息科技创新论坛...