去年4月份,我哋嘅新產品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上方選單欄嘅「工具」——「數據編輯器」——「Export」——「上傳」——「透過API Key上傳」,複製「API Key」上傳即可。
上傳時數據會自動劃分為訓練集同測試集,我哋默認選擇比例「80%同20%」就得。我哋總共採集咗400幾張人臉圖片,其中80%嘅Training Date即係默認用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分鐘。
模型訓練完成後,你可以查看準確度、混淆矩陣confusion matrix和預期設備性能。

* 測試模型:
訓練完成後,我們將使用測試數據來檢驗模型。
選擇「模型測試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入面。將ei_image_classification.py檔案喺OpenMV IDE中打開,就可以睇到我哋啱啱喺EdgeImpulse裡面生成嘅程式碼。點擊運行,喺串行終端裡面會顯示運行嘅結果。


好啦,你已經成功為OpenMV增加自行訓練神經網絡嘅功能喇。
期待你嘅成果!

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

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

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

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

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

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