高通台灣AI黑客松|競賽說明會
|

【OpenVINO™教學】透過Tensorflow機器學習在RaspberryPi小車上辨識號誌

   

作者:CAVEDU 教育團隊

本篇文章將透過 OpenVINO™,將 TensorFlow 訓練好的模型執行於 Intel Movidius NCS 2 上,提高樹莓派車視覺辨識的推論速度;本次範例使用的硬體裝置有:

  1. Logitech C170 Webcam
  2. Intel Movidius 2
  3. RK—自走車套件
  4. RaspberryPi 3 Plus
  5. 16 G SD 卡

在樹莓派安裝 OpenVINO™

1. 準備樹莓派,並灌好 Raspbian 作業系統

您可以到樹莓派官網下載最新的映像檔,燒錄到 SD 卡中來開機;如果您使用的是「RK–樹莓派神經網路自走車套件」,那就可以直接開啟終端機下載套件包。

2. 樹莓派開機,接上網路,打開終端機(Terminal)

樹莓派可以接上螢幕、鍵盤、滑鼠,也可以使用遠端桌面連線開啟終端機。

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

4. 解壓縮套件包

tar -xvf l_openvino_toolkit_ie_p_2018.5.445.tgz

(圖片來源:CAVEDU 提供)

解壓縮完成後,您會看到有一個叫做「inference_engine_vpu_arm」的資料夾出現在加目錄當中。

(圖片來源:CAVEDU 提供)

5. 執行以下指令

修改 setupvars.sh 中的參數,待會設定環境參數時會用到。

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

6. 設定環境參數

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

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

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

bash

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

(圖片來源:CAVEDU 提供)

7. 設定 USB Rules

為了使樹莓派能夠認得 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 而已,只能做辨識。

在樹莓派上執行OpenVINO™ — 方向牌辨識

1. 在樹莓派下載 Movidius 2 執行程式

請到 CAVEDU 的 Github 下載路牌分類的程式碼,或是在樹莓派上使用 git 指令下載。

git clone https://github.com/cavedunissin/raspberrypi3_openvino

本範例使用 TensorFlow 訓練模型,下圖為 dataset 的編排結構,如日後要使用同一個模型自行訓練資料,資料目錄請依照下面方式編排;訓練用的圖片分類為 left、right、stop 目錄,非上述三類則放置在 other 目錄,測試資料置於 test 目錄。

(圖片來源:CAVEDU 提供)

2. 將樹莓派接上攝影機、Movidius 2

下圖是 RK–樹莓派神經網路的自走車套件,大家可以趁這個時候,為樹莓派接上馬達、馬達驅動板,並為馬達接上額外供電。

(圖片來源:CAVEDU 提供)

3. 使用預錄好的影片來測試訓練過的模型

在 openvino_model\tensorflow_model 目錄中有 TensorFlow 訓練過的結果,必須將該結果透過 OpenVINO™ 轉換為可支援 Movidius 2 的檔案,可以先使用 \openvino_model\movidius2_model 目錄中轉換完成的檔案。

移到指定資料夾。

cd ~/ RaspberryPi3_Openvino/ openvino_code

執行程式(無輸出影像畫面,執行速度較快)。

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

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

(圖片來源:CAVEDU 提供)

如果想要看到實際畫面,可以在指令的尾端加上–gui;執行程式如下(有輸出影像畫面,執行速度較慢)。

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

(圖片來源:CAVEDU 提供)

相關常見問題

  • 可以用本範例來辨識攝影機的影像嗎?

可以,一樣使用上面的指令,但是就不指定為使用影片檔。

python3 ./movidius_video.py 
--model-file ../openvino_model/mo2_model/saved_model.xml 
--weights-file ../openvino_model/mo2_model/saved_model.bin --gui
  • 如果我有一台自走車,上面有馬達跟攝影機,該怎麼跑這個範例讓機器人動起來?

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

python3 ./movidius_car.py --model-file ../ 
openvino_model/mo2_model/saved_model.xml --weights-file ../ 
openvino_model/mo2_model/saved_model.bin
  • 如果我有自己的資料然後想要自己訓練模型呢?

這個問題比較複雜,首先樹莓派本身並沒有足夠的算力可以做深度學習的訓練, 所以我們會建議找一台電腦來做訓練這件事; 關於訓練模型,首先我們必須在電腦上安裝好 python 及 tensorflow 的環境, 才能執行以下的指令來做訓練。

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

其中,model-base-dir 代表訓練完的模型要放在哪裡;data-dir 則代表訓練用資料集的位置。

因為我們在樹莓派上安裝的 OpenVINO™ 只有 Inference Engine,只能做辨識,因此為了能夠將訓練完的模型編譯成 NCS 看得懂的格式,我們必須在電腦上安裝完整版的 OpenVINO™ Toolkit;詳細的安裝說明,請參考 Intel 官方的安裝教學:WindowsLinux;中文版安裝教學:Windows

路徑中的 XXXXXXXXXX 請依據實際路徑填寫(全部都是數字)。指令完成會輸出「mo2_model」目錄

mo_tf.py --saved_model_dir tf_model/XXXXXXXXXX \
         --output_dir mo2_model \
         --input_shape "[1,48,48,3]" \
         --input input_image \
         --output probabilities \
         --data_type FP16
  • 請問第一代 Movidius 是否支援 OpenVINO™?

OpenVINO™ 目前不支援第一代 Movidius,如果手上只有第一代的 Movidius,可以參考書籍《實戰 AI 資料導向式學習|Raspberry Pi╳深度學習╳視覺辨識》。

(本文同步發表於 CAVEDU 教育團隊原文連結;責任編輯:賴佩萱)

 

CAVEDU 教育團隊

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: CAVEDU 教育團隊

CAVEDU 教育團隊是由一群對教育充滿熱情的大孩子所組成的機器人科學教育團隊。致力推動國內機器人教育。

Share This Post On
468 ad

4 Comments

  1. 請問照著以上步驟以及對應檔案,結果卻出現No module named ‘cv2’,請問是還缺甚麼步驟? 謝謝

    Post a Reply
    • 已抓出問題了,樹莓派3上需要系統必須為舊版Raspbian(stretch,2019-04-08之前),最新版(buster)會有各式各樣的問題發生,謝謝

      Post a Reply
      • 原來如此,謝謝提供Debug資訊~

        Post a Reply
  2. 請問OpenVINO™可以在樹梅派搭配google神經運算棒跑嗎

    Post a Reply

發佈回覆給「Liu」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *