移动端深度学习框架——绝影简介

绝影(Prestissimo)

绝影是九言科技开发的高性能移动端深度学习框架,其项目地址见

https://github.com/in66-dev/In-Prestissimo

背景

绝影前身是一个GPU方案:http://blog.csdn.net/jxt1234and2010/article/details/71056736

为了最好的兼容性,我们把引擎模块(各个Layer的运算逻辑)用 cpu 重写,并做汇编级优化,经过3个多月的开发后,绝影性能超过了当时所有的开源框架(caffe、tensorflow等等),人像分割的性能也达标了,于是商用上线。

后面绝影进一步优化以及扩展功能,这段时间, ncnn、 mdl 先后开源,作为过来人,我们深知中小企业缺乏移动端框架的痛苦,因此我们将绝影开放,以期推动AI行业共同进步。

特性说明

性能

绝影分float和int两个计算分支,int性能高,但会牺牲一定精度。大部分网络用int的精度便已经足够,对于少数复杂的网络int的计算会有误差,可以用float分支作对比。

项目文档中有性能测试的对比报告,绝影的int计算分支单线程的性能就快于所有开源框架的多线程版本。

具体使用的优化技巧不外乎 浮点转定点、除转乘、指令重排、neon、unroll、winograd 等等,难点不在于优化技巧,而在于每一步都下苦功夫去实现。

支持网络

详细的支持情况参看项目文档,简单来说,是支持人像分割(Resnet)、人脸检测(mtcnn)、目标检测(faster-rcnn)这几个网络。

另外,为了开发者调试方便,所有网络中间结果都会保留着,这会使得绝影占用的系统内存稍大。

API使用

API的使用重点看 android demo 的 jni 部分,先建factory,然后由模型和factory建net,每次运算时先填inputImage,运行完成后由outputImage取数据。

之所以将factory和net分开,以及用 vUpload 和 vDownload 上传下载数据,是为了支持异构计算(CPU、GPU版本可共用一套框架)。

InAPI

由于去除了专作接口层和基本图像处理优化的 fastcv 支持,绝影的入和出(Bitmap->buffer 和 buffer->Bitmap)可能会产生额外性能损耗。如果超出了预期请自行用neon解决。

框架对比

已经开源的框架的性能测试对比附在项目文档中。绝影和ncnn、mdl等等的性能并不在一个层级上,没什么好对比的。可以对比的是一些不开放的商用框架。

商汤的 PPL

作为中国著名的AI创业公司,商汤的ppl一直是他们的核心竞争力之一。

参考这里面高洋的回答
https://www.zhihu.com/question/62871439
Cortex-A57单核2.1GHz
PPL 单线程 跑 SqueezeNet v1.1 68ms

没有同类机器对比,也不确定他们是64位还是32位的版本,参考绝影在 Mate 8 (2.3GHz)上的速度57ms,大致持平。

支付宝的xNN

http://geek.csdn.net/news/detail/238369

“xNN在Qualcomm 820 CPU上能够输出29.4 FPS的前向预测帧率,在苹果A10 CPU (iPhone 7)上的帧率则达到52.6 FPS”。

按这个数据,iphone7上面的SqueezenetV1.1的耗时为 19ms,跟绝影多线程版差不大多。

模型支持度、以及模型压缩方面比绝影做得好(单看它的宣传来说),这方面的技术我们还在开发中。

鸣谢

感谢老大冬冬的支持,兄弟团队的小伙伴也十分给力,列一下花名,排名不分先后:乐涤、汤圆、咖啡、可召、晨晨。

阅读更多
版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/jxt1234and2010 https://blog.csdn.net/jxt1234and2010/article/details/78661965
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭