Tag Archives: Movidius

[課程紀錄文] 2018.8.13-14-跟著CAVEDU學AI人工智慧:一堂結合機器學習中的影像辨識及邊緣運算的深度課程

記錄

宗諭

攝影

吉弘

講師

吉弘、豐智

上課地點台灣微軟大樓
課程時間

2018年8月13-14日

8月13至14日,一場AI人工智慧的深度學習課程,在台灣微軟大樓展開⋯⋯。

 

然而,早在課程開始前的一個月,CAVEDU教育團隊這邊的兩位講師:「阿吉老師」曾吉弘與徐豐智,以及與此次課程的相關人員,便已針對這門課程展開緊鑼密鼓地準備。從剛開始針對課程內容進行深入研究、討論;至中期的針對「Microsoft Azure DSVM資料科學虛擬機器」持續調整、設定,並且訓練模型;最後一週與課程各單位間的持續溝通、協調、聯繫,針對上課要使用的RK Car不斷調測,設計、印刷試跑RK Car需用的道路地墊⋯⋯等等。可以說,CAVEDU教育團隊真是為這次課程卯足全勁了!

 

課程的結果也是十分甜美。根據微軟方面人員的統計,參與課程21位學員的AI AGV車皆成功跑車,一個步驟都沒有漏掉。而微軟方面亦十分肯定CAVEDU教育團隊,在這次課程中展現出的專業能力

圖1 講師之一「阿吉老師」曾吉弘

 

圖2 另外一位講師徐豐智(中著紅衣者)

 

回到這門課程,究竟教授給學員的是什麼呢?

 

課程的設計是屬於實務導向,簡而言之,就是訓練無人車達成路牌辨識的目標,等學員訓練好模型後,再至CAVEDU教育團隊設計、製作的地墊上試跑。

圖3 學員讓RK Car在CAVEDU製作的道路地墊上試跑

 

我們運用什麼工具訓練模型呢?答案是微軟的Azure DSVM資料科學虛擬機器。Azure DSVM是一種雲端服務,透過常用於資料分析、機器學習服務及AI訓練的數個熱門工具,預先安裝、設定及測試的Azure虛擬機器映像。

圖4 資料蒐集並訓練模型

 

下圖是課程中使用的無人載具RK Car,車子由CAVEDU教育團隊自造,以Raspberry Pi單板電腦為核心。RK Car上藍色的是Intel Movidius神經運算棒,阿吉老師有向學員們展示Intel的AI模型,透過Movidius的加速,針對道路上各種車輛進行分類,以及街景影像的辨識,例如街道上的人、車牌、摩托車⋯⋯等等。透過Intel Movidius,能使硬體等級沒有非常高的Raspberry Pi單板電腦,以更快速度進行影像辨識。(若欲購買RK Car,請洽機器人王國商城。)

圖5 安裝上Intel Movidius神經運算棒的RK Car

 

下圖是學員們跑車的情況。每位學員的無人載具皆需學會辨識左轉、右轉、停止標示,才能成功完成道路地墊上的試跑。在阿吉老師、豐智及助教的悉心準備、指導下,所有學員皆跑車大成功!

圖6 所有學員順利完成跑車

 

對CAVEDU教育團隊而言,這次課程使我們在AI人工智慧領域又邁進一步。之前我們較著重在「邊緣運算」,也就是將應用程式、資料及服務的運算,由網路中心節點移至網路邏輯上的邊緣節點進行處理。

 

這次,我們實作了機器學習中的影像辨識,並整合剛剛提及的邊緣運算,成功達成一次AI實務的軟硬整合課程。套一句阿吉老師的課後感言:「我想,我們應是最先推出AI實務軟硬整合課程的團隊吧。」歡迎跟著我們一起成長、一起學習AI,微軟將繼續於9月份、10月開課,歡迎點此報名

 

最後,播放一段輪型機器人視角的跑車影片,給各位讀者欣賞。

 

相關文章

[AI 人工智慧應用] MovidiusNCS在PC中設定Ubuntu虛擬機並執行NCSDK(下)

 

作者

袁佑緣

時間

三小時

難度

***

材料表

  1. 電腦/筆記型電腦
  2. Movidius Neural Computer Stick

本篇是接續MovidiusNCS在PC中設定Ubuntu虛擬機並執行NCSDK(上), 在(下)篇中,我們將完成剩下的NCSDK安裝設定,分享如何讓虛擬機也可以跟Raspberry Pi遠端連線、在虛擬機中的Ubuntu作業系統可以使用Movidius NCS來做運算、壓縮並備份虛擬機的作業系統。

在Ubuntu虛擬機中安裝NCSDK

首先請將Ubuntu虛擬機開機,並登入您的使用者帳號,如下圖。

接下來請點選左上角的圖示, 叫出搜尋應用程式的選單, 接下來打上”terminal”來搜尋終端機, 最後點選terminal應用程式打開終端機。

另外補充一下,如果要是使用快捷鍵的方式來打開終端機, 可以按下<Ctrl>+<Alt>+T來開啟。

接下來請在終端機中輸入以下的指令, 來更新系統套件。

sudo apt-get update

接著請輸入以下的指令來升級系統的套件。

sudo apt-get upgrade -y

因為我們需要使用git來下載NCSDK的github原始碼, 所以請輸入以下指令來使用apt套件管理員來安裝git

sudo apt-get install git -y

 

接下來我們將NCSDK的github下載下來

git clone https://github.com/movidius/ncsdk

 

下載完成後, 我們使用cd指令將工作目錄移到nscdk這個資料夾中。

cd ncsdk

緊接著輸入以下的指令, 將NCSDK透過Makefile的設定安裝起來。

make install

 

安裝過程會花上不少時間, 請讀者耐心等候。

等安裝完成後, 程式會自動提示使用者要重新開一個新的終端機才會生效, 如下圖。

請讀者再重新開一個新的終端機, 並輸入以下的指令, 將工作目錄指定到一個hello_ncs_py的範例資料夾。

cd examples/apps/hello_ncs_py/

 

接著請將Movidius NCS 接到電腦的USB孔, 我們將要跑跑看這隻範例程式是否能正確的辨識到NCS, 並且能夠成功使用NCSDK的功能。

make run

如果說回傳的結果是上圖, 顯示NCS device working就代表成功囉!

測試NCSDK的examples

如果前面的NCSDK安裝與NCS裝置都可以正常運作的話, 我們可以來試試看跑其他的範例程式。

請打開終端機, 並切換工作目錄到ncsdk資料夾中, 並執行ncsdk中的examples。

cd ncsdk
make examples

 


執行程式的過程中, NCS會去下載並執行範例中的網路模型, 並實際評測跑出來的結果。

安裝SSH Server

有時候我們可能需要能透過SSH來連線到VirtualBox中的虛擬機, 那們這個時候就需要在Ubuntu作業系統中安裝SSH的server,

請輸入以下的指令來安裝openssh-server

sudo apt-get install openssh-server -y

安裝完成後, 我們必須將SSH的Service設置為啟用

sudo systemctl enable ssh

接下來下次虛擬機重開機的時候就會自動執行SSH Server了。

另外我們也可以透過指令的方式直接啟用SSH Server,

sudo systemctl start ssh

或者是查看SSH Server的狀態。

sudo systemctl status ssh

順帶一提, 如果是想要在Ubuntu作業系統中關機的話, 可以點選右上角的開關鍵, 並選擇Shutdown選項即可。

接下來我們看一下怎麼透過電腦來連到虛擬機中的Ubuntu系統中, 首先我們先下載Google Chrome瀏覽器, 並在瀏覽器中安裝一個 Chrome瀏覽器的插件Secure Shell

安裝完成後, 讀者可以直接在瀏覽器的網址列直接打上”ssh”, 接下來再按下Tab鍵就會自動進入ssh插件模式, 然後就可以打上”Ubuntu使用者名稱@localhost:2222″ 來連線到虛擬機中, 至於為什麼要連線到port 2222呢, 我們在之前的文章”完全不接螢幕鍵盤滑鼠,電腦一開始就用網路線遠端連線Pi” 有提到,在網路設定中有設定了Port Forwarding的緣故。

初次登入的話,一開始會先建立金鑰的認證, 請輸入”yes”來同意認證。

以下是成功登錄的畫面

另外這邊在分享一個進階的技巧, 其實有時候我們並不需要真的進到Ubuntu系統中的桌面環境, 大部分的時候我們只需要能夠登入系統中的shell即可對系統下指令, 讀者可以試著在啟動虛擬機時, 按下右鍵選擇Start→Headless Start, 這樣就可以省去開啟畫面的動作, 對電腦的計算負擔也會比較小喔。

虛擬機的Import/Export

最後,我們辛辛苦苦安裝完虛擬機並安裝了NCSDK函式庫後, 當然會希望可以把這個虛擬機直接存起來成一個VirtualBox的壓縮檔, 如此一來,在新的電腦上也可以使用VirtualBox來讀取這個輸出的壓縮檔, 直接引入安裝就可以使用。

首先點選左上角的File → Export Appliance

選擇要輸出的虛擬機,

接下來選擇檔名及儲存位置,

設定完成後就會開始輸出囉!

輸出完成後, 我們來看看如何引入這個OVA檔, 首先請點選File → Import Appliance

最後確認一下設定有沒有需要調整的, 比如說記憶體大小,USB Controller等, 預設的話會跟原始Export的虛擬機設定一樣。

另外,如果是想要直接使用CAVEDU團隊提供打包好的ova檔的話, 可以從以下的連結來下載,總大小約7GB左右, 裡面已經有完成本文上下兩篇的所有設定, 只要按照這一小節的教學引入即可喔。

 

相關文章:

[AI 人工智慧應用] MovidiusNCS在PC中設定Ubuntu虛擬機並執行NCSDK(上)

作者

袁佑緣

時間

三小時

難度

***

材料表

前言

為了要能夠在電腦上使用Movidius Neural Computation Stick(NCS), 我們必須在個人電腦上準備一些必要的工具, 例如:Ubuntu 16.04作業系統(目前NCS正式支持的系統版號)以及安裝必要的函式庫NCSDK。

由於一般人的電腦的作業系統都不是Ubuntu16.04, 所以我們必須要在電腦上安裝虛擬機來跑一個虛擬的系統。

以下我們將一步一步的帶各位讀者在自己的電腦上完成詳細的虛擬機設定, 如果是想要直接使用我們已經幫您做完的版本, 請直接跳到 “[Movidius NCS] 如何在PC中設定Ubuntu虛擬機並執行NCSDK(下) 的虛擬機的Import/Export 小節“。

懶人包教學影片可以看這裡,想一步一步自己設定請往下繼續看:

懶人包影片軟體連結,想一步一步自己設定請往下繼續看

1、更多Movidius AI運算連結,請下載2、3、4的檔案

2、VirtualBox軟體安裝檔連結

3、VirtualBox 作業系統懶人包安裝檔, Ubuntu for intel Movidius 神經運算棒 作業系統連結

4、VirtualBox USB2.0、USB3.0 Extension Pack.下載連結

安裝VirtualBox與下載Ubuntu作業系統

首先請先到以下的網址下載VirtualBox虛擬機, 並且根據您的作業系統來選擇要下載的安裝檔, 例如:假設讀者的電腦作業系統是Windows的話, 就在VirtualBox 52.6 platform packages, 就點選”Windos hosts”來下載。

接下來我們還必須要去下載VritulBox Extension Pack, 才能讓虛擬機使用USB3.0的功能。

再來請到以下的網站去下載Ubuntu 16.04系統,

新增虛擬機

下載完成後,請打開Virtualbox,並按下New新增一個虛擬機器。

接下來在Name上打上虛擬機的名稱, 並選擇Type為Linux, 選擇Version為Ubuntu (64-bit),如下圖。

接下來指定記憶體的大小,基本上至少要有2GB會比較夠。

接下來選擇建立一個虛擬的硬碟。

選擇硬碟檔案格式為VDI(VritualBox Disk Image)

指定硬碟維dynamically allocated。

最後指定虛擬硬碟的大小,建議10~15GB,或15GB以上。

設定安裝光碟

完成後在VirtualBox左邊的選單應該可以看到剛剛新增的虛擬機, 如下圖中的ubunutu-NCS, 接下來請按下右鍵,並點選Settings。

先選擇擇Storage, 然後在Optical Device點選光碟小圖示, 並選擇剛剛下載的Ubunutu 16.04安裝光碟。

設定USB Controller

接下來我們要來設定USB界面, 為了要讓虛擬機可以辨識到Movidius的NCS, 請先選擇Enable USB Controller, 並勾選USB 3.0 (xHCI) Controller。 如果不能勾選USB3.0的話,有可能是您沒有安裝前面提過的VirtualBox Extension Pack。

接下來在下面的USB Filter新增USB2跟USB3的設定,如下圖。

網路設定

最後,為了要讓使用者可以使用SSH遠端登入虛擬機中, 我們必須設定一個Port Forwarding的設定。

如下圖,將Host的port 2222轉送到Guset的port 22, 也就是說在讀者的電腦上如果用SSH連線到自己localhost的port 2222, 就會連線到虛擬機中的Ubuntu系統中(一般SSH Server預設是port 22)。

安裝Ubuntu系統

以上的設定都完成後, 請點選向右的箭頭(Start), 將虛擬機開機。

進入Ubuntu安裝光碟後, 請選擇右邊的Install Ubuntu。

接下來選擇Erase disk and install Ubuntu。

按下Continue繼續安裝。

選擇時區設定,如下範例中的台北。

在台灣的話,選擇預設的Keyboard Layout即可。

最後設定一下使用者名稱及密碼。

以上設定完成後, 虛擬機會需要花上一點時間安裝全新的Ubuntu作業系統。

當出現以下的圖示時, 就代表已經安裝完成了, 接下來只要按下Restart Now重新開機即可。

一般來說, 安裝完新的系統後,就會需要退出當初使用的安裝光碟, 不過不用擔心,VirtualBox會自動幫你做完, 所以讀者只要直接按下Enter繼續即可。

虛擬機重開之後, 應該就能夠進到新安裝的Ubuntu作業系統, 請輸入您設定的使用者密碼。

成功登入後, 讀者應該就可以看到如下圖的桌面, 代表已經安裝成功囉!

接下來,請讀者繼續到 [Movidius NCS] 如何在PC中設定Ubuntu虛擬機並執行NCSDK(下)完成剩下的NCSDK安裝設定。

 

相關文章:

[Movidius神經運算棒]五步驟打造Intel Movidius NCS影像分類器

(Original post from Intel Movidius NCS blog: “Build an Image Classifier in 5 steps”:https://movidius.github.io/blog/ncs-image-classifier/

 

什麼是影像分類?

影像分類是電腦視覺的重要課題。目標在於把圖像中的某個主題或物體歸類到預先定義的類別中。現實生活中的影像分類問題是把印有各種物體的卡片拿給小孩子看,並讓他們分辨卡片上所印的東西是什麼。傳統的作法是讓機器具備一定的視覺感知能力,這有賴於使用特徵描述器的各種複雜電腦演算法,描述器像是邊緣、角落與顏色等等,來辨識或辨認影像中的一或多個物體。

深度學習採用另一個更有效率的做法來解決現實生活中的影像問題。它運用了多層彼此互聯的神經元,每一層都採用了特定的演算法去辨識或分類某個描述符(descriptor)。舉例來說,如果您想要對交通的[STOP]號誌進行分類的話,要用到深度神經網路 (DNN) 來偵測號誌的邊緣與邊界,第一層則是用來偵測邊角的數量、下一層則是偵測紅色、再下一層偵測紅色周圍的白色邊界,一直反覆執行下去。DNN可以把一個任務分配到執行單一檢算法的多個層,這樣可以處理大量的描述符,讓基於DNN的影像處理應用於現實生活中能更有效率。

作者/攝影  曾吉弘
時間  2小時
成本
難度 * * * * *
材料表
  • Raspberry Pi 3單板電腦
  • Intel Movidius神經計算棒

 

Layer 1: 邊緣偵測(八角形)

Layer 2: 邊緣附近的白色邊界

Layer 3: 紅色本體

Layer 4: “STOP”字樣

注意:上圖僅用於示範DNN如何辨識物體中的不同描述符,並非DNN用於分類STOP標示的正確呈現。

影像分類與物件偵測是不一樣的。分類是假設整張圖中只有一個物體,例如上述的幼童圖卡範例。另一方面,物件偵測可以在同一張圖中處理多個物體,並計算各物體在圖中的位置。

邊做邊學!

您會製作:

從資料夾中讀取單張影像並進行分類。

您會學到:

  • 如何使用預訓練的網路來進行影像分類
  • 如何使用Intel® Movidius™ NCS 的API框架來編寫程式

您會需要:

  • Intel Movidius Neural Compute Stick 神經運算棒 – 購買請按我
  • 32/64位元的桌上型/筆記型電腦,作業系統須為Ubuntu 16.04 (“開發機器”)

如果還沒做的話,請在您的開發機器上安裝完整的NCSDK。請參考Intel Movidius NCS Quick Start Guide上的安裝步驟來完成。

先看結果…

如果想先看看程式輸出結果的話,請用以下使令來取得範例程式 (NC App Zoo) 並執行

mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/movidius/ncappzoo
cd ncappzoo/apps/image-classifier
make run

make run 指令會下載並建置所有的相依檔案,例如預訓練網路、二元graph檔、ilsvrc資料集均值等。只有第一次執行時要先執行make run;後續只要執行 python3 image-classifier.py 就可以了。應該會看到類似以下的訊息:

 ——- predictions ——–
prediction 1 is n02123159 tiger cat
prediction 2 is n02124075 Egyptian cat
prediction 3 is n02113023 Pembroke, Pembroke Welsh corgi
prediction 4 is n02127052 lynx, catamount
prediction 5 is n02971356 carton

開始吧!

感謝NCSDK 完整的API framework,只需要幾行Python就可以完成影像分類器。以下是image-classifier.py 中一些需要調整的使用者參數::

  1. GRAPH_PATH:要進行推論的graph檔路徑
    • 預設值為 ~/workspace/ncappzoo/caffe/GoogLeNet/graph
  2. IMAGE_PATH:想要分類的影像路徑
    • 預設值為 ~/workspace/ncappzoo/data/images/cat.jpg
  3. IMAGE_DIM:所採用神經網路之影像尺寸規格
    • 例如 GoogLeNet 採用 224×224像素,AlexNet則是227×227像素
  4. IMAGE_STDDEV:您選用之神經網路所定義的標準差(scaling value)
    • 例如:GoogLeNet不採用任何比例因子,但InceptionV3的比例因子為128 (stddev = 1/128)
  5. IMAGE_MEAN:均值減法(Mean subtraction)是深度學習領域中常用的資料整理技巧。
    • 對ILSVRC資料集來說,B、G、R的平均值分別為102、117與123

請先由mvnc函式庫匯入mvncapi模組,才能順利使用NCSDK API framework。

import mvnc.mvncapi as mvnc

 

Step 1:開啟enumerated裝置

如同其他USB裝置,當您將NCS接上應用程式處理器 (執行Ubuntu的桌上型/筆記型電腦) 的USB埠,前者會被後者枚舉為一個USB裝置。我們可以呼叫API來檢視各個NCS裝置。

# Look for enumerated Intel Movidius NCS device(s); quit program if none found.
devices = mvnc.EnumerateDevices()
if len( devices ) == 0:
print( 'No devices found' )
quit()

您知道在同一個應用程式中,可以連接多個NCS神經運算棒來提高推論效能嗎?以下語法是運用API 呼叫單一NCS並開啟 (意即準備好操作).

# Get a handle to the first enumerated device and open it
device = mvnc.Device( devices[0] )
device.OpenDevice()

 

Step 2:將graph檔載入NCS

為了簡易起見,我們採用已訓練好的AlexNet model中的某個已編譯的graph檔,這當您在 ncappzoo 資料夾中執行 make 指令實就已經編譯好了。後續會有文章教您如何編譯一個已經訓練過的網路,但現在先來看看如何把graph載入NCS中。

# Read the graph file into a buffer
with open( GRAPH_PATH, mode='rb' ) as f:
blob = f.read()

# Load the graph buffer into the NCS
graph = device.AllocateGraph( blob )

Step 3:載入單一影像至Intel Movidius NCS並進行推論

Intel Movidius NCS是以Intel Movidius視覺處理元件(VPU)為基礎。這個元件對數百萬種監控攝影機、可用手勢控制的無人機、工業級機器視覺設備提供了視覺智能。如同VPU,NCS在系統中扮演的角色好比是個視覺上的共同處理器。以本範例來說,我們採用Ubuntu系統來讀取資料中的影像並 and offload it to the NCS for inference。NCS負責所有的神經網路運算,,這樣就可以節省CPU與記憶體來執行其它應用層的任務。

我們得先對影像進行處理(預處理)才能將影像載入NCS。

  1. 調整或裁切影像,好符合後續預訓練的網路規格。
    • GoogLeNet格式為224×224像素,AlexNet則是227×227像素
  2. 從整體資料集中,減去各個頻道 (Blue, Green and Red) 的均值。
    • 這在深度學習領域中是常見的 center the data 的技巧。
  3. 將影像轉為半精度浮點數 (fp16) 陣列,接著使用LoadTensor函式將影像載入NCS。
    • 搭配skimage函式庫只要一行程式碼就搞定
# Read & resize image [Image size is defined during training]
img = print_img = skimage.io.imread( IMAGES_PATH )
img = skimage.transform.resize( img, IMAGE_DIM, preserve_range=True )

# Convert RGB to BGR [skimage reads image in RGB, but Caffe uses BGR]
img = img[:, :, ::-1]

# Mean subtraction & scaling [A common technique used to center the data]
img = img.astype( numpy.float32 )
img = ( img - IMAGE_MEAN ) * IMAGE_STDDEV

# Load the image as a half-precision floating point array
graph.LoadTensor( img.astype( numpy.float16 ), 'user object' )

 

Step 4:讀取並顯示NCS的推論結果

根據您想要如何將推論結果整合入應用中,您可以選擇blocking or non-blocking 函式呼叫兩者之一來載入上述步驟中的tensor並讀取推論結果。現在我們使用預設的 blocking 呼叫 (無需使用特定的API).

# Get the results from NCS
output, userobj = graph.GetResult()

# Print the results
print('\n------- predictions --------')

labels = numpy.loadtxt( LABELS_FILE_PATH, str, delimiter = '\t' )

order = output.argsort()[::-1][:6]
for i in range( 0, 5 ):
print ('prediction ' + str(i) + ' is ' + labels[order[i]])

# Display the image on which inference was performed
skimage.io.imshow( IMAGES_PATH )
skimage.io.show( )

 

Step 5:卸載graph與關閉裝置

為了避免記憶體洩漏與/或區段錯誤(segmentation fault),請記得關閉任何開啟中的檔案、資源以及 deallocate 使用中的記憶體。

graph.DeallocateGraph()
device.CloseDevice()

恭喜!您的DNN 影像分類器完成了。

 

還可以試試

延伸閱讀

相關文章

 

使用 Intel® Movidius™ Neural Compute Stick搭配Raspberry Pi 3執行MobileNets

(Original post from Intel Movidius NCS blog: “MobileNets on Intel® Movidius™ Neural Compute Stick and Raspberry Pi 3″:https://movidius.github.io/blog/ncs-rpi3-mobilenets/  

作者/攝影  曾吉弘
時間  2小時
成本需要上網下載的費用
難度 * * * * *
材料表

引言

深度學習之於邊緣運算讓世界各地的創新開發者得以建立各種架構與裝置來解決問題,並提出像是內建了Intel Movidius VPU 的 Google Clips Camera 這樣的創新方案。邊緣裝置應該便於攜帶、低功耗但同時又能為深度學習神經網路提供一定彈性的架構。本文將說明如何使用使用 Intel® Movidius™ Neural Compute Stick (神經運算棒) 搭配Raspberry Pi 3 做為深度學習邊緣運算的解決方案。

應用多個現成的分類網路,有許多具備一定擴充性的網路都提供了一定的客製化程度,針對使用者不同的功耗、運算與精確度需求來提供合適的方案。Google MobileNets就是這類網路其中之一,提供兩個可修改的變數讓您自訂網路來解決問題,並可在這類型低功耗裝置上實現高運算效能與高精確度。

 

* 資料來源:https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html

第一個變數為輸入影像的大小。如上圖,複雜度與精確度會隨著輸入大小而改變。Google 已針對不同影像尺寸提供了預先訓練好的ImageNet分類檢查點。

第二個變數則稱為depth multiplier。雖然網路架構維持不變,調整這個depth multiplier 會影響每一層的頻道(channel) 數量,進而影響網路複雜度並精確度與 frame rate。一般來說,網路的 frame rate 愈高,精確度就愈低。

接下來會介紹如何安裝並執行NCSDK、下載NCAppZoo,以及在 Intel Movidius 神經運算棒上執行MobileNet。最後要使用NCAppZoo 來示範benchmarkncs app 的用途,它可收集一或多個接在電腦 (例如 Pi ) 上的Intel Movidius 神經運算棒之執行效能。

 

所需硬體

Raspberry Pi 3、電源與記憶卡 (外殼建議有,但非必須)
  1. Raspberry Pi 3 外殼
  2. Raspberry PI 3 Model B
  3. micro SD記憶卡 (建議16g以上)
  4. 支援 HDMI 接頭螢幕 (或其他規格的轉接線)
  5. 鍵盤滑鼠
  6. Intel Movidius Neural Compute Stick

 

按部就班

Step 1:安裝最新的Raspberry Pi 3 Raspbian OS

樹莓派基金會取得最新的作業系統 Stretch img 檔之後,燒錄開機用的 sd卡。確認Raspberry Pi 開機並連上網路之後,使用以下指令更新系統:

注意:需使用 Raspbian Stretch,上一版 Jessie 確認不支援。

sudo apt-get update

Step 2:將 Intel Movidius神經運算棒插上Raspberry Pi 3 的 USB接頭

Step 3:安裝Intel Movidius Neural Compute SDK (NCSDK):

請用以下指令來下載並安裝NCSDK

git clone https://github.com/movidius/ncsdk
cd ncsdk
make install
cd ..

Step 4:取得NCAppZoo github

git clone https://github.com/movidius/ncappzoo
cd ncappzoo

Step 5:執行benchmarkncs.py來收集MobileNets執行效能

cd apps/benchmarkncs
./mobilenets_benchmark.sh | grep FPS

結果

在這些選項中,您一定可以根據自身的精確度與效能需求找到最適合的網路。下圖 (來源:Google’s blog) 可看出使用ImageNet分類時,精確度與效能的消長關係。圖中也可看到 Intel Movidius神經運算棒的效能(單位FPS,數據未經Intel原廠確認)。

* Network Accuracy Data from Google’s Blog https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html

如上圖,Raspberry Pi 3 搭配 Intel Movidius神經運算棒(橘色線)與單單使用Raspberry Pi 3 相比,前者執行 MobileNets 的FPS速度為後者的9倍 (參數皆為DepthMultiplier=1.0 / 輸入影像大小 = 224×224 / Top5 accuracy of 89.5%)。

Raspberry Pi 是一個相當不錯的開發平台。雖然單單使用Raspberry Pi 3 在推論上已能達到相當不錯的frame rate,NCS 卻硬是把效能提升一個量級,並讓這個平台在執行CNN-based的神經網路時的效能更好。如上表,Intel Movidius神經運算棒搭配Raspberry Pi 3 來使用 MobileNets進行推論運算的效能成長了 718% 到 1254%。