去年四月份我哋嘅新產品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」,然後點擊「Save」。

接下來選擇「生成特徵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之AI哨兵:重點場所未關自動提醒
自動判斷重點場所門口是否長時間未關閉,並即時發出提醒。

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

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

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

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

採用OpenMV智能攝像頭,實時識別鋁板表面缺陷
線上識別鋁板表面劃痕、凹陷等缺陷,協助品質管控。