自 2019 年 4 月在 Github 开源以来,淘系技术部-端智能团队自研的 MNN 推理引擎,因为其高性能、易用性以及优秀兼容性受到不少开发者的支持和喜爱。我们也把这份支持化作不断前进的动力,仅最近半年就推出了包括但不限于如下的诸多亮眼特性:

  • 几何计算。通过 MNN 自研的“硬核”技术,将多后端算子实现这项枯燥但必要的工作成本大幅降低。正是基于这项技术,MNN 重写了目前所有的硬件后端。引入几何计算之后 GPU 后端算子的覆盖率大幅增加,在GPU 后端性能普遍获得约 20% 提升,并新支持了 TensorRT 和 CUDA 后端。
  • 基于 Transformer 结构的 ASR 模型的支持。为了应对这类大量涉及 Control Flow、Dynamic Shape和Zero Shape等特性的模型结构,MNN 在框架层面进行了大幅度重构从而对其进行支持和完善。

关于 MNN 的强大,能说的还有很多,但我们不想再一次通过秀肌肉来证明 MNN 的领先独到。相反,我们希望通过这篇文章来说明更重要的一件事:来自开发者的声音,我们听见了。

在 MNN 开源的这一年多里,随着 MNN 被越来越多的开发者、企业所了解并使用,我们与社区之间的交流也愈加紧密频繁。在这之中,有一类的呼声经常被提起:

  • “MNN 很强了,就是希望 iOS / Android Demo 更多一点。Python 还是有点不熟悉”
  • “教教我们这些小白怎么上手呗。MNN 能干些啥呀~”
  • “五子棋牛逼,支持五神!老板我也想搞端智能!”

没错,很多人对机器学习的陌生来自于未知,而正是因为这个未知让大家想象不到能用 MNN 实现什么。

所以我们在想,如果用一门更熟悉的语言,带大家走入端智能的大门,为自己的职业生涯开辟一道新的口子,这样是不是对大家更有帮助?

今天,对着广大的移动开发者,我们要大声的宣布:MNN for Swift 正式来啦!伴随着这个项目一同发布的,还有系列实践性教程 -《MNN x Swift 机器学习实战》。

通过这两个项目,希望能给各位带来清晰的端智能学习路径。

能从课程中收获什么


相信大家都对网上质量参差不齐、没有实际干货的课程感到深恶痛绝。所以在设计系列教程的时候,我们首要考虑的两个要素就是:

  • 免费

硬核技术和动手实践结合

基于此,我们会以每两周一次的方式进行 5 次的系列课程教学,结合 MNN 工作台 AI For Everyone 的低实践门槛,带来值得期待的知识分享。

系列直播预告

插段广告,如果你还不知道 MNN 工作台是什么,那就赶快前往 MNN 官网 www.mnn.zone 去下载吧。MNN 工作台是淘系技术部 - 端智能团队在今年 10 月份对外公测的一站式端侧 AI 平台。它是集低门槛预训练模版、开箱即用算法集、多端一键部署于一体的机器学习工具箱,通过 MNN 工作台,每个人都可以在几分钟内完成模型训练并部署到手机上运行看到应用效果。

整体的课程大纲如下:

  • Introduce to MNN For Swift

    • 介绍移动端机器学习现状

MNN For Swift 整体概览

  • MNN For Swift 实现原理

    • C++ 至 C 到 Swift 开发流程的最佳实践

MNN For Swift API 设计思路MNN For Swift 进阶 - 玩转 Swift 自定义操作符

  • 玩转 MNN 工作台 For Swit (一)- 模型预测
    • MNN For Swift 推理 API 使用介绍

手把手玩转 MNIST 手写数字预测高级进阶 - 从 MNN 工作台获取更多高级模型

  • 玩转 MNN 工作台 For Swift(二)- 模型训练
    • MNN For Swift 训练 API 使用介绍

用 MNN Swift 构建 MINST 数字识别模型高级进阶 - 通过 MNN 工作台训练更多模型

  • MNN For Swift 应用实战
    • OCR - 光学字符识别简介

MNN 工作台 OCR 开箱即用模型简介使用 MNN For Swift 部署 OCR 模型完整应用案例展示

怎么样?看完大纲后是不是对使用 MNN For Swift 进行机器学习充满了好奇?那就敬请期待我们后续的课程吧!

当然有人会问:“付出那么多,你们想从这个课程中收获什么?”

很简单,我们希望通过这个课程让大家了解端智能是什么、如何把端智能和自身的日常工作进行结合。对那些积极参与《MNN x Swift》系列课程的朋友,如果您对 MNN 和 Swift 有什么独到的见解或者建议,也会邀请您参与到我们的直播中,共同打造 MNN For Swift 的社区生态!

只有更多人一起来玩端智能,这个新兴的领域才能受到更多的关注、获得更长足的发展。

Why Swift


最后我们还想来谈谈为什么 MNN 会选择在这个时间点支持 Swift。

一直以来,因为其强大的社区活力和易用的特性,Python 始终把控着机器学习社区语言的头把交椅(虽然 Julia 也发展的很迅猛)。Tensorflow、PyTorch 以及最新推出的 MNN 工作台等主流的机器学习框架或工具更是和 Python 这门语言紧紧的交织在一起。

但是将 Python 搬到移动端上却不是一件非常容易的事,引用 Tensorflow 对于移动端应用 Python 的观点来看:

  • 部署麻烦,运行时依赖太多。
  • 没有编译期类型检查。这导致很多错误要到运行时才能发现,在移动端,这些不可忽视的错误常常导致严重的应用崩溃等重大用户体验问题。
  • 性能太差,并发困难。而机器学习模型对算力的贪婪需求,迫切需要靠并发缓解。

而自 2014 年 WWDC 正式发布之后,Swift 已经逐渐成为了苹果开发者生态中的主流开发语言。作为一门比 Objective-C 更加现代化、更加安全的编程语言,Swift 已经获得了国内外广大开发者的喜爱。同时,应用 Swift 可以让我们“免费”享受到苹果工程师持续不断的性能、稳定性优化成果。

更重要的一点是,当我们基于 Swift 实践了部分机器学习开发工作后,我们惊讶的发现,Swift 竟然在机器学习领域有着与 Python 相媲美的表达特性。

用如下一段 Python 和 Swift 的 MNN 编程片段进行简单对比:

Python 代码:

# F = MNN.exprinput_data = F.placeholder([1, 3, image_height, image_width], F.NCHW, F.float)input_data.write(image_data)input_data = F.convert(input_data, F.NC4HW4)outputs = ocr_det_net.forward([input_data])[0]outputs = F.convert(outputs, F.NCHW)data = outputs.read()

同样的代码在 Swift 中:

var input_data = Expr.placeholder(shape: [1, 3, image_height, image_width],                                  dataFormat: .NCHW,                                  dtype: Float.self)input_data.write(data: image_data)input_data = Expr.convert(input: input_data, format: .NC4HW4)var output = ocr_det_net.onForward(inputs: [input_data])[0]output = Expr.convert(input: output, format: .NCHW)let data = output.read()

毫不夸张的说,如果不加以提示,可能根本不会感受到二者的异同,可见二者在语法表达上十分接近。

除了同样充分的表达性以外,Swift 在移动开发领域天然的优势(苹果大力支持)以及语言自身的安全特性都让 Swift 比起 Python 而言更适合移动端机器学习。

这也是我们为什么下定决心要开展 MNN For Swift 的重要原因。

在内部项目中,我们已经用 MNN For Swift 与 SwiftUI 完成了机器学习应用的编写,91% 的代码均为 Swift。由此可见 Swift 在移动端机器学习领域是能让开发者快速上手,降低开发者的开发门槛的一门优秀语言。所以不要犹豫,赶紧把 MNN For Swift 学起来。

结语


纸上得来终觉浅,绝知此事要躬行。不要再为自己每天还在糊 UI、画 Label 、组装 TableView 而感到焦虑。通过《MNN x Swift 机器学习实战》,我们希望让大家感受到深度学习不止是从事算法专业人员的“独门武器”、也不是大厂宣传秀肌肉的利器,而是让所有爱好技术的人都能参与实践的自我提升手段。

也希望借助 MNN For Swift 项目及系列课程,让大家感受到 MNN 积极拥抱社区、响应开发者呼声的热情与决心,给开发者们缓解一丝冬季的焦虑。

— 完 —

file input 移动端选择文件夹_免费 |《MNN For Swift》移动端机器学习实战课程相关推荐

  1. openfilename 选择文件夹_这个软件能帮你1秒内搜索文件夹中的东西

    在文件夹中搜索文件时经常要等几十秒到几分钟才能出来,本篇文章推荐的软件是瞬间出搜索结果的软件:everything. everything软件大小很小,zip包1.5M,搜索能力很强,而且支持文件夹文 ...

  2. js 直接打开选择文件窗口_基于HTML5 构建的 Web端现代化PDF在线预览插件——PDF.js...

    引言 PDF文件现在在许多企业中常用 - 无论您是要生成销售报告,交付合同还是发送发票,PDF都是首选的文件类型.PDF.js是由Mozilla编写的JavaScript库.由于它使用vanilla ...

  3. 如何用c#打开文件夹并选择文件夹内的一个文件 open folder and select file

    如何用c#打开文件夹并选择文件夹内的一个文件 open folder and select file: 在运行中可以输入"Explorer /select,D:\somefile.txt&q ...

  4. jq监听input type=file发生改变,即选择文件,并获取文件名称

    jq监听input type="file"发生改变,即选择文件,并获取文件名称 <input id="fileupload" name="fil ...

  5. php file取不到手机相册,webuploader移动端选择文件无法打开手机相册的解决办法...

    webuploader移动端选择文件无法打开手机相册的解决办法 本文为转载: 原文链接:http://www.juguw.net/article-2325.html webUploader是一款不错的 ...

  6. python选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱(通过163邮箱)

    工作中需要将自动生成的表格发送给办公邮箱继续处理,结合遍历文件夹和自动发邮件,做出了可以选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱 import smtplib from ...

  7. java swt 保存文件夹_采用SWT实现系统文件夹的树形结构显示

    /** * 使用SWT实现的系统文件夹目录的显示,并读取文件夹目录下文件的大小(格式化显示) * 实现选择文件夹.打印文件夹名.文件夹的绝对路径 * 显示选准的文件所在的路径,不显示隐藏文件路径 */ ...

  8. 弹出选择文件夹的对话框 BROWSEINFO 的用法【MFC】

    以下是在vs2008中编译通过的代码,代码注释详细.要实现的功能是点击"浏览"按钮,即弹出选择文件夹的对话框.并将选择的文件夹或文件路径显示在MessageBox中. void C ...

  9. 截取字符串,计算字符串字节大小,选择文件夹,上传文件

    获取(.)点前一个字符 string s = "123_u.jpg"; string strKzm = s.Substring(s.LastIndexOf("." ...

最新文章

  1. 浪潮刘军:为什么说计算力是AI时代“免费的午餐”?
  2. linux 火狐安装java插件_Linux下Firefox安装配置JDK插件
  3. 无责任Windows Azure SDK .NET开发入门(二):使用Azure AD 进行身份验证
  4. tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法
  5. Docker启动失败 提示An error occurred和乱码
  6. 宁德时代811电芯初现真容 搭配宝马X1混动汽车能量密度提升近6成
  7. Python学习入门基础教程(learning Python)--4.2.3 Python的for实现递归,(0629学习笔记)我研究出来了!...
  8. [POI2014]Freight
  9. 关于51CTO民意调查之自主添加google广告代码的几点意见
  10. vue 实现12个月的平铺式日历插件
  11. Maven Setting.xml配置文件下载 阿里云镜像 下载可用
  12. PHP 实现微信登录
  13. MyScript ---LateX公式编辑排版
  14. Apache Shiro 集成-Cas
  15. 深度学习入门笔记(十七):深度学习的极限在哪?
  16. mac address 的一些操作
  17. html代码可以在dw用吗,HTML基础DW使用教程(示例代码)
  18. Leetcode 1235. Maximum Profit in Job Scheduling (python)
  19. 浅析互联网产品设计中的色彩心理学
  20. http-server : 无法加载文件 C:\Users\mes\AppData\Roaming\npm\http-server.ps1,因为在此系统上禁止运行脚本。有关详细信息, 请参阅 http

热门文章

  1. 共享的网络如何让自己比别人快_OPPO K3如何共享网络?
  2. ​java/ mysql企业动态网站设计制作作业成品
  3. 【毕业答辩】毕业论文答辩有技巧!
  4. 你会处理圆周率吗?----- Python操作文件应用举例
  5. Python: 如何安装 torch 对应的 torchvision 版本?
  6. fedora16 解码方案
  7. 050医疗项目-模块五:权限设置-第三方系统的接入
  8. 一个或多个音频服务未运行 win7 错误1079:此服务的账户不同于运行于同一进程上的其他服务账户...
  9. Netty服务器无限循环给客户端发送数据
  10. 详述怎么使用Linux救援模式