在树莓派这样的边缘设备部署预训练模型一直很多开发者与爱好者所关心的内容,我们希望借助这种轻量级计算设备实现模型的本地化推断,并应用到各种有意思的任务中。但树莓派这种以CPU为计算核心的设备很难运行深度学习模型,很多实时推断甚至需要使用云计算资源。因此,近日触景无限发布了一款加载了Intel Movidius 卷积神经网络加速芯片的视觉套件,我们可以在树莓派或笔记本等平台将深度学习模型的计算分配给它。本文介绍了角蜂鸟这一视觉开发套件及其简要的使用方法,感兴趣的读者也可以尝试动手构建实时的目标检测或人脸识别等任务。
角蜂鸟官网:http://www.hornedsungem.org/
角蜂鸟Horned Sungem嵌入式AI视觉套件是触景无限打造的一款即插即用人工智能视觉套件,致力于为大众提供学习、使用及创造AI应用的机会。角蜂鸟Horned Sungem集成了Intel Movidius MA245X卷积神经网络(CNN)加速芯片,体积小、功耗低、算力高。它还支持多系统如Windows(开发中)、macOS、Linux(Ubuntu,Raspbian)、Android等,对Host系统要求极低。
目前,角蜂鸟 Horned Sungem 内嵌了7种基础的神经网络模型,可以完成人脸检测、人脸识别、物体识别等功能。角蜂鸟 Horned Sungem 还可以简单地更换内嵌模型,如果用户手中已拥有训练完成的 TensorFlow、Caffe、Darknet 等神经网络模型,可直接通过角蜂鸟 Horned Sungem 的线上模型转换工具,转换为角蜂鸟 Horned Sungem 专用的神经网络模型。
角蜂鸟的安装和使用都非常简单,基本来说只需要从GitHub下载对应的SDK包,并使用命令行安装就行了。例如在Mac上运行以下命令就能安装SungemSDK:
git clone https://github.com/HornedSungem/SungemSDK.git
cd SungemSDK/installer/OSX
bash ./install.sh tuna
目前角蜂鸟有7个内置的预训练模型,我们可以借助这些模型快速玩转边缘设备上的计算机视觉任务。这些针对不同任务的预训练模型包括MNIST 手写数字识别模型、Mobilenet-SSD 人脸检测模型、Mobilenet-SSD VOC 物体检测模型、SqueezeNet 图像分类模型、GoogleNet 图像识别模型、FaceNet 人脸识别模型和 SketchGraph 手绘识别模型等。它们的使用都非常简单快捷,以下我们将介绍MNIST手写数字识别与 Mobilenet-SSD 人脸识别两个模型。
对于手写数字识别来说,在 /SungemSDK/examples/python 目录下执行以下命令行就能得到已有手写数字的识别:
python3 Hello2018.py
如果一切正常,将会得到以下结果:
| ======= Horned Sungem ======== |
| Device found [0] |
| Model loaded to Python |
| Model allocated to device |
| ============================== |
Hello
[2]
[0]
[1]
[8]
在上面运行的 Hello2018.py 文件中,首先需要加载 OpenCV、NumPy 以及角蜂鸟 HSAPI,然后再将 CNN 加载到设备并设置图像的根目录:
# Import libs
import cv2, sys, numpy as np
sys.path.append('../../api/')
import hsapi as hs
# Load CNN to device and set scale / mean
net = hs.HS('mnist')
imgRoot = '../misc/2018_mnist/%d.jpg'
后面就只需要从 imgRoot 中读取图像,并馈送到模型 hs.HS('mnist') 就能完成预测:
print('Hello')
for n in [1,2,3,4]:
imgname = imgRoot % n
img = cv2.imread(imgname)
result = net.run(img)
print(result[1])
如同手写数字识别一般,人脸识别的用法基本相同,只不过在运行文件中会用一些参数控制识别的行为。如上同样在/SungemSDK/examples/python目录下运行命令行python3 FaceDetector.py就能实现实时人脸识别,如果图像中包含人脸,则可得到输出:
* *****SSD [1]: Box values****** *
* Box Name: Face *
* 360 106 591 361 - w:231 h:255 *
其中SSD [N]中N为检测人脸个数,下一行为人脸检测框Bounding Box的左上角和右下角坐标以及窗的宽高。
FaceDetector.py 文件中的代码如下所示:
import numpy as np, cv2, sys
sys.path.append('../../api/')
import hsapi as hs
WEBCAM = False # Set to True if use Webcam
net = hs.HS('FaceDetector', zoom = True, verbose = 2, threshSSD=0.55)
if WEBCAM: video_capture = cv2.VideoCapture(0)
while True:
if WEBCAM: _, img = video_capture.read()
else: img = None
result = net.run(img)
img = net.plotSSD(result)
cv2.imshow("Face Detector", img)
cv2.waitKey(1)
其中变量WEBCAM表示是否使用外接USB摄像头,使用的话则需要调用OpenCV。加载预训练模型FaceDetector时,参数zoom如果配置为True,则表示输出图像缩放为640*360,否则为1920*1080。verbose为2表示输出所有信息,而threshSSD则控制了人脸检测的阈值,提高阈值会减少错检但增加漏检。之后就是利用已训练模型做推断,其中result包含检测置信度和边界框位置等信息。如下是人脸检测的输出实例:
* *****SSD [9]: Box values****** *
* Box Name: Face *
* 167 103 307 262 - w:140 h:159 *
* Box Name: Face *
* 29 114 140 272 - w:111 h:158 *
* Box Name: Face *
* 344 101 446 239 - w:102 h:138 *
* Box Name: Face *
* 349 255 474 365 - w:125 h:110 *
* Box Name: Face *
* 507 93 611 225 - w:104 h:132 *
* Box Name: Face *
* 205 280 313 362 - w:108 h:82 *
* Box Name: Face *
* 19 2 119 109 - w:100 h:107 *
* Box Name: Face *
* 189 4 290 99 - w:101 h:95 *
* Box Name: Face *
* 334 0 425 92 - w:91 h:92 *
重要的是,角蜂鸟可以插入安卓设备中,并作为视觉系统的扩展。此外,在角蜂鸟的现场Demo展示中,它已经嵌入到了很多很有意思的实现里。包括能检测并追踪目标的树莓派小车、能识别人脸并打招呼的改装奥松机器人、智能台灯及情景记录仪等。这些应用都非常有意思,且角蜂鸟也提供了官方教程。
未来,角蜂鸟Horned Sungem将上线模型市场,会发布一些高质量模型供给用户兑换使用,而用户本身也可以上传自己训练的模型售卖。除此之外,角蜂鸟Horned Sungem在未来还将提供完善的应用/套件商店、交流互动社区、模型变现渠道等。
最后,角蜂鸟Horned Sungem嵌入式AI视觉套件于5月25日正式发布,官方购买渠道为“角蜂鸟HornedSungem”公众号/角蜂鸟小程序,微信搜索角蜂鸟即可。