人工智能在視覺領域有兩類非常常見的任務,一是分類,二是目標檢測。
分類:判斷圖片屬於哪個類別,例如類別為貓還是狗。
目標檢測:用於偵測圖片中多個不同目標的位置、數量及尺寸。
在早前的影片教學中,我們講解了如何使用 OpenMV4 Plus 在線訓練神經網絡,以進行不同物體的分類;該系統可即時判斷 OpenMV 視野內的圖像是否為某特定物體(例如人臉是否佩戴口罩),但無法輸出人臉或口罩的位置坐標,亦無法輸出人臉的數量。
由於目標檢測比圖像分類複雜得多,且計算量大得多,因此在微控制器領域極為罕見。OpenMV 的主控 MCU 為 STM32H7;現在我們在 OpenMV 上新增了一項功能,可在微控制器上執行類似目標檢測的任務,性能表現十分出色。

今日我哋將為大家講解訓練示範實際道路環境中的交通標誌偵測,偵測我們實際道路上的交通標誌例如禁止鳴笛、禁止停車、限速八十等,而非實驗室無干擾環境。
你可於以下網址查看整個項目內容,當中包括所有程式碼及模型: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 內置的 USB 隨身碟中即可運行。
以下為具體操作流程的示範:
01、收集及上傳圖像數據集
一、首先,我們登入網站 edgeimpulse.com,選取「登入」,輸入新建項目的名稱,然後選擇「影像」—「分類多個物件」

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

2. 使用經網絡下載的圖片,或以手機實際拍攝的圖片。最佳做法是選用與您實際檢測環境一致的圖片。我們已準備約四百至五百張涵蓋「禁止泊車」、「禁止鳴號」及「限速八十」等交通標誌的圖像,所有圖片均於實際道路環境中採集;此數據集可於我們的 GitHub 及教學網站下載。
02、標註目標
每個分類均上載約一百張圖片;圖片上載完成後,須進行圖像標註,標出需識別物件的位置及所屬分類。


03、訓練模型
設定訓練參數,將解析度更改為128×128,所有參數均採用預設值即可,然後按一下「儲存」。

生成特徵,三種顏色分別代表三種標誌。

設定目標檢測訓練參數。訓練輪數預設為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 內置 USB 隨身碟,並於 OpenMV IDE 中開啟 ei_object_detection.py 檔案。按一下「執行」,串行終端機將顯示執行結果。


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

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

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

「AI城管」來啦,採用OpenMV構建的佔道經營自動識別系統
自動識別佔道經營行為,協助城市日常治理。

煤氣罐擺放混亂?利用 OpenMV 自動觸發危險警報
自動識別煤氣罐違規擺放位置,及早發現燃氣安全隱患。

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

採用OpenMV智能攝像頭,即時識別鋁板表面缺陷
在網上識別鋁板表面的刮痕、凹陷等缺陷,以協助品質管控。