TensorFlow on Android(1): 机器学习在移动应用现状

深度学习, 神经网络,人工智能应该是当下最火爆的字眼了,随着AlphaGo的一炮走红,仿佛人人都谈论着人工智能, 说话不带DL, CNN这些就落伍了。

各大巨头也纷纷在AI领域布局, 目前比较流行的深度学习框架有:

  • 谷歌的开源深度学习框架TensorFlow
  • Facebook的开源深度学习框架Torchnet
  • 百度的开源深度学习框架Paddle
  • 源自伯克利的Caffe
  • 基于Theano/TensorFlow的Keras
  • 等等

当大家还在讨论人工智能,机器学习的前景的时候,有几件有趣的事情发生了

  1. Facebook在2016年的时候发布了Caffe2go, 移动端的深度学习库
  2. 2017 Google IO上面发布了TensorFlow Lite, 移动端的神经网络库
  3. 腾讯优图开源了ncnn, 实现深度神经网络在移动端的落地

等一下, 大家可能会感觉到有个问题:什么, 在移动端进行机器学习? 机器学习不是应该需要海量的数据和计算资源吗(CPU/GPU)?移动设备的存储和计算能力能满足要求吗? 在回答这个问题之前,我们来看看下面一个场景:你需要完成一个人脸检测的App应用,但是你们公司没有机器学习的专家,怎么办?

当然,这个难不倒大家, 在这个时代最不缺的就是轮子了, 各大平台都有开放的API共大家调用, 比如:

  • Google Vision API
  • 腾讯优图
  • 百度人脸识别API
  • Face++
  • 讯飞云平台人脸相关API
  • 还有很多…

使用开放的API有很多优点,比如

  1. 不需要任何机器的学习的基础,对于小团队来说能够快速实现产品
  2. 使用简单,只需要通过http接口将图片和相关参数上送到服务器,就能马上得到结果
  3. 能够及时的享受到大平台的海量数据和计算资源对识别模型的优化和修正

但是也有明显的缺点:

  1. 需要移动端能访问互联网, 上传图片需要消耗流量较大,在弱网络环境下,特别是对一些物联网设备的限制比较大
  2. API调用需要付费, 特别是为了实现SLA更需要付出额外的成本
  3. 数据安全存在隐患, 特别是人脸这样的敏感数据
  4. 虽然云平台有海量计算资源,但是对于单独的API调用来讲,仍然存在一定时延,没法做到实时检测

现在让我们换一种思路来解决这个问题, 以目前移动设备的存储和计算能力,是不可能实现在移动端进行模型训练的,当然也没有这个必要。 但是如果我们在服务端利用海量的数据和计算资源训练好模型, 然后将训练好的模型部署到移动端,只利用移动端的计算能力来进行推理(Inference, 记住这个术语, 当你和机器学习专家讨论的时候用到这个词, 他们就会认为你是懂行的), 可行吗?

答案是当然可行了, 而且我认为随着移动端计算能力的提升, 这个将是机器学习在移动端落地的趋势,这也是各大巨头正在做的事情。


开始学习

坦白的说,机器学习的学习曲线是比较陡的,首先你需要有一些编程知识和线形代数的基础。 然后你要学习一些算法并推导他们, SVM, 线性回归, 聚类算法等,学会如何评估学习结果,学会梯度下降的推导。 学会各种提取特征的方法, PCA等。 然后再去学习神经网络的概念, 学会各种网络,如卷积神经网络等,然后开始准备数据,然后训练你自己的模型,然后再调上非常长时间的各种参数…

机器学习是一个工具,一个我们可以用来解决现实问题的工具。如果你想成为一个机器学习专家/科学家, 上面的过程是必须的, 因为你要成为一个制作工具的人。 但是等等,假设我只是一个想使用机器学习这个工具来解决我的现实问题的普通工程师, 我该怎么办?

回想一下我们是怎么从零学会web编程的, 刚开始我们会选一个框架,比如SSH, Rails,Django等,照着模板依葫芦画瓢做一个项目;有了整体的概念以后再去优化一下代码,学会一些best practice;然后再去研究这个框架,比如读读实现代码;然后再去研究下HTTP协议,寻找可以调优的地方;然后自己尝试写一个框架或者插件;最后你就成为web编程的专家了。

本系列文章正是遵循上述的流程,首先我们提一个现实问题, 然后我们用开源的框架和模型来解决它,在这个过程中你会了解机器学习的一些基本概念和流程(这样你就可以在喝咖啡的时候和机器学习专家谈笑风声了),然后学会如何使用这种工具。 在本系列课程的第二部,我们还将学习如何从头训练一个属于你的独一无二的模型,你将学习如何优化这个工具。 最后你再倒过头来去研究和推导神经网络的算法,剩下的就看你的了!


要解决的问题

先给大家看一张图:
enter image description here

这个监控是不是很厉害? 但是他的实现原理很简单的(过程依然很复杂)

  1. 用大量的带标记(图片上的是什么物体, 处于什么位置)的图片数据来训练一个模型
  2. 用这个模型来识别视频每一帧的中的物体(人,汽车等)
  3. 将识别结果可视化(在物体周围画上边框和标签)

我们要做的是这个功能的第一步,在android上面选取一张图片, 识别图片中有哪些物体,并将识别结果可视化。 完成了静态图片的识别,再扩展到实时识别视频中的每一帧就是非常简单的了。


接下来我们就撸起袖子开始吧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sufish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值