在樹莓派這樣的邊緣裝置部署預訓練模型一直很多開發者與愛好者所關心的內容,我們希望藉助這種輕量級計算裝置實現模型的本地化推斷,並應用到各種有意思的任務中。但樹莓派這種以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”公眾號/角蜂鳥小程式,微信搜尋角蜂鳥即可。