提到 AI,我们脑海中总会浮现如火星文般的复杂算法、深不可测的神经网络、数量庞大到以 TB 计数的 dataset 以及高速运算耗电量惊人的 GPU 等,它们可能存在于云端,甚至就在自家机房的内部;然而,尽管它们的算法再精确、GPU 运算再迅速、网络传输再快,还是无法满足一般使用者最基本的需求:即时回馈,因此更贴近使用者、无延迟的「Edge AI」近年来大量兴起,而前述庞大笨重的 AI 系统则隐身幕后称为「Centralized AI」,两者便组成 Distributed AI 的架构。
![「AI边缘运算」Google Coral USB Accelerator 开箱测评](http://p2.ttnews.xyz/loading.gif)
如上图左侧,Edge AI 部署于使用者终端,专用于「推论及决策」等动作,可满足低延迟、快速回应的 AI需求,例如 Robots、Drones、Portable or Mobile Devices、Outdoor Devices 等。
Google Coral USB Accelerator
目前市面可满足 Edge AI 的硬件设备选择相当多,大致可分为可单独运行的单版 AI board 与 USB 接口无法独立运行的 AI 加速器。今天要开箱的是一个可以通过 USB 与树莓派搭配的 AI 加速器:Google Coral USB Accelerator,它的外形与功能很容易让我们联想到 Intel 的 Neural Computing Stick(NCS),这两种都属于针对「深度学习运算」特别设计的 ASIC IC(Application Specific Integrated Circuit),它们两者都非常适合平行的处理大量加乘运算,但也由于专用于特定用途,因此它们只支持有限的深度学习框架,而且必须先将模型转换为特定的中介格式后才能运作。
![「AI边缘运算」Google Coral USB Accelerator 开箱测评](http://p2.ttnews.xyz/loading.gif)
NCS2 (左)与 Google Coral USB Accelerator(右)
NCS2 使用的中介档称为 IR(Intermediate Representation),可支持 TensorFlow、Caffe、MXNet、ONNX、Darknet 等模型转换为 IR(Intermediate Representation)的中介档格式,且还支持 OpenCV 的 DNN 模组;而 Google Edge TPU 目前则仅支持自家的 Tensorflow Lite 格式,且是 Edge TPU 专用的tflite-tpu,因此使用前必须将 TF Lite 模型转档后才能使用。
Google Coral USB Accelerator 的尺寸与重量都比想像中的更小更轻,相较于部置在云端能够提供训练与推论的 Cloud TPU,这块 Coral USB Accelerator 属于 Edge AI 的一环,即是上面所指的 Edge TPU。
推论时间比较
这个小巧的加速器能提升多少深度模型的推论速度呢?下面统计资料来自官方网站,由左至右:蓝色为使用一般 PC(CPU)、橙色为 PC 加上 Edge TPU、灰色为树莓派 3、黑色为树莓派加 Edge TPU,数值代表模型的推论时间,因此越小越好;由图表中可看出树莓派加上 Edge TPU 后可说是如虎添翼,比 PC 的 CPU 快上数十倍,甚至与 CPU+Edge TPU 并驾齐驱,可惜树莓派没有支持 USB 3.0,否则速度应该会更令人满意。
使用各加速器推论时间的比较
推论时间数值表
安装 Edge TPU 与 Python 资料集
接下来,我们先将 Google Coral USB Accelerator 接上树莓派,如下图所示:
A.下载 Edge TPU API
<code>cd ~/wget https://dl.google.com/coral/edgetpu_api/edgetpu_api_latest.tar.gz -O edgetpu_api.tar.gz –trust-server-namestar xzf edgetpu_api.tar.gz/<code>
B. 安装 Edge TPU API
<code>cd edgetpu_apibash ./install.sh/<code>
下图为安装的画面,未来如果想要更改设定值,可以重复执行此安装的步骤。
最后一行出现”Would you like to enable the maximum operating frequency?”如果输入Y,那么 Edge TPU 在推论时会全力运作加快速度,但需注意在这种情况下可能会产生高热。
安装的过程相当简单且顺利,目前的版本为 edgetpu-1.9.2,如下图所示:
C. 重新插入
安装好 API 后,如果 Accelerator 已经接在 USB 上,建议再重新插拔一次,让 udev rule 生效。
D. Demo 范例实作
- Image Classification
首先试试最基本的影像分类模型,请执行下方>
<code>cd ~/Downloads/wget https://dl.google.com/coral/canned_models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \\https://dl.google.com/coral/canned_models/inat_bird_labels.txt \\https://dcoral.withgoogle.com/static/docs/images/parrot.jpg/<code>
下载完成后,进入 demo 目录执行 classify_image.py 程序:
<code>cd /usr/local/lib/python3.5/dist-packages/edgetpu/demopython3 classify_image.py \\--model ~/Downloads/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \\--label ~/Downloads/inat_bird_labels.txt \\--image ~/Downloads/parrot.jpg/<code>
却出现下方的 error:
<code>Traceback (most recent call last): File "classify_image.py", line 19, in <module> from edgetpu.classification.engine import ClassificationEngineImportError: No module named 'edgetpu'/<module>/<code>
错误的原因是 edgetpu API 预设安装到 /usr/local/lib/python3.5/dist-packages,但如果你的 Python 环境是 virtualenv,便需要多执行下列的安装步骤:
<code>cd /home/pi/envAI/lib/python3.5/site-packages/ln -s /usr/local/lib/python3.5/dist-packages/edgetpuln -s /usr/local/lib/python3.5/dist-packages/edgetpu-1.9.2.dist-info/<code>
执行结果:此为待分类的示范图片鹦鹉,范例程序预测其为 Ara macao,机率为 0.76,如下图所示:
总结
虽然 Google Coral USB Accelerator 在外形体积与耗电量上占尽优势,且使用精度更低的 INT8,使得 Coral USB Accelerator 在 SSD Mobilenet V2 模型的推论速度比起其他 Edge AI chip 更快,但这是种种不方便使用之下妥协的结果,例如 Edge TPU 目前仅支持 Tensorflow lite 一种格式,且是更为简化的 Tensorflow lite 版本,所支持的神经网络 layer 种类更少。
因此,您在上手一个 Google Coral USB Accelerator 后,除了执行官方所提供的范例外,可能还会烦恼「如何将自己先前所训练、FP32 精度的模型通过一道道繁琐的程序转换为最终 INT8 的 Tensorflow lite for Edge TPU 模型?」(此步骤称为 post-training quantization),并且考虑能否接受 INT8 模型所带来较低准确率的表现,以及后续是否需要采取重新训练的方式来提升 INT8 精度模型的准确率。
閱讀更多 AI智慧 的文章