2018年10月20日 星期六

如何移植Movidius神經計算棒到Pi Zero W

最近人工智慧(AI)當道,對於想學習及實作的Maker來說,樹莓派加上Intel Movidius神經計算棒(Neural Compute Stick,以下簡稱NCS)大概是最容易取得且最經濟的平台了。目前除了可直買到USB3.0版的NCS外,另外Google有提供AIY Vision Kit(Pi Zero W + Vision Bonnet),主要使用Pi Zero W及使用了和NCS相同計算晶片Intel Movidius MA2450的Vision Bonnet擴充板,舊的版本還得自己安裝一堆環境,新的1.1版買來組裝一下就可用了。加上最近Intel最近大力推廣它的OpenVINO,讓自家的CPU, GPU, FPGA, VPU(NCS主要晶片)能更容易跨平台,更適合開發AI終端(邊緣)應用裝置及程式。

Pi Zero W + Movidius Neural Compute Stick



一般在官網上的安裝程序都是建議使用樹莓派3B或3B+,其步驟很簡單。

步驟一:取得樹莓派板子及16GB SD卡(強烈建議大於8GB)並安裝好官方提供的作業系統Raspbian

步驟二:進入樹莓派命令列模式安裝NCS軟體開發工具(SDK)1.2版,其步驟如下:

mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/movidius/ncsdk.git
cd ncsdk
make install

步驟三:編譯範例程式及測試,其指令如下:

cd ~/workspace/ncsdk
make examples

完成後即可執行相關範例程式,更多說明可參考官方文件。

Movidius NCSDK Github https://github.com/movidius/ncsdk
Movidius NCSDK Introduction https://movidius.github.io/ncsdk/


本來想把NSC直接搬到Pi Zero W上用,就像Google AIY Vision Kite一樣,結果照著上面步驟作,竟然出現一大堆問題,為了避免大家也掉到這個大坑,所以把自己慘痛的經驗分享出來,省去大家撞牆的時間,接著就一步一步帶著大家走出地雷區。

[1] 安裝作業系統後,修改GPU共享記憶體,從64MB增加到128MB。

Pi GPU共享記憶體修改方式 (點擊圖片放大)


[2] 進入命令列執行下列動作,將記憶體SWAP容量從100MB擴大到1024MB,以免後續編譯OpenCV及其它套件時記憶體不足造成系統當掉。

sudo nano /etc/dphys-swapfile

將 CONF_SWAPSIZE=100 改成 CONF_SWAPSIZE=1024

按[Ctrl + O]存檔後,再按[Ctrl + X]離開編輯模式。

[3] 若要使用Pi專用相機,要修改開機啟動設定。(若不使用則可忽略此步驟)

sudo nano /etc/modules-load.d/modules.conf

移到檔案最下面,新增一行,加入 bcm2835-v4l2 (注意是L不是數字1)

按[Ctrl + O]存檔後,再按[Ctrl + X]離開編輯模式。

[4] 更新系統套件並重新開機

sudo apt-get update
sudo apt-get upgrade
sudo reboot

[5] 進入樹莓派命令列模式安裝NCS軟體開發工具(SDK)1.2版,其步驟如下:

mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/movidius/ncsdk.git
cd ncsdk
make install

由於有很多套件包需要編譯,所以可能要四到五個小時。編譯到快結束時會出現下面錯誤。

"cp: cannot stat '/opt/movidius/NCSDK/ncsdk-armv6l/tk': No such file or directory Installation failed. Error on line 554"

這是因為NSC安裝程式預設是給Pi 3 Arm v7系列用,而Pi 0是Arm v6系列,所以要另要產生一個對應的路徑才能繼續工作。另外還要把一些設定檔複製到該路徑下才能接著正確編譯其它程式。

cp -r /opt/movidius/NCSDK/ncsdk-armv7l /opt/movidius/NCSDK/ncsdk-armv6l
cp -r ~/workspace/ncsdk/api/src /opt/movidius/NCSDK/ncsdk-armv6l

接著要把剩下的安裝工作完成,此時不要再執行 make install,而直接把剩下動作執行完即可,如下指令所示:

./install-ncsdk.sh

[6] 再來就可開始編譯範例程式,其指令如下:

cd ~/workspace/ncsdk
make examples

這個步驟中有包含重新編譯OpenCV 3.3版,所以要十幾個小時,建議準備一個小風扇幫忙散熱一下,以免做到一半熱當,前功盡棄。OpenCV編譯完後會自動開始編譯範例程式,但執行沒多久就會發生以下錯誤。

RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
Makefile:80: recipe for target 'compile' failed make[4]: *** [compile] Error 1

在網上有些網友說是因為$PYTHONPATH沒有exprot /opt/movidius/NCSDK/ncsdk-armv6l/api/src/mvnc造成,但加入測試後仍沒有作用。費盡千辛萬苦後終於找到原因,是因為Python numpy版本不合造成,原先安裝的是1.13.1版,而movidius的範例支援的是較新版本,所以只要將numpy缷載後再重裝(目前版本為v1.15.2)並重新開機後再重新編譯範例即可。

pip3 uninstall numpy
pip3 install numpy
sudo reboot

cd ~/workspace/ncsdk
make examples

[7] 苦難還沒結束,編譯到inception-v3的時候會出現下列錯誤。

File "./inception-v3.py", line 4, in <module> import tensorflow as tf Import
Error: No module named 'tensorflow'
Makefile:41: recipe for target 'weights' failed

因為TensorFlow的套件包不合,所以要重新安裝,執行下面指令,再重新編譯範例即可。

pip3 install tensorflow==1.9.0
make examples

[8] 經過幾小時的等待完成所有(apps, cafee, tensorflow)範例的編譯後,最後進到/examples/下各個範例,執行 make run 就能開始享受人工智慧的學習旅程了。

沒有留言:

張貼留言

【頂置】簡報、源碼、系列文快速連結區

常有人反應用手機瀏覽本部落格時常要捲很多頁才能找到系列發文、開源專案、課程及活動簡報,為了方便大家快速查詢,特整理連結如下,敬請參考! Edge AI Taiwan 邊緣智能交流區 全像顯示與互動交流區 台科大(NTUST) 人工智慧與邊緣運算實務 開南大學...