利用Google Edge TPU打造Teachable Machine

 

本文譯自樹莓派雜誌79期(MagPi issue 79),原文標題為Build a Teachable Machine with Coral's USB Accelerator(插圖來源取自雜誌內頁)。本篇與原文同樣使用CC 3.0 BY-NC-SA授權,歡迎標註原作者轉載,若有任何不妥與指教敬請告知。

新的Coral USB Accelerator能在任何樹莓派專案中增加AI的功能 ,它是一種能夠有效提昇裝置上神經網路效能的特殊應用積體電路( Application Specific Integrated Circuit, ASIC),且基於Google Edge TPU ( Tensor Processing Unit,張量處理器)的硬體所設計,只需要一塊樹莓派和相機模組就能執行複雜的電腦視覺運算,例如物件辨識。

Coral USB Accelerator在本地端就能運作,不需要連接到雲端服務或透過網路共享資料,比起雲端連接,它執行的延遲時間更短,可以即時的進行物件偵測。

USB AcceleratorCoral AI相關產品線中的一部分

使用樹莓派專用的相機模組就能讓樹莓派所有系列的開發版擁有攝影功能,或是搭配內建的I/O腳位設計電路原型,甚至是將樹莓派整合到專案和工業環境中,將樹莓派、相機模組與USB Accelerator結合,就是一個可以執行各種任務的強大AI裝置。

在這次的教學中,我們要製作一個Teachable Machine,此專案是由GoogleMike Tyka所設計。

Teachable Machine會學習辨識在鏡頭前的物體,這些物體可以是任意的東西,像是鑰匙、水果、棋子,甚至是手指或臉部。使用者只需將物體放在相機前並按下Teachable Machine上的按鈕,它就會記住剛才的物體,如果相同的物體再次出現,就會點亮相應的LED

Teachable Machine是一個很棒的例子,說明如何在專案上增加一層機器學習的技術,而不需要從頭訓練整個網路,並且能夠快速且有效率的辨別不同方向的物體。

在幾年前,即使是擁有強大運算能力及配備昂貴繪圖顯示卡的電腦,也無法實現這類型的專案。然而,現在我們卻能夠在像樹莓派這樣的單板電腦上實現了!

材料清單:
  • 樹莓派3B / 3B+
  • Coral USB Accelerator
  • 樹莓派專用的相機模組
  • 8GBMicroSD記憶卡
  • Raspbian Stretch with Desktop 版本的映像檔(或更新的版本)
  • 麵包板
  • 按鈕開關x5
  • 杜邦線(公對母) x10
  • 較短的杜邦線(公對公)或單芯線
  • 330Ω的電阻 x4
  • LED x4

 

01 Raspbian開始

首先,將最新的Raspbian系統燒錄到MicroSD(快速安裝指南:magpi.cc/quickstart),使用15pin的軟排線連接相機模組與樹莓派的相機插座,插入記憶卡,打開電源以啟動樹莓派。

 

02 設定相機

Raspbian系統啟動時,點擊左上角的樹莓派圖示,然後選擇偏好>樹莓派設定,點選「界面」並將相機設為啟用,按下OK儲存。系統將會出現「需要重新啟動」的警告視窗,點擊「是」。

重新開機完成後,開啟終端機(Terminal)視窗進行開啟檔案的小測試:

raspistill -v -o test.jpg

xdg-open /home/pi/test.jpg

 

03 設定USB Accelerator

進行此步驟時,請不要連接USB Accelerator到裝置上,如果剛才已經連接了,請先移除它。

開啟Terminal輸入指令以下載和安裝軟體:

wget http://storage.googleapis.com/cloudiot-edge-pretrained-models/edgetpu_api. tar.gz

tar xzf edgetpu_api.tar.gz

cd python-tflite-source

bash ./install.sh

在安裝期間會顯示「Would you like to enable the maximum operating frequency? (你想啟用最大工作頻率嗎?),先回答N,如果想提昇性能,可以稍後再啟用。

04 測試USB Accelerator

現在,連接USB Accelerator與樹莓派,我們已經完成了Accelerator的設定。

想瞭解更多設定和測試的資訊請參閱Coral的文件:http://g.co/coral/setup

注意!USB Accelerator在使用過程中會產生高溫,請避免在使用期間碰觸

05 下載模型

接著來看範例程式碼,將classify_capture.pyPython腳本搭配樹莓派的相機模組使用,可以對周圍的物件進行即時圖片分類,我們需要一個訓練好的模型來偵測一些常見的物體,下載已經訓練好可以辨別1000個物體的MobileNet模型:

wget -P test_data/ https://storage.googleapis.com/cloud-iot-edge-pretrainedmodels/canned_models/mobilenet_v2_1.0_224_ quant_edgetpu.tflite

取得物體對應的標籤:

wget -P test_data/ http://storage. googleapis.com/cloud-iot-edge-pretrainedmodels/canned_models/imagenet_labels.txt

這個模型(還有許多其他模型)和標籤可以在Coral的網站被找到(http://coral.withgoogle.com/)

重要提示

Teachable Machine的技術細節:遷移學習(Transfer Learning)

Teachable Machine使用了一種叫做「遷移學習」的技術,讓Maker們可以直接使用已經訓練好的模型,根據任務自行調整需求。

Teachable Machine 使用了無頭MobileNet模型(headless MobileNet model),最後一層(1000training classes中做出最終決定的Layer)已經被移除,使前一個layer的輸出向量能夠被拿來運用,Teachable Machine會將此向量視為圖片的嵌入式向量(embedding vector)。

更多遷移學習的資訊和細節可以參閱http://magpi.cc/LeKzkc

06 即時相機偵測

現在我們已經有預先訓練好的MobileNet模型還有其對應的標籤,以及能夠即時捕捉影像的腳本,將這三樣擺在一起,就能實現相機偵測物體的功能。

python3 demo/classify_capture.py --model test_data/mobilenet_v2_1.0_224_quant_ edgetpu.tflite --label test_data/imagenet_ labels.txt

移動樹莓派的相機模組環繞房間周圍,預覽視窗將會辨識周圍的物體,如筆記型電腦、滑鼠、汽水罐…等。

classify_capture.py程式使用了兩個選項:

--model

--label

每個模型的連結都對應到步驟5中下載的標籤。

這是一個TensorFlow Lite的模型(因為.tflite副檔名),它已經預先訓練好並能夠偵測1000個物體。一般來說,模型訓練會使用數以千計的訓練及測試圖片作為樣本,在雲端或更快的電腦上進行訓練,在訓練期間,模型匹配圖片和標籤的準確率會越來越高,當準確率達到一定程度時我們才會在樹莓派上使用它。

 重要提示:拿到更多模型

GoogleCoral的網站上提供了一系列模型:http://magpi.cc/OmyrGC

 

07 Teachable Machine

我們要做的Teachable Machine專案,就像classify_capture.py所展示的一樣(參考步驟6),它使用樹莓派的相機模組掃描物體,但Teachable Machine能夠學習偵測鏡頭前的物體。

首先安裝一些必要的套件:

sudo apt-get install libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0- plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0- plugins-ugly python3-gst-1.0 python3-gi

 新增文字bcm2835-v4l2/etc/modules的最後面:

sudo cat bcm2835-v4l2 >> /etc/modules

 

08 設置Teachable Machine

Terminal的指令關閉樹莓派(或者按下選單>關機,按下關機)

sudo shutdown -h now

移除樹莓派的電源並在麵包板插上開關以及LED,如圖()所示。

圖(一)把要學習的物體放在相機面前,偵測到物體時相應的LED將被點亮。

按下其中一個按鈕,Teachable Machine會記錄相機偵測到的物品並點亮一顆LED

擺放相機最好的方式是將其平放在桌面上,使鏡頭朝上。

電路設置完畢後重新連接電源。

 

09 安裝程式碼

打開Chromium瀏覽器,訪問專案的Github頁面(http://www.magpi.cc/github79),下載teachable_rpi3.tgz檔案到 /home目錄底下。

開啟Terminal視窗,解壓縮檔案:

tar xvzf teachable_rpi3.tgz

cd /home/pi/teachable/

執行Teachable Machine所需的程式碼都可以在此目錄中找到並且執行,embedding.py的程式碼展示了最關鍵的部分。

輸入這段指令測試電路:

sudo python3 teachable.py –testui

如果LED在閃爍,就表示電路正在運作。按下麵包版上的按鈕,Terminal會顯示被按下的按鈕(04之間的數值)

按下CTRL+C以中斷執行中的程式

重要提示:雷射切割

如果你需要一個穩定的平台放置元件,請參閱我們Github上的文件rpi3plate.dxf (magpi.cc/github)

 

10 執行Teachable Machine

現在執行Teachable Machine,看看它能做什麼。

輸入 sh run.sh

Teachable Machine將會進行初始化,並且開始執行。USB Accelerator上的LED會被點亮,Terminal上也會顯示目前相機的幀數(通常是30fps)

在相機前面放置物品(例如水果或滑鼠),然後按下與LED配對的按鈕(LED將在按鈕旁邊亮起),接著放開按鈕,移開物品。

現在,當你把物品放回鏡頭前的時候,對應的LED燈會亮起,繼續將不同的物品放在鏡頭前,並按下不同的按鈕訓練機器的分類能力,將其中一個按鈕設定為偵測背景可以提高辨識率。

如果Teachable Machine的辨識不夠準確,你可以多按幾次按鈕重新訓練,每按一次都稍微旋轉物品被拍攝的角度,如果要清除所有記憶體中的資料可以按下第五個按鈕。

 

最後,祝大家玩的開心!