陳旭鳳 韓佳輝



摘 要:現代教育領域仍然是以教師與學生一對多的模式為主,這樣就導致了教師在教學環境中既要完成教學過程,又要時刻關注學生學習狀態,很難做到在少數學生出現疲憊狀態時及時發現并做出提醒。針對這一現狀,本文提出基于卷積神經網絡的學生疲勞狀態反饋策略,建立數據集并訓練出疲憊狀態識別分類模型,結合機器視覺系統可應用到教學場景中,在適當時機向教師發出預警,提醒教師改變課堂氛圍,從而更好地幫助學生及時調整學習狀態,提高學習效率。
關鍵詞:人工智能;卷積神經網絡;情緒分類;疲憊狀態識別
隨著人工智能的關鍵技術發展,面部表情識別技術在“人工智能教育”領域起著重要作用。利用識別結果可以分析學生的學習動態,給老師提供及時反饋。從微觀角度來看,實時反饋可以幫助教師更全面獲得學生們的及時表達,從而推斷學生們的學習情況和提高課堂教學質量;從宏觀的角度來看,它促進了技術支持教學的發展,使教學方法更加科學和現代,并加速了教育現代化的到來。
美國著名心理學家Ekmann和Friese將人類的表情分為七個基本表達:悲傷、自然、快樂、憤怒、驚訝、厭惡和恐懼。面部表情識別是計算機視覺和人工智能研究方面的一個非常具有吸引力的研究,具有廣闊的應用前景,例如遠程教育、安全駕駛、人工智能、情感語音研究、交通出行、輔助教學系統等領域,這些應用也不斷推動著人臉面部表情識別技術的發展[1]。當前的人臉表情識別流程主要是人臉檢測、特征提取和表情分類,本文主要針對表情分類部分開展研究。
據教育領域相關研究可知,我國長期處于一對多的教學模式,這樣就導致了教師在教學環境中既要做到教學,又要時刻關注學生學習狀態,很難做到在少數學生出現疲憊狀態時及時發現并做出提醒。針對這一情況,本文提出基于卷積神經網絡的學生疲勞狀態反饋策略,在適當時機向教師發出預警,提醒教師改變課堂氛圍,從而更好地幫助學生及時調整學習狀態,提高學習效率。
本文主要包含四部分內容:模型搭建、數據集建立、模型訓練與保存、應用模型設計反饋策略。
1 模型搭建
本文搭建基于GPU服務器的深度學習環境平臺,使用Pytorch深度學習框架構建了一個基于卷積神經網絡的圖像分類模型。
1.1 環境部署
想要實現Pytorch基于卷積神經網絡的人臉表情識別的網絡模型搭建,首先需要搭建滿足研究需要的程序運行平臺[2]。
本文所使用軟硬件環境包括:(1)軟硬件平臺:Windows操作系統、Python3.7、AnaConda3;(2)編譯器:Pycharm;(3)深度學習框架:Pytorch-GPU、OpenCV;(4)模型訓練加速平臺:NVDIA GeForce RTX 2080 Ti。
在windows10操作系統下,安裝AnaConda3軟件,完成后進入CMD命令工作界面,使用指令創建虛擬環境,并進行下一步深度學習環境部署:(1)使用conda指令安裝opencv等所需環境,進入pytorch官網,根據Python和CUDA選擇對應的版本,然后在CMD命令窗口輸入官方給出提示可通過運行;(2)在CMD指令窗口分別輸入以下指令,打開jupyter notebook編程頁面,在打開成功的網頁頁面輸入以下指令進行環境測試,測試Pytorch是否安裝成功:若輸出版本號則為成功;(3)下載安裝并啟動Pycharm,配置編譯環境為部署好的虛擬環境mydlenv。到此后續程序可在Pycharm中進行編寫與運行、調試。
1.2 建構模型
通過Pytorch搭建基于卷積神經網絡的分類模型結構,如圖1所示。首次搭建只采用其中的卷積-全連接部分[3],后期優化時可以考慮向模型中添加Face landmarks+HOG features 部分。
卷積部分輸入圖片尺寸為48×48×1,經過一個3×3×64卷積核的卷積操作,再進行一次2×2的池化,得到一個24×24×64的feature map 1(以上卷積和池化操作的步長均為1,每次卷積前的padding為1,下同)。將feature map 1經過一個3×3×128卷積核的卷積操作,再進行一次2×2的池化,得到一個12×12×128的feature map 2。將feature map 2經過一個3×3×256卷積核的卷積操作,再進行一次2×2的池化,得到一個6×6×256的feature map 3。卷積完畢,數據即將進入全連接層。進入全連接層之前,要進行數據扁平化,將feature map 3拉一個成長度為6×6×256=9216的一維tensor。隨后數據經過dropout后被送進一層含有4096個神經元的隱層,再次經過dropout后被送進一層含有1024個神經元的隱層,之后經過一層含256個神經元的隱層,最終經過含有2個神經元的輸出層。在輸出層后加上softmax層,取概率最高的類別為分類結果。
本文預期訓練模型輸出為二分類,結果對應是否疲憊的兩種狀態,因此輸出類型值out_features為2。
2 數據集建立
2.1 數據采集
采集學習過程中人臉情緒圖像數據,建立訓練集和測試集,并標注好對應的標簽。通過攝像頭等視覺傳感器以及網絡爬取等手段獲取視頻或圖像數據,通過Python編程使用Opencv庫對獲取到的圖像數據進行讀取和預處理;對預處理后的圖像數據再進一步進行深度學習模型的訓練集和測試集劃分,并對訓練集進行對應標簽的建立。
本文所采用的人臉圖像數據獲取方法為自用筆記本電腦攝像頭錄制連續的學習狀態視頻,再對視頻加以多種處理得到模型訓練集,具體步驟如下:
(1)獲得連續錄制視頻后,使用OpenCV對視頻定時采樣,實現圖像幀提取并保存圖像。
(2)由于所提取出的包含人臉在內的圖像,人臉位置有遠近大小之分,為了后續模型訓練更準確,提高數據集的質量,使用OpenCV對圖像進行批量適度的裁剪并重新保存圖像文件。
(3)為了便于后期模型訓練,匹配當前模型輸入圖像的像素尺寸,使用OpenCV對裁剪后的圖像進行批量分辨率修改。
通過以上步驟,得到自建用于模型訓練的人臉圖像數據集,共11589張圖片。部分示例圖像如圖2所示。
通過人工標注,完成對以上圖像數據的標簽分類,目的標簽為二分類——0:不疲憊;1:疲憊。
2.2 數據集預處理
在得到數量充足的人臉圖像數據后,還需要經過進一步處理將其劃分為用于訓練模型、驗證模型的數據集,本文訓練集與驗證集的比例為3∶1。測試模型則使用少量網絡爬取的實際人臉圖像。
3 模型訓練與保存
訓練、驗證用于疲憊狀態識別的圖像分類模型。基于GPU服務器的深度學習環境平臺,對采集的學習過程中人臉圖像數據進行分類模型的訓練和優化,保存訓練結果[4]。
3.1 模型訓練
基于前序工作,就可以通過數據的前向傳播和誤差的反向傳播來訓練圖像分類模型了。在此之前,還需要指定優化器(即學習率更新的方式)、損失函數以及訓練輪數、學習率等超參數。本文采用的優化器是SGD,即隨機梯度下降,其中參數weight_decay為正則項系數;損失函數采用的是交叉熵;使用學習率衰減。
在訓練模型過程中,通過epochs(訓練輪數)、Learning_rate(學習率)、wt_decay(衰減權重)的參數調整,先初步選定較為合適的超參數初始值;在此數據基礎上優化運行環境,并微調超參數,篩選出訓練集與驗證集相準確率相對較高的模型。在經過多次訓練驗證后,從訓練結果記錄數據中挑選出相對最優模型,其參數設置為:epoch=80,Learning_rate=0.05,wt_decay=0.01。模型在訓練集上達到的識別準確率約為94.97%,在驗證集上達到的識別準確率約為92.36%。在本次運行環境下,整體模型訓練時間約為332秒。
3.2 模型保存
模型的保存與加載方法與訓練的模型大小有關。本次訓練的模型結構相對而言較為輕便,因此使用torch.save(model,'model_net1.pkl')直接保存整個模型(包括結構和參數)。
4 應用模型設計反饋策略
4.1 模型測試
為測試模型對于非訓練圖像數據的分類性能,設計加載模型程序,并采用網絡爬取的方式獲得測試圖像,測試本文所得模型對于實際場景下疲憊狀態的識別效果[5]。
用于測試的圖像數據為網絡爬取的65張彩色圖片,截取部分示例見圖3。
加載所保存的模型進行疲憊分類測試,運行程序得到的結果如圖4所示。
其中,最后一行輸出結果即為圖片分類結果。張量tensor[1]表示識別結果為標簽1,對應分類為疲憊(模型分類為二分類:0-不疲憊;1-疲憊)。
使用訓練的疲憊分類模型對以上圖像進行測試,將得到的模型分類結果記錄在表格中,與人工判定的label真實值進行對比。對于測試圖像,模型的識別準確率設置為:真實值與測試值label相同的數量之和與測試圖像總數量的比值。通過對當前最優分類模型進行測試,實驗所得其疲憊狀態識別準確率為78.46%。
4.2 學生疲憊狀態反饋策略
使用本文所得模型,可以完成對輸入的人臉圖像進行疲憊狀態的識別,輸出結果為0(不疲憊)或1(疲憊)。針對教學場景下學生疲憊狀態的反饋策略問題,可基于嵌入式機器視覺實驗箱設計如下反饋系統解決方案。
4.2.1 圖像獲取設備
使用性價比高的視覺傳感器作為系統的圖像獲取設備,例如USB攝像頭模組,100萬像素,720P。
4.2.2 圖像識別處理
疲憊狀態檢測,即圖像識別處理過程需要實現三部分功能:接收攝像頭所傳輸的數據,加載訓練好的模型進行疲憊狀態識別,輸出識別結果并判斷是否需要發出預警。
第一步,運行環境設置。由于實驗箱多為Ubuntu Linux操作系統,可在Linux環境下搭建部署pytorch深度學習環境,用于加載與運行人臉疲憊檢測的現有模型與測試程序。運行環境的設置參數值可參考本文1.1軟硬件環境配置部分。第二步,進行人臉疲憊狀態檢測。使用Python進行程序編寫,完成攝像頭傳輸圖像或視頻數據的讀取與保存,對圖像或視頻數據進行預處理后,加載疲憊分類模型進行疲憊狀態人臉的檢測。為節省系統性能,本步驟可設置為定時進行檢測,例如每5分鐘運行一次疲憊狀態檢測程序。
第三步,記錄并分析識別結果。根據疲憊狀態識別結果,例如若課堂中呈現疲憊狀態的學生達到總人數的30%,則系統向反饋預警裝置發出有效信號。
4.2.3 反饋預警裝置
設置適當的預警方式對教師進行預警,例如,同時設置聲光報警。其中面向教師的嵌入式實驗箱顯示屏,可以顯示文字如“請您注意改善課堂教學效果”,同時使用音頻輸出口輸出一定提示音。
通過以上學生疲憊狀態反饋系統的運行,可實現在課堂教學中,每隔一定時間(如5分鐘)進行學生人臉識別,若處于疲憊狀態人數達到總人數的一定比例,則向教師發出聲音提示以及顯示內容的預警。
5 結論和改進
本文提出了一套基于AI人臉情緒識別的學生疲憊狀態反饋策略設計方案。通過采集與建立學習過程中人臉數據集,搭建與訓練基于卷積神經網絡的人臉情緒識別模型,得到了相對最優的人臉疲憊狀態檢測模型。通過對模型進行實驗測試,得到以下結論與改進方向。
5.1 研究結論
基于自建人臉疲憊訓練數據集,訓練所得人臉疲憊狀態檢測模型,其測試準確率達到了78.46%。基于此模型,可實現在課堂教學中進行學生人臉情緒識別,在適當時機向教師發出預警,提醒教師改變課堂氛圍,從而更好地幫助學生及時調整學習狀態,提高學習效率。
5.2 改進方向
本文所得模型的測試準確率仍然有可提升的空間[6]。可通過以下方式對訓練模型的精度進行優化,提高疲憊狀態的識別率。
完善數據集:可將CK+數據集重新人工標注以匹配疲憊的表情(打哈欠、揉眼睛等);將自建數據集與CK+數據集融合成新的大數據集來進行訓練和驗證模型。
優化網絡模型:網絡結構調整,可嘗試加入Face landmarks+HOG features,更新模型結構;更新優化器,當前使用SGD,可對比BGD、MBGD、指數加權平均等優化器;修改超參數,基于以上工作,重新進行多輪試驗調整超參數的值,得到新的相對最優解。
參考文獻:
[1]胡敏,等.表情識別技術的教育應用[J].教育現代化,2019,6(75):100-102.
[2]廖星宇.深度學習入門之PyTorch[M].北京:電子工業出版社,2017.
[3]詳解CNN卷積神經網絡[EB/OL].https://blog.csdn.net/liangchunjiang/article/details/79030681.
[4]模型的訓練和測試、保存和加載[EB/OL].https://blog.csdn.net/u011276025/article/details/78507950.
[5]使用訓練好的模型測試自己圖片[EB/OL].https://blog.csdn.net/u011276025/article/details/72817353.
[6]李珊,鄧偉洪.Deep Facial Expression Recognition:A Survey[J].中國圖像圖形學報,2020,25(11).
平臺支撐:“河北省冶金工業過程數字化控制技術創新中心”支撐(平臺編號:SG2021185);“河北省鋼鐵焦化企業污染治理技術創新中心”支撐(平臺編號:SG2020220)
基金項目:中央引導地方科技發展資金項目(項目編號:216Z1004G);河北省科技廳大學生科技創新能力培育專項項目(項目編號:2021H011002)
作者簡介:陳旭鳳(1991— ),女,漢族,河北定州人,碩士研究生,講師,研究方向:人工智能、機器視覺。
*通訊作者:韓佳輝。