人工智慧在視覺領域有兩類非常常見的任務,一是分類,二是目標偵測。
分類:判斷圖片屬於哪一類別,例如類別為貓或狗。
目標偵測:用於找出影像中多個不同目標的位置、數量與尺寸。
在先前的影片教學中,我們說明了如何使用 OpenMV4 Plus 進行線上神經網路訓練,以達成不同物體的分類;該方法可即時判斷 OpenMV 視野中的影像是否為特定物體(例如:人臉是否配戴口罩),但無法輸出人臉或口罩的位置座標,亦無法輸出人臉數量。
由於目標檢測比影像分類複雜許多,且運算量大增,因此在微控制器領域極為罕見。OpenMV 的主控 MCU 採用 STM32H7;如今,我們在 OpenMV 上新增了一項功能,使其能在微控制器上執行類似目標檢測的任務,效能表現十分出色。

今天我們將為各位講解訓練示範實際道路環境中的交通標誌偵測,偵測我們實際道路上的交通標誌,例如禁止鳴笛、禁止停車、限速80等,而非實驗室無干擾環境。
您可於以下網址查看整個專案內容,其中包含所有程式碼與模型:https://book.openmv.cc/project/traffic-sign.html
眾所周知,實際環境極為複雜,尤其是道路環境,干擾因素眾多。我們使用手機等設備採集實際環境中的交通標誌影像,並利用我方 OpenMV 合作夥伴 EdgeImpulse 的線上平台訓練模型,共標註約 270 張影像,訓練時間僅需 10 分鐘。所訓練出的模型 F1 分數準確率可達 92%,於 OpenMV 上的執行幀率達每秒 10 幀,效果十分流暢且準確率亦相當高。
使用者可依據本公司的影片教學,訓練任何欲檢測之目標,例如不同數字、不同水果、不同標誌物、不同零件,甚至任何特定不規則目標等,皆可訓練以辨識出特定目標之數量、座標及物體類別名稱等。
注意:本集影片教學所講解的神經網路目標點檢測功能,不僅適用於 OpenMV4 H7 Plus,亦支援 OpenMV4 H7;由於訓練完成的 FOMO 目標點檢測模型體積不大、效果優異且僅數十 KB,即使 OpenMV4 H7 的運行記憶體較 Plus 為小,我們仍可訓練稍小的模型,使其於 OpenMV4 上順利執行。
以下為原理之簡要說明:
OpenMV 上 FOMO 目標點檢測的主要設計決策,基於一種理念:許多物件檢測問題實際上並不需要物件的尺寸,而僅需其在影像中的位置。一旦得知物件的位置,即可進行後續操作,例如 OpenMV 控制小車朝識別到的目標移動、無人機定點降落、控制機械手臂抓取特定目標物件等。
FOMO 模型是 EdgeImpulse 針對微控制器環境特別設計的一種模型;與一般目標偵測不同,該模型僅能偵測多個目標的位置與數量,無法取得其具體尺寸。
FOMO 模型的底層原理非常簡單且靈活。首先將影像分割為多個區塊,每區塊為 8×8 像素。若影像解析度為 96×96,則分割為 12×12 個單元格;若為 360×360 的影像,則分割為 40×40 個單元格。接著於每個單元格上獨立執行影像分類。
與 YOLO V5 或 MobileNet SSD 相比,FOMO 在大量小物件上的表現優異許多。FOMO 目標點檢測速度比 MobileNet SSD 快 30 倍。
若待檢測物件大小相近(例如欲辨識之標誌物尺寸差異不大),而非同時包含極大與極小之物件,則 FOMO 的效果更佳。
OpenMV 使用 EdgeImpulse 線上訓練神經網路目標點檢測,主要分為以下幾個步驟:蒐集並上傳影像資料集、標註目標、訓練、測試模型、部署。
* 收集影像資料集:針對我們實際欲辨識之環境中的特定物件,進行影像拍攝與收集。於何種環境中進行辨識,即於相同環境中收集實際影像,使實際訓練環境與實際檢測環境基本一致,以達成更佳效果。
*標註目標:將我們資料集中的每一項待偵測目標框選出來,並正確對應其名稱,以便後續進行訓練、偵測目標位置及目標名稱。
*訓練模型:標註完成後,依我們所設計之卷積神經網路參數進行模型訓練。
* 測試模型:我們依據訓練完成的模型進行測試,若效果不佳,則相應地擴充訓練資料集或調整訓練參數,並持續訓練,直至獲得滿意的模型。
*部署:我們將訓練完成的模型檔案放入 OpenMV 內建的隨身碟中執行即可。
以下為具體操作流程之示範:
01、蒐集並上傳影像資料集
一、首先,我們登入網站 edgeimpulse.com,選取「登入」,輸入新建的專案名稱,並選擇「影像」—「分類多個物件」

二、選擇上傳圖像。關於圖像的資料集,有幾種方式可以取得:
1. 透過 OpenMV IDE 即時擷取影像。使用 OpenMV IDE 內建的「資料集編輯器」工具,建立新資料集並即時擷取影像,詳細操作可參閱我們先前的影片教學:物體分類—口罩辨識。

2. 使用透過網路下載的圖片,或以手機實際拍攝的圖片。建議圖片所呈現的環境與您實際檢測的環境一致。我們已準備約四百至五百張禁止停車、禁止鳴笛及限速80等交通標誌之影像,所有圖片均於實際道路環境中採集;此資料集可於我們的GitHub及教學網站下載。
02、標註目標
每個分類皆上傳約一百張圖片;圖片上傳完成後,即需進行影像標註,標示出待識別物件的位置及其類別。


03、訓練模型
設定訓練參數,將解析度變更為128×128,所有參數皆可選擇預設值,然後按一下「儲存」。

產生 features,三種顏色分別代表三種標誌。

設定目標檢測訓練參數。訓練輪數預設為 60 輪,學習率為 0.001,驗證集比例為 20%,請勾選啟用資料增強;遷移學習模型可選擇預設的 MobileNetV2 0.35 或 MobileNetV2 0.1。(注意:不可使用 SSD,SSD 無法於 OpenMV 上執行。)
選擇開始訓練。訓練完成後所得之神經網路模型 F1 分數為 91.2%,我們可儲存目前版本。

選取儲存空間,填寫您的描述,然後選擇儲存。

04、部署模型
匯出訓練完成的模型檔案。僅需匯出 library,選擇 OpenMV,然後按一下「Build」,即開始部署並匯出模型。

它會自動下載我們匯出的模型,此處即為我們針對300張圖片所訓練的模型,至此整個訓練流程即告完成。

05、執行模型
於 OpenMV 上執行模型:
連接 OpenMV Plus,將訓練完成的三個檔案存入 OpenMV 內建隨身碟,並於 OpenMV IDE 中開啟 ei_object_detection.py 檔案。點選執行,執行結果將顯示於序列終端機中。


此功能亦可於 OpenMV4 上執行。由於 OpenMV4 未配備外接 SDRAM,記憶體容量較小,因此我們可透過縮減模型體積,使其得以於 OpenMV4 上運作。
縮減模型體積有兩種方法:
一、降低訓練解析度,將 128×128 的解析度改為 96×96。
二、修改所使用的遷移學習模型,將 MobileNetV2 0.35 改為 MobileNetV2 0.1。
最後將訓練完成的新檔案放至 OpenMV4 中執行即可。
以上即為我們的目標點檢測教學。期待您的成果!

基於 OpenMV 的 AI 哨兵:重點場所未關閉自動提醒
自動判斷重點場所門是否長時間未關閉,並即時提醒。

人員越界立即發出警報,OpenMV 體現「安全邊界感」
透過虛擬警戒線辨識人員或設備越界行為。

「AI城管」來囉,基於OpenMV建構佔道營業自動辨識系統
自動辨識佔道營業行為,協助城市日常治理。

瓦斯桶隨意放置?運用 OpenMV 自動觸發危險警示
自動辨識瓦斯桶違規擺放位置,提前發現燃氣安全隱患。

帶電作業未佩戴絕緣手套?OpenMV 立即發出警報!
自動辨識作業人員是否配戴絕緣手套,以輔助安全作業。

運用 OpenMV 智慧攝影機,即時辨識鋁板表面缺陷
線上辨識鋁板表面刮痕、凹陷等缺陷,協助品質管控。