Edge AI是什么?它为何如此重要?

传统意义上,AI解决方案需要强大的并行计算处理能力,长期以来,AI服务都是通过联网在线的云端基于服务器的计算来提供服务。但是具有实时性要求的AI解决方案需要在设备上进行计算 ,因此边缘人工智能(Edge AI)正在逐渐进入人们的视野。

虽然本质上AI计算可以使用基于GPU的设备,但这套设备成本高昂,并且搭配非常繁琐,比如对内存要求越来越高、能耗越来越大等。无论是从研究还是创新角度来讲,边缘人工智能推理都正在成为蓬勃发展的深度学习革命越来越重要的组成部分。

与此同时手持设备(比如手机、平板等)日益普及,每年都能卖掉几十亿台,手机已然成为日常使用最为频繁的设备,可以预测对移动AI计算的需求也正在稳步增加。 因此,移动处理器的开发已经变得越来越以人工智能为重点,这些处理器都具有用于机器学习的专用硬件,比如现在主流的手机CPU评测都会加上一项AI计算能力的跑分。

目前从消费应用到企业应用都遍布 AI 的身影。随着联网设备数量的爆发式增长,以及对隐私/机密、低延迟时间和带宽限制的需求,云端训练的 AI 模型需要在边缘运行的情况不断增加。Edge TPU 是 Google 专门为在边缘运行 AI 而打造的 ASIC,它体型小、能耗低,但性能出色,让您可以在边缘部署高精度 AI。从下图可以看出Edge TPU核心的面积仅有一美分的大概十分之一大小。


Edge TPU可以用来做什么?

可以使用Edge TPU在移动设备上训练模型,但目前仅支持通过迁移学习在设备上重新训练的分类模型,这种训练方法是在Low-Shot Learning with Imprinted Weights这篇论文中提到的imprinted weight技术,此技术为实时系统创造了许多可能性。并且,据相关评测显示,Edge TPU是同类产品中计算速度最快的设备。

市面上已经有的其他AI边缘推理硬件

虽然这是第一个Edge TPU,但这之前就已经有一些类似的AI专用硬件,例如:


Coral Beta版

TPU,也称张量处理单元(Tensor Processing Unit)主要供Google数据中心使用。对于普通用户,可以在Google云端平台(GCP)上使用,也可以使用Google Colab来使用免费版。


谷歌在2019年国际消费电子展(以及今年的TensorFlow开发峰会上)首次展示了他们的Edge TPU,然后于三月份发布了Coral Beta



Beta版本包括开发板和USB加速器,以及用于生产目的的预览版PCI-E加速器和模块化系统(SOM)。


USB Accelerator

Edge TPU USB Accelerator与任何其他USB设备基本一样,跟英特尔的MyriadVPU的差不多,但功能更强大。接下来我们来一个开箱,并且稍微上手看看。

开箱



盒子中包含:

  • 入门指南
  • USB加速器
  • Type C USB数据线

入门指南

入门指南介绍了安装步骤,你可以很快完成安装。包括模型文件在内的所有需要的文件可以随安装包一起在官网下载即可,安装过程并不需要TensorFlowOpenCV这些依赖库。

提示:必须使用Python 3.5,否则将无法完成安装。还需要将install.sh文件最后一行python3.5 setup.py develop - user 改为 python3 setup.py develop - user

演示程序

Coral Edge TPU API文档包括图像分类和目标检测的概述和演示程序。

Edge TPU API

在完成以下教程之前,关于Edge TPU API有以下注意事项:

  • 需要安装Python的edgetpu模块才能在Edge TPU上运行TensorFlow Lite模型。它是一个较高层的API,包含一些简单的API以执行模型推理过程。
  • 这些API已经预先安装在开发板上,但如果使用的是USB加速器,则需要自行下载。详细信息请参阅此设置指南
  • 推理过程中需要用到以下关键API:用于图像分类的ClassificationEngine、用于目标检测的DetectionEngine和用于迁移学习的ImprintingEngine

图像分类

实现图像分类的Demo非常简单,比如可以将下边的图片作为ClassificationEngine接口的输入:



目标检测

与图像分类一样,我们只需要调用一下DetectionEngine接口,就可以将输入图片中的目标检测出并用方框进行标识:


由于默认配置会产生假负例,我们可以将默认示例程序中的阈值从0.05调整到0.5,另外将矩形的宽度调整为5,可以得到以下结果:


由于Coral仍只有测试版,API文档中给出的细节不够完整,但目前给出的部分用于以上示例已经足够了。

注意事项

以上demo的所有代码、模型和标注文件都随安装包中包含的库文件一同在官网下载,根据目前已经给出的模型和输入标注文件等,我们可以完成分类和检测任务。

对于分类任务,结果返回排名前2的预测类别及对应的置信度得分;而对于目标检测任务,结果将返回置信度得分及标注方框的各顶点坐标,若输入时给出类别标注,返回结果中也包含类别名称。

树莓派上性能的局限性

不幸的是,业余爱好者最喜欢树莓派无法充分发挥USB加速器的功能和速度。USB Accelerator使用USB 3.0端口,目前的树莓派设备没有USB 3USB type-C,而只能使用速度较慢的USB 2

目前,它只在Debian Linux上运行,但预计很快就会有支持其他操作系统的方法。

深入拓展

Edge TPU的帮助下,Coral还能提供哪些产品呢?

开发板(Dev Board)

作为开发板来讲,树莓派通常是最受欢迎的选择,但谷歌却更推崇NXP i.MX 8M SOC(Quad-core Cortex-A53 与 Cortex-M4F)。有关开发版的更多信息,请参考此页面


但是如果用于实验,尤其是仅需使用Edge TPU的情况下,我们更加推荐USB Accelerator

后续开发

若您已经使用开发板或USB Accelerator做出了不错的prototype原型机,但后续需要将同样的代码应用于大规模生产环境,该怎么办呢?

谷歌已经预先想到这一点,可以在产品列表中看到,下述模块将用于企业支持,并且已经被标记为 即将上线

模块化系统(System-on-module, SOM)


这是一个完全集成的系统(包含CPU、GPU、Edge TPU、Wifi、蓝牙和安全元件),采用大小为40mm*40mm的可插拔模块。

此模块可以用于大规模生产,制造商可以按照本模块所提供的指南生产自己喜欢的IO板,甚至上文提到的已经上市的开发板(Dev Board)都包含这个可拆卸的模块,理论上只要拆下来就可以使用。

PCI-E 加速器

关于PCI-E加速器的信息很少,但顾名思义,它是一个带有PCI-E(快捷外设互联标准,Peripheral Component Interconnect Express)的模块,且有两种变体,这类似于USB加速器,不过不同之处在于将USB接口换成了PCI-E,就像内存条或者网卡那样,树莓派也有PCI-E接口的Compute Module版本。


随着各种外设模块的诞生,可以预料,一些企业级项目也将随之诞生。谷歌Coral也这么认为,在他们的网站上有以下说法:

灵活易用,精准裁剪,适用于初创公司与大型企业。

Tensorflow与Coral项目

谷歌的产品大都与Tensorflow有关,目前,Edge TPU仅支持传统的Tensorflow Lite版本的模型,Tensorflow Lite稳定版刚刚发布,参见此页面

目前,你需要通过一个网页编译器tflite模型转换为tflite-tpu模型。如果使用的是PyTorch或其他框架也不用担心,可以通过ONNX将模型转化为Tensorflow模型。

展望

尽管缺乏对树莓派的全面支持,以及Beta版本中文档有限,但我对Coral项目保持乐观态度。虽然无法立刻确定这种技术的发展前景,但对更强大、低能耗、高成本效益以及更具创新性的产品,我们应当报以更高的期望。好了,本次介绍就到这里,这个系列的全文会收录在我的github目录,欢迎大家star和沟通:github.com/asukafighti…

Google Coral Edge TPU USB加速棒上手体验的更多相关文章

  1. WordPress 后台禁用Google Open Sans字体,加速网站

    解决方法很简单,安装启用 Disable Google Fonts 或者 Remove Open Sans font Link from WP core 其中之一即可.或者如果你没有使用WP自带的官方 ...

  2. 详解Google第二代TPU 既能推理又能训练 性能霸道

    详解Google第二代TPU 既能推理又能训练 性能霸道 转自:http://www.cnbeta.com/articles/tech/613639.htm 5月18日凌晨,Google CEO Su ...

  3. Android 7.0真实上手体验

    Android 7.0真实上手体验 Android 7.0的首个开发者预览版发布了,支持的设备只有Nexus6.Nexus 5X.Nexus 6P.Nexus 9.Nexus Player.Pixel ...

  4. 小鸡G4工程款 上手体验

    前言:之前只是抱着试一试的态度在小鸡活动贴下报名,说实话之前并没有抱希望能够没选中.所以非常感谢小鸡团队给我的这次机会.这应该是我第一次参与厂家的内测活动.希望能给小鸡团队,给广大玩家带来一片实用的上 ...

  5. Python 多线程、进程、协程上手体验

    浅谈 Python 多线程.进程.协程上手体验 前言:浅谈 Python 很多人都认为 Python 的多线程是垃圾(GIL 说这锅甩不掉啊~):本章节主要给你体验下 Python 的两个库 Thre ...

  6. 一分钟安装DolphinScheduler并上手体验

    一分钟安装Apache DolphinScheduler并上手体验 1 一分钟安装DolphinScheduler并上手体验 本教程基于DolphinScheduler1.3.2 2 需要准备: 一台 ...

  7. Google揭露SHA-1碰撞,加速数据重删字节对比

    原创 架构师技术联盟  近期,Google和道荷兰阿姆斯特研究者宣布攻破了世界上第一例公开的SHA-1哈希碰撞实例,业界一片哗然.当两组不同的数据(文件.一段数据)计算出相同的Hash值时,即视为二者 ...

  8. Leap Motion 上手体验

    很早之前就关注了Leap Motion这个颠覆性的体感操作设备,如今7月22日上市至今已经一个月左右,淘宝的价格也已经降到650元,虽说相对国外还是偏贵,但是已经忍不住尝尝鲜了. Leap Motio ...

  9. Android 5.0 Lollipop初上手体验

    在等了好几天还没有等到OTA升级提示,前天笔者给Nexus4线刷入了官方提供的Lollipop的镜像,在试用了这两天之后,现在总结下自己感觉很惊艳的地方和一些地方的吐槽.(点击图片可以查看大图) 1. ...

随机推荐

  1. 2015年SCI收录遥感期刊28种目录

    链接地址:http://blog.sciencenet.cn/blog-57081-928025.html

  2. 纯CSS3实现的动感菜单效果

    1. [代码] 纯CSS3实现的动感菜单效果 <!DOCTYPE html><head><meta http-equiv="Content-Type" ...

  3. Codeforces 337D Book of Evil:树的直径【结论】

    题目链接:http://codeforces.com/problemset/problem/337/D 题意: 给你一棵树,n个节点. 如果一个节点处放着“罪恶之书”,那么它会影响周围距离不超过d的所 ...

  4. C++(六)— 输入方式

    1.输入包含空格的字符串 使用 getline(cin, str)读取一行字符串,遇到换行符停止:cin>>str,是遇到空格就停止. 实现:输入两个字符,在第一个字符中删除第二个字符中出 ...

  5. Memcached 分布式缓存实现原理简介

    摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...

  6. 关于pyhton中的__xxx__格式的方法与变量的理解

    python中类似__xx__的方法和变量是python系统内定义的方法和变量,都是具有特殊意义的基础变量和方法,一般不要擅自使用,除非知道自己在干什么. 具体查看python内置模块builtins ...

  7. HasnMap的一种遍历方式:Map.Entry 和 Map.entrySet()

    1.Map.Entry 和 Map.entrySet()分别是什么?  Map.entrySet():根据名字便可知道,这是一个集合,是一个映射项的set. Map.Entry<k,v>: ...

  8. C++中类型转换

    static_cast            静态类型转换. 在编译的时候C++编译器会做类型检查,基本类型能转换,指针类型不进行转换. C语言中隐式类型转换的地方均可以使用static_cast. ...

  9. Mybatis学习--XML映射配置文件

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configuration.html MyBatis 的配置文件包含了影响 MyBat ...

  10. bzoj 3165: [Heoi2013]Segment 线段树

    题目: Description 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第i条被插入的线段的标号为i. 给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. ...