使用 Edge Impulse 快速建置 Jetson Orin Nano 可用的物件偵測模型

前言

在物聯網(IoT)和智慧型裝置的世界中,邊緣運算已是熱門話題。本文將介紹 Edge Impulse 所推出的 FOMO 物件偵測技術,如何實作一個FOMO物件偵測管線並在 Jetson Nano / Jetson Orin Nano 這類 “資源受限” 的裝置上來實現。邊緣AI技術正在改變我們的生活,FOMO 這類創新的機器視覺技術則為資源受限裝置帶來了顯著的性能提升,為智慧型裝置帶來更高的靈活性和實用性,解放了更多可能性與應用場景。

NVIDIA Jetson 平台已有包含 Jetson Inference 等諸多方式來執行各種機器視覺任務,如果是最簡易的影像分類的話,使用 Google Teachable MachineMicrosoft LOBE.ai 也是很不錯的方案。請點選連結看相關介紹。

如果您想要知道如何使用 Edge Impulse 來處理光感測器、加速度感測器這類時序資料的話,請參考 CAVEDU 的 tinyML 相關文章喔!

註:本文使用 chatGPT (GPT-4) 來分析 Edge Impulse 與CAVEDU相關文章來生成初稿,再由作者潤飾過發表。在本身也理解領域知識的前提下,節省了 2/3 以上的時間!

本文

Jetson Nano 與 Jetson Orin Nano

請根據本頁來在 Jetson Nano / Jetson Orin Nano 上安裝 edge-impulse-linux,一鍵安裝很方便

安裝指令如下:

wget -q -O - https://cdn.edgeimpulse.com/firmware/linux/jetson.sh | bash

安裝完成之後,請於 Jetson 終端機輸入以下指令,輸入Edge Impulse 帳號密碼之後 (如果第一次操作,請先到 Edge Impulse 建立一個免費帳號),連到預先建立的指定專案。

edge-impulse-linux

Edge Impulse FOMO

物件偵測是 AI / 機器視覺的重要應用之一,自駕車、機器人、無人機、監控等多個領域都已大量使用。然而,傳統的物件偵測方法通常需要強大的硬體來支援所需的運算量,這在算力資源受限的邊緣設備上實現是有困難的。

這個問題可由軟硬體兩方面來解決。硬體面來說,例如您可以期待每年相同價格可取得的新智慧型手機一定會比去年來得更大也更快,代表單位價格所取得的運算能力不斷增加。另一方面,也可以透過新的演算法來做到更準確更輕巧的應用。

Edge Impulse通過提供一個名為 FOMO(Fast Object detection on Mobile and constrained devices)的物件偵測框架來滿足了這一需求。FOMO是一個專為資源受限裝置所設計的輕量級物件偵測框架,具有高效和即時等兩大特點。以下是FOMO的一些重要特性:

  • 更輕量:FOMO的模型較傳統物件偵測模型更小,因此可以在低功耗和低運算能力的裝置上運行。
  • 更即時:FOMO在資源受限裝置上運行時可更快,保證應用場景的即時性。
  • 更易用:通過Edge Impulse Studio,開發者可以輕鬆設計和部署FOMO物件偵測模型。

在Edge Impulse Studio 中建立 FOMO 物件偵測專案

根據 Edge Impulse 原廠文件說明整理以下關於  FOMO 的特點,您可藉此理解這套方法為何可以做到更快。

Edge Impulse 所開發的 FOMO (Faster objects, More objects) 機器學習演算法,可以在資源有限的邊緣裝置上做到更快的物件偵測效果。與MobileNet SSD或YOLOv5相比,FOMO 能夠做到最多30倍、更少的運算量與記憶體來實現物體計數、物體位置識別和即時多物體追踪。FOMO 運用了卷積神經網路結構,並將標準圖像分類模型的最後幾層替換為每個區域的類別機率映射,以在最後一層完全保留局部性(locality),藉此提供了物體位置的熱圖(heat map),並其轉換為用於計數目的的邊界框或物體重心。

heat map

FOMO是完全卷積的,可以分析不同大小的圖像 (可在 Edge Impulse 中自由調整) ,使其就算在處理非常大尺寸的影像時也能保有彈性與實用性。FOMO 相容於 MobileNetV2 模型,還能進行遷移學習。

可用的物件偵測模型

FOMO對已標註資料中的物體與背景的比例相當敏感,但這可在神經網路設定的專家模式(expert mode)來修改訪問附加配置以進行調整,如下圖的 object_weight=100。如果您的情境中所要偵測的物體相對更少的話,可以本數值調高。

切換到 expert mode 來修改 FOMO 模型參數


只要訓練完的模型可放在裝置中(記憶體夠大),FOMO 幾乎可執行在所有的裝置上,相容性相當好。實際的FOMO的性能取決於目標裝置的速度和可用記憶體,Edge Impulse 建議記憶體至少要 512 KB 以上。

使用 FOMO 完成物件偵測管線

請根據以下步驟來完成 FOMO 物件偵測管線:

1. 登錄 Edge Impulse Studio,或註冊免費帳號。

2. 建立一個新專案:點擊 [Create New Project],為您的專案取一個名稱,例如下圖的 object_detetion。Edge Impulse 提供了很多入門教學文件,跟著做就可以完成各種不同的專案,很方便!

專案歡迎畫面

3. 收集資料:在左側選單中,點選 [Data acquisition]。您可在此收集專案所需的各種型態的資料。由於本文是物件偵測教學,因此會電腦外接 usb webcam 來收集影像。或者也可以上傳現有的資料集並手動標註影像。

點選上圖的 [Collect new data] 圖示,會跳出以下頁面,由左至右邊分別是用智慧型手機、電腦與開發板來上傳資料。在此使用 [Connect to your computer],同意相關權限之後就會使用電腦上的 webcam 來拍照,在此使用外接的 USB webcam 來拍照,並非筆電的內建攝影機。

收集資料,有三種作法

擺好姿勢之後,按下 [Capture] 就會拍照。

使用電腦上傳影像資料

拍照之後,系統會要求你進行標註,請點選畫面上方的 [Labeling queue] 就會進入以下的標註畫面,請給定 label 名稱之後,用滑鼠在您所要標註的物體旁邊框起來,完成之後按下 [Save Labels] 就會進入下一張要標註的照片。注意:一張照片中可以標註多個物體。

標註畫面

完成了!系統會自動對其他所有照片標註,您只要再行調整就好。但不管怎樣還是需要一定時間的,但考慮到之後的物件偵測效能,還是好好標囉!

最後還需要調整訓練與測試資料集的比例,建議是 80% / 20%,您可以手動點選單筆資料來移動到指定資料集,或點選 [TRAIN / TEST SPLIT] 附近的 ? 圖示來由系統幫您完成。當然啦,不管怎樣資料都不能太少,不然很難的!

標註影像完成

注意:由於在  Jetson Orin Nano 上也會使用同一支 C270 webcam (就拔過來拔過去),所以還是原廠考照的概念喔!

4. 建立管線 (Impulse):Edge Impulse 把整個從取得資料到輸出特徵的這段流程稱為 Impulse,點選左側選單的  [Impulse Design],在此會自動帶入第一段 data 與最後一段 output features,這都和前一段的資料標註有關。

在自動帶入的  Image Data 區塊中,可以看到影像解析度支援 96 / 160 / 320 的正方形輸入,並可調整 Resize mode (符合短邊、符合長邊或擠壓等作法)

  • processing block 請選擇 Image
  • learning block 請選擇 Object Detecion (Images)

我的 impulse 如下圖,細節後續還要逐個設定。

Impulse 管線

4.1 Image 處理區塊

在這個 processing block 中,請點選畫面上方的 [Generate features] 再點選下方的 [Generate features],會針對訓練資料集去探索其特徵,完成如下圖。

generate features 執行結果

4.2 Object Detection 學習區塊

在此要設定用於神經網路設定,請點選畫面中間來選擇物件偵測模型,會看到下圖,從中選擇 [FOMO (Faster Objects, More Objects) MobileNetV2 0.1] 選項,接著按下 [Start Training] 就會開始訓練了。除了 FOMO 之外,還有其他模型例如  YOLOv5 可用,歡迎玩玩看!如果模型名稱有跟著公司或平台名稱的話,代表是針對該平台硬體最佳化的模型,如果您有這些硬體的話,也務必要體驗看看。

挑選可用的物件偵測模型

根據您的資料集大小,訓練需要一點時間 (影像資料訓練起來本來就很花時間),完成之後會出現以下結果 (勉強接受~),您可根據 confusion matrix 結果回頭調整資料集內容與網路設定。

注意:免費的 Edge Impulse 帳號在資料集大小以及訓練時間上都有限制,所以您無法使用大型的影像資料集來訓練太多的回合數。

神經網路訓練完成

5. Live Classification

在此可以使用測試資料集中的資料,或再次連接攝影機拍照來即時測試模型結果。還可以把測試結果加入資料集,累積又一批資料之後就可以重新訓練啦。

6. Model testing:讓模型對所有的測試資料集的資料進行推論。這裡和上一步差不多。

7. Deployment:確保模型性能滿足要求後,就可以將模型部署到目標裝置上了。在這一步只要選擇不同的平台或開發板,Edge Impulse 就會負責模型轉檔為該裝置可執行的格式,非常方便。

執行畫面

請在Jetson Nano 終端機執行以下指令,就會執行 edge-implse 工具從您的專案把模型拉回來,並於 Jetson 端執行一個網頁來進行即時物件辨識。

edge-impulse-linux-runner

Jetson Orin Nano 作為即時物件偵測平台

參考資料

發佈留言

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