作者:曾成训(CH.Tseng)
提到 AI,我们脑海中总会浮现如火星文般的复杂算法、深不可测的神经网络、数量庞大到以 TB 计数的 dataset 以及高速运算耗电量惊人的 GPU 等,它们可能存在于云端,甚至就在自家机房的内部;然而,尽管它们的算法再精确、GPU 运算再迅速、网络传输再快,还是无法满足一般使用者最基本的需求:即时回馈,因此更贴近使用者、无延迟的「Edge AI」近年来大量兴起,而前述庞大笨重的 AI 系统则隐身幕后称为「Centralized AI」,两者便组成 Distributed AI 的架构。
如上图左侧,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),它们两者都非常适合平行的处理大量加乘运算,但也由于专用于特定用途,因此它们只支持有限的深度学习框架,而且必须先将模型转换为特定的中介格式后才能运作。
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
cd ~/
wget https://dl.google.com/coral/edgetpu_api/edgetpu_api_latest.tar.gz -O edgetpu_api.tar.gz –trust-server-names
tar xzf edgetpu_api.tar.gz
B. 安装 Edge TPU API
cd edgetpu_api
bash ./install.sh
下图为安装的画面,未来如果想要更改设定值,可以重复执行此安装的步骤。
最后一行出现”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
首先试试最基本的影像分类模型,请执行下方 scripts,下载预训练好的模型及示范图片:
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
下载完成后,进入 demo 目录执行 classify_image.py 程序:
cd /usr/local/lib/python3.5/dist-packages/edgetpu/demo
python3 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
却出现下方的 error:
Traceback (most recent call last):
File \"classify_image.py\", line 19, in <module>
from edgetpu.classification.engine import ClassificationEngine
ImportError: No module named \'edgetpu\'
错误的原因是 edgetpu API 预设安装到 /usr/local/lib/python3.5/dist-packages,但如果你的 Python 环境是 virtualenv,便需要多执行下列的安装步骤:
cd /home/pi/envAI/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/dist-packages/edgetpu
ln -s /usr/local/lib/python3.5/dist-packages/edgetpu-1.9.2.dist-info
执行结果:此为待分类的示范图片鹦鹉,范例程序预测其为 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智慧