使用Intel® Movidius™神經運算棒 2 & OpenVINO-在樹莓派上跑自駕車

作者袁佑緣、林祥瑞
時間二十分鐘
難度***
材料表電腦/筆記型電腦/
RK-樹莓派神經網路自走車套件
Intel® Movidius™神經運算棒 2


在本篇文章中,我們將使用第二代的NCS, 並搭配全新的函式庫OpenVINO來實做。

CAVEDU團隊之前曾經使用樹莓派結合NCS來實作自駕車,課程推出後受到大家的熱烈迴響,感謝大家的熱情參與, 我們之前上課所使用的NCS為一代的版本
下圖是我們是我們在微軟的課程畫面

機器人第一視角影片(https://www.youtube.com/watch?v=-VaDUODWxHA)h

安裝 OpenVINO

  1. 準備樹莓派,並灌好Raspbian作業系統。 您可以在去樹莓派的官網下載最新的映像檔(https://www.raspberrypi.org/downloads/raspbian/) 下載完的映像檔,可以用Etcher(https://www.balena.io/etcher/) 來燒錄到SD卡中來開機。如果您使用的是”RK-樹莓派神經網路自走車套件”,可以直接開啟終端機下載套件包。
  2. 樹莓派開機,接上網路,打開終端機
  3. 數入以下指令下載OpenVINO套件包 請注意,隨著版本更新,套件包的版號也會變,本範例所使用的版本為”2018.5.445″。
cd $HOME
wget https://download.01.org/openvinotoolkit/2018_R5/packages/l_openvino_toolkit_ie_p_2018.5.445.tgz
  • Step4:解壓縮套件包
 tar -xvf l_openvino_toolkit_ie_p_2018.5.445.tgz

解壓縮完成後,您將會看到有一個資料夾”inference_engine_vpu_arm”出現在加目錄當中

 ls -l

Step5:接下來請執行以下的指令來修改setupvars.sh中的參數,待會設定環境參數實會用到。

sed -i "s|<INSTALLDIR>|$(pwd)/inference_engine_vpu_arm|" inference_engine_vpu_arm/bin/setupvars.sh

Step6: 環境參數設定
輸入以下的指令來啟動自動設定OpenVINO的環境參數。

 echo "source $HOME/inference_engine_vpu_arm/bin/setupvars.sh" >> $HOME/.bashrc

第一次設定完,請重新登入一次shell或者是重新打開終端機才會生效。

 bash

成功啟動環境的話,您將會看到”[setupvars.sh] OpenVINO environment initialized”的字樣。

Step7:為了使樹莓派能夠認得NCS,必須再額外設定USB Rules
將現在的使用者加入users的群組

 sudo usermod -a -G users "$(whoami)"

加入完成後,並須登出後再重新登入。

 logout

安裝udev rules

./inference_engine_vpu_arm/install_dependencies/install_NCS_udev_rules.sh

當終端機出現 “[setupvars.sh] OpenVINO environment initialized”時,表示您已經在樹莓派上成功安裝OpenVINO了,此版本的OpenVINO只有Inference Engine而已,只能做辨識。 為了要能夠將訓練完的模型編譯成NCS看得懂的格式,我們必須在電腦上安裝完整版的OpenVINO Toolkit,相關資料補充於本文章的附註中。

搭配RK -樹莓派神經網路自走車套件

如果您有"RK-樹莓派神經網路自走車套件 (機器人王國-聯絡我們)"可以搭配範例(ai-car-openvino.zip)使用以下指令啟動。

請先將 RK-樹莓派神經網路自走車套件 提供的檔案下載至樹莓派,並解壓縮檔案

unzip  ai-car-openvino.zip

將樹莓派接上Movidius2(產品連結),接下來我們將使用預錄好的影片來測試訓練過的模型。

cd ~/ai-car-openvino/tf_openvino_source
python3 ./movidius_video.py --model-file ../tf_openvino_model/mo2_model/saved_model.xml --weights-file ../tf_openvino_model/mo2_model/saved_model.bin --video-type file --source ../sample_video/example_1.mp4

小提醒:按下ctrl+c可以停掉程式。

以下是跑出來的測試結果,辨識一幀圖片大概需要花0.014秒左右

如果讀者想要看到實際的畫面的話,可以在指令的尾端加上–gui。

python3 ./movidius_video.py --model-file ../tf_openvino_model/mo2_model/saved_model.xml --weights-file ../tf_openvino_model/mo2_model/saved_model.bin --video-type file --source ../sample_video/example_1.mp4 --gui

同樣的範例,我們也可以用來跑在NCS一代上面,跑出來的結果如下

可以看到在表現上輸了NCS二代一些,處理單張影像的時間來到了0.026秒左右,差不多是快兩倍的時間呢!

附註

Q1:可以用本範例來辨識攝影機的影像嗎?
A1:可以的,一樣使用上面的指令,但是就不指定為使用影片檔。

python3 ./movidius_video.py --model-file ../tf_openvino_model/mo2_model/saved_model.xml --weights-file ../tf_openvino_model/mo2_model/saved_model.bin --gui

Q2: 那如果我有一台自走車,上面有馬達跟攝影機,該怎麼跑這個範例讓機器人動起來?
A2:以我們之前上課的機器人套件為例

可以執行以下的指令來讓機器人根據攝影機的影像來判斷交通號誌,並且控制馬達做出對應的動作,例如轉彎、前進、停止等。

python3 ./movidius_car.py --model-file ../tf_openvino_model/mo2_model/saved_model.xml --weights-file ../tf_openvino_model/mo2_model/saved_model.bin

Q3:那如果我有自己的資料然後想要自己訓練模型呢?

A3:這個問題比較複雜,首先樹莓派本身並沒有足夠的算力可以做深度學習的訓練, 所以我們會建議找一台電腦來做訓練這件事情。
關於訓練模型,首先我們必須在電腦上先安裝好python及tensorflow的環境, 然後執行以下的指令來做訓練。
其中,model-base-dir代表訓練完的模型要放在哪裡,data-dir則代表訓練用的資料集的位置。

python3 ./train_tensorflow_model.py --model-base-dir tf_model --data-dir $HOME/dataset

因為我們在樹莓派上面安裝的OpenVINO只有Inference Engine而已,只能做辨識而已。 為了要能夠將訓練完的模型編譯成NCS看得懂的格式,我們必須在電腦上安裝完整版的OpenVINO Toolkit。

詳細的安裝說明,請參考Intel官方的安裝教學:

Windows(https://software.intel.com/en-us/articles/OpenVINO-Install-Windows)

Linux(https://software.intel.com/en-us/articles/OpenVINO-Install-Linux)

安裝完後,請輸入以下的指令來編譯模型

```bash
source /opt/intel/computer_vision_sdk/bin/setupvars.sh
mo_tf.py <span class="hljs-comment">--saved_model_dir tf_model/XXXXXXXXXX \</span>
         <span class="hljs-comment">--output_dir mo2_model \</span>
         <span class="hljs-comment">--input_shape "[1,48,48,3]" \</span>
         <span class="hljs-comment">--input input_image \</span>
         <span class="hljs-comment">--output probabilities \</span>
         <span class="hljs-comment">--data_type FP16</span>
```

其中的XXXXXXXXXX 請依據實際路徑填寫(全部都是數字),編譯完的模型時會輸出到mo2_model資料夾中。

相關文章