去年四月,我們的新品OpenMV4 H7 Plus正式上市。今天,我將為大家介紹OpenMV4 H7 Plus的一項新功能——透過EdgeImpulse線上平台自行訓練神經網絡,實現分類識別。
在本教程中,你將使用機器學習來構建一個識別系統,該系統可透過OpenMV4 H7 Plus智能攝像頭識別人臉是否佩戴口罩,即實現影像分類。

EdgeImpulse是一個為嵌入式裝置提供線上訓練神經網路模型服務的網站,它是我們OpenMV的合作夥伴,同時也均為ST意法半導體的官方合作夥伴。目前EdgeImpulse對我們OpenMV用戶是免費開放的,OpenMV用戶可以免費使用EdgeImpulse線上訓練適用於OpenMV的神經網路模型。
為嵌入式設備OpenMV增加神經網絡,可實現區分盜獵者與大象、對工廠生產線進行品質控制、讓遙控模型車自行駕駛等功能。
在本教程中,你將學習如何收集影像建立高品質的資料集,如何應用遷移學習訓練神經網絡,以及如何將系統部署到OpenMV。
此外,我們也提供了影片教學,您可以在官網搜尋《OpenMV4 Plus訓練神經網路進行口罩識別》觀看。
您可以在以下網址查看整個專案內容,所有程式碼和模型皆包含在內:https://book.openmv.cc/project/mask.html
使用EdgeImpulse線上訓練適用於OpenMV的神經網路模型主要分為以下四個步驟:資料集採集、上傳、訓練以及部署。
01、蒐集資料集
在本教程中,我們會構建一個可以區分人臉是否佩戴口罩的模型。當然你也可以選擇分類其他物品。為實現機器學習模型的運作,你需要收集戴口罩和不戴口罩兩種人臉的大量示例圖像。在訓練時,這些示例圖像就用來做模型的區分練習。
我們需要利用OpenMV IDE來採集我們的資料集,採集圖像的步驟如下:
* 建立兩個分類:
開啟OpenMV IDE選單欄的「工具」,選擇「資料集編輯器」,點擊「新建資料集」,接著新建一個資料夾並開啟,在資料集內再新建兩個資料夾,分別命名為mask(用於儲存戴口罩的人臉照片)和face(用於儲存不戴口罩的人臉照片)。


使用OpenMV擷取影像
首先我們連接OpenMV,點擊IDE裡面的「連接」,點擊「執行」,Framebuffer幀緩衝區中可以看到OpenMV即時的影像,點擊左側選單列中的照片按鈕,OpenMV就會自動儲存這張圖片,這就是資料集裡面的一個資料。
首先我們要儲存的是戴了口罩的人臉,點一下照片的按鈕,IDE下側就會拍攝一張照片,它會自動命名為00000,然後下一張是00001,依此類推。
使用OpenMV分別採集200張戴口罩(男女各100張)和200張不戴口罩(男女各佔100張)的人臉照片。


* 注意:要確保採集到各種角度的照片,以保證我們訓練學習的多樣化。
如果在採集的過程中發現某張圖片採集得不夠完美,可以對此圖片按右鍵點選刪除。
02、上傳
使用OpenMV採集完影像後,您需要註冊帳號登入EdgeImpulse官網(https://edgeimpulse.com/)開始上傳影像,上傳影像的步驟:
在EdgeImpulse上建立一個新專案,點擊「keys」,選擇「API Key」並複製「API Key」。透過API Key實現OpenMV IDE與Edge Impulse的連通。

選擇OpenMV IDE上方選單列的「工具」——「資料編輯器」——「匯出」——「上傳」——「透過API Key上傳」,複製「API Key」上傳即可。
上傳時資料將自動劃分為訓練集和測試集,我們預設選擇比例為「80%和20%」即可。我們一共採集了400多張人臉圖片,其中80%的訓練資料即預設將80%的資料用於訓練,剩餘的20%用作測試集。


03、訓練資料集
資料集準備就緒,您就可以在EdgeImpulse網站介面中訓練資料集了。
* 配置處理模組:
首先選擇「Impulse Design」,配置處理模組:
設定預設的圖像長寬為「96 x 96」;
選擇「圖像Images」模組,表示我們正在進行圖像分類訓練(你也可以使用EdgeImpulse分類聲音、影片等);
* 選擇「遷移學習(影像)Transfer Learning (Images)」,設定學習的模型;
選擇「儲存Save impulse」,顯示Successfully即表示配置成功。

* 影像預處理:
點擊左側選單中的「圖像Image」,將顏色格式設定為「RGB」,然後點擊「儲存」。

接下來選擇「生成特徵Generate features」來啟動流程,將對400多張數據進行圖像預處理,右側會顯示完整數據集的3D視覺化。

配置遷移學習模型
點擊左側選單中的「遷移學習Transfer learning」,設定的參數全部選擇預設即可,也可根據需求調整參數:
1.將訓練週期數Number of training cycles設定預設為10
2.將學習率Learning rate設定為0.0005
3.可以勾選也可以不勾選「數據增強Data augmentation」
4.將最低置信度Minimum confidence rating預設設定為0.8。
點擊「開始訓練Start training」,訓練過程大約需要4到5分鐘。
模型訓練完成後,您可以查看準確度、混淆矩陣以及預期設備性能。

測試模型:
訓練完成後,我們將使用測試數據來檢驗模型。
選擇「模型測試Model testing」,勾選「樣本名稱Sample name」旁的核取方塊,點擊「分類選擇Classify selected」。這裡顯示的準確度達到了97%,就一個數據甚少的模型而言實屬難得。

發現顯示紅色的這張圖片是不確定的,點擊這張圖片右側的三個點,選擇「顯示分類 Show classification」,你就會進入「即時分類」的介面,裡面包含檔案的更多細節。這個介面將幫助你確定圖片分類錯誤的原因。

如果數據在所有已知的集群(戴口罩/不戴口罩)之外,這可能是與以前看到的任何分類都不匹配的數據——可能是由於頭髮遮住了大半的人臉。
04、在OpenMV上運行模型
完成了訓練設計、模型訓練和模型驗證的步驟,你就可以將這個模型匯出到你的OpenMV,選擇「OpenMV」,選擇「Build」進行生成,它自動生成了3個檔案:
* trained.tflite 訓練好的神經網路模型
* labels.txt 兩個分類標籤(face和mask)
ei_image_classification.py 是OpenMV上要執行的程式碼

連接OpenMV IDE,將這3個檔案儲存到OpenMV內建的Flash中。在OpenMV IDE中開啟ei_image_classification.py檔案,可以看到我們剛剛在EdgeImpulse中產生的程式碼。點擊執行,序列終端機中將會顯示執行的結果。


好的,你已經成功為OpenMV增加了自行訓練神經網路的功能。
期待你的成果!

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

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

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

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

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

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