第一课:人工智能在嵌入式中的机会

2019-07-13 03:35发布

嵌入式人工智能的机会

深度学习、机器学习、人工智能可以说是当下最火爆的字眼,随着 AlphaGo 的一炮走红,仿佛人人都谈论着人工智能,说话不带 DL、CNN 这些字眼的就落伍了,创业企业不和人工智能联系起来的就无法拉到投资。各大巨头也纷纷在 AI 领域布局,目前比较流行的深度学习框架有:
  • 谷歌的开源深度学习框架 TensorFlow
  • Facebook 的开源深度学习框架 Torchnet
  • 百度的开源深度学习框架 Paddle
  • 源自伯克利的 Caffe
  • 基于 Theano/TensorFlow 的 Keras
上面这些框架大都用在云端或者本地性能高需求的平台,随着人工智能的发展和市场的需求,当大家还在讨论人工智能、机器学习前景的时候,有几件有趣的事情发生了:
  • Facebook 在 2016 年的时候发布了 Caffe2go,移动端的深度学习库
  • 2017年 Google IO 上面发布了 TensorFlow Lite,移动端的神经网络库
  • 腾讯优图开源了 ncnn,实现深度神经网络在移动端的落地

我们可以看到从 PC 互联网到移动互联网到 internet of smart things,实际上对 AI 的要求越来越高。对 PC 互联网来说,对 AI 的要求其实没有那么高,但在移动互联网上,这种要求出现了。未来,这些移动设备上,会有越来越强的AI需求。我们有很多的计算,会从数据中心往这些移动设备上去转移。在这些设备上,做 perception,做人机交互,还有决策等事情。这些计算要求 low latency,没有延迟,并且是实时的,low power,low cost,并且是 privacy protect 的。比如这在汽车上面,就是一个很大的一个应用场景——不可能前面有小孩子突然横穿马路,你还要把数据传上数据中心,处理完了以后再传回来,这是不可想象的。所以一定要本地计算,要实时处理没有延迟。很多移动设备,比如 Amazon 的 Echo,就是把很多计算往边缘设备上去推,使得它整个的用户体验会更好,这也是未来的一个趋势。又比如监控摄像头,中国去年一共部署了一亿个。监控摄像头的资料,其实存3个月就扔掉了。未来,对于所有这些摄像头,都会有专门的处理器,去处理实时的视频,这是一个大的趋势。说到嵌入式人工智能的时候,可能有些小伙伴要疑问:机器学习不是应该需要海量的数据和计算资源吗(CPU/GPU)?移动设备的存储和计算能力能满足要求吗?没错,以目前移动设备的存储和计算能力,是不可能实现在移动端进行模型训练的。 但是如果在服务端利用海量的数据和计算资源训练好模型,然后将训练好的模型部署到移动端,只利用移动端的计算能力来进行推理。这个将是机器学习在移动端落地的趋势,这也是各大巨头正在做的事情。

学前思考

由于机器学习发展阶段还处于算法期,目前为止还没有成熟的框架或者算法提供,并且不同领域对于机器学习又有不同的模型限制。现在阶段学习机器学习首先需要有一些编程知识和线性代数的基础;然后要学习一些算法并推导它们,SVM、线性回归、聚类算法等,学会如何评估学习结果、学会梯度下降的推导、学会各种提取特征的方法、PCA等;接着再去学习神经网络的概念、学会各种网络、如卷积神经网络等;开始准备数据,训练你自己的模型,最后再调上非常长时间的各种参数等。想想都是一个漫长的过程。我个人认为人工智能产业的发展将有三个阶段:算法红利期,工程技术红利期,平台红利期。虽然现在以这三者交叉发展着,但宏观的还可以看作目前还处于算法红利期。不同的发展阶段有不同的使用方式。机器学习是一个工具,一个可以用来解决现实问题的工具。如果想成为一个机器学习专家/科学家,上面的过程是必须的,因为你要成为一个制作工具的人。 但是假设只是一个想使用机器学习这个工具来解决现实问题的普通工程师,该怎么办?回想一下当时是怎么从零学会 Web 编程的:
  1. 选一个框架,如 SSH、Rails、Django 等,照着模板依葫芦画瓢做一个项目
  2. 有了整体的概念以后再去优化一下代码,学会一些 best practice
  3. 研究框架,如读读实现代码
  4. 研究 HTTP 协议,寻找可以调优的地方
  5. 尝试写一个框架或者插件
  6. 最后成为 Web 编程的专家

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

课程目标

上面就是我们希望这次课程实现的目标,步骤如下:
  • 用大量的带标记(图片上的是什么物体、处于什么位置)的图片数据来训练一个模型
  • 用这个模型来识别视频每一帧中的物体(人、汽车等)
  • 将识别结果可视化(在物体周围画上边框和标签)

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