黨 鑫,許 華
(1 天津工業大學計算機科學與技術學院 天津 300387)
(2 天津工業大學軟件學院 天津 300387)
隨著我國經濟的不斷發展,人們對于出行質量的要求也越來越高,而越來越多的居民選擇機動車出行。根據國家統計局的中國統計年鑒數據顯示[1],在2020 年,全國總共發生了244 674 次交通事故,由交通事故造成的直接財產損失高達131 360.6 萬元。究其原因,主要是因為駕駛本身是一項極具壓力的活動,在復雜的路況中,駕駛員需要快速、同步完成多項決策任務。因此每位駕駛員應當時刻保持良好的生理和心理狀態,然而隨著私家車普及,駕駛員因疾病、衰老或心理等問題導致情緒狀態變化,此時發生不當駕駛行為的概率將會大大增加,盡管輔助駕駛技術在發展,但仍無法把控駕駛人狀態這一最重要的因素,所以在交通安全技術研究中,對駕駛員的駕駛狀態進行分析具有較高的研究價值和實用意義,不但會減少交通給人們帶來的生命和財產的威脅,還能降低交通事故的發生率,保證道路及公共交通的安全和穩定運行。
近年來基于人臉識別情緒進行駕駛員狀態分析逐漸成為一個研究熱點。在駕駛過程中,駕駛員的情緒與駕駛狀態高度相關:當表現出高興的情緒時,駕駛員將與外部環境進行良好的正向反應;當表現出驚訝、害怕、生氣、厭惡情緒時,駕駛員將對外部刺激產生過激的可能性,需進行及時的提醒與記錄;當表現出悲傷狀態時,駕駛員將減少與外部環境交互,可能對駕駛產生一定影響,需要進行安全駕駛提醒;此外,當駕駛員長期處于無表情等中性狀態時,則表明其陷入一定程度的疲勞狀態,可對駕駛員進行相應提示。這些狀態對應關系,使基于AI 算法的駕駛員狀態分析成為可能。
然而,在駕駛位這類特定場景下的人臉表情識別技術實際上依然面臨諸多挑戰[2],特征提取需最大程度消除抖動、光照等干擾信息;分類器不但需要考慮不同類別表情間特征變化不明顯等影響,還需考慮對攝像角度、人臉差異等因素的泛化能力。此外,由于車載算法的低負載和實時計算需求,算法需盡可能縮小網絡規模,減少分類所需的時間[3-4]。
為了解決上述挑戰,需要在準確率、輕量化上達到一個更好的平衡狀態,本文將使用引入注意力機制改進后的YOLOv5 作為人臉定位器,YOLOv5 對輸入圖片進行人臉定位和裁剪工作,然后將定位裁剪后的圖片輸入到ConvNeXt的卷積神經網絡中進行分類工作,從而分類出不同的駕駛員表情[5]。本模型增強了對人像臉部特征的感知能力,實現通過駕駛員表情識別判斷分析駕駛員狀態的目的。
基于YOLOv5 深度學習的目標檢測算法包含YOLOv5s、YOLOv5m、YOLOv5l 和YOLOv5x 4 個版本[6],其中YOLOv5s 權重最小。綜合考慮模型的權重文件大小、識別精度和檢測速度,選擇檢測速度最快、識別精度相對較高的YOLOv5s 展開研究。YOLOv5s 網絡主要包含3 個部分,即骨干網絡(Backbone)、特征檢測模塊層(Neck)和回歸預測部分(Head),網絡結構如圖1 所示。

圖1 YOLOv5s 網絡結構
本文模型首先在輸入端采用了Mosaic 數據增強,Mosaic 數據增強由原來的兩張圖像提高到四張圖像進行拼接,并對圖像進行隨機縮放、隨機裁剪和隨機排列。使用數據增強可以改善數據集中小、中、大目標數據不均衡的問題。從而實現豐富數據集、提高網絡的魯棒性的目的,同時通過對識別物體的裁剪,使模型根據局部特征識別物體,有助于被遮擋物體的檢測,從而提升了模型的檢測能力。
首先,算法基于骨干網絡對輸入的圖片進行特征提取。骨干網絡中的SPPF(spatial pyramid pooling-fast)使用3 個5×5 的最大池化,代替原來的5×5、9×9、13×13 最大池化,多個小尺寸池化核級聯代替SPP 模塊中單個大尺寸池化核,從而在保留原有功能,即融合不同感受野的特征圖,豐富特征圖的表達能力的情況下,進一步提高了運行速度。隨后,提取到的特征將被輸入到特征檢測層Neck 模塊[7],PANet 結構在FPN 的基礎上又引入了一個自底向上(Bottom-up)的路徑。經過自頂向下(Top-down)的特征融合后,再進行自底向上(Bottom-up)的特征融合,將輸出三組不同分辨率的融合特征。最后,三組融合特征被輸送到Head 部分中進行卷積輸出最終的檢測結果,從而實現人臉區域的定位檢測。
為了增強人臉圖像特征提取,在減少網絡權重參數數量和模型體積的前提下,保證檢測精度,實現改進的人臉定位檢測模型。在原特征提取網絡的Bottleneck 結構后引入卷積注意力機制(convolutional block attention module,CBAM)模塊,CBAM[8]是輕量級的卷積注意力模塊,它結合了通道注意力模塊(channel attention module, CAM)和空間的注意力模塊(spatial attention module, SAM)。
2.2.1 CAM 模塊
該模塊關注輸入圖片中有意義的信息(分類任務就關注因為什么分成了不同類別)。分別進行通道和空間上的Attention,其通道維度不變,壓縮空間維度。通道注意力公式如式(1)所示:
2.2.2 SAM 模塊
該模塊關注的是目標的位置信息,空間維度不變,壓縮通道維度。將通道注意力模塊的輸出結果通過最大池化和平均池化得到兩個1×H×W 的特征圖,然后經過Concat 操作對兩個特征圖進行拼接,通過7×7 卷積變為1通道的特征圖(實驗證明7×7 效果比3×3 好),再經過一個sigmoid 得到空間注意力(spatial attention)的特征圖,最后將輸出結果乘原圖變回C×H×W 大小。
空間注意力公式如式(2)所示:
包含空間注意力和通道注意力算法,不僅能夠更好地提取人臉的特征信息,提高模型表征能力,而且節約參數和計算力,同時新增參數的計算量對模型復雜度不會造成太大的影響。
為了實現相對輕量化的計算,并且可以將模型在移動端上實現部署,就要求網絡結構的算法計算效率要更高,模型參數少。因此本文采用ConvNeXt 構造了情緒分類模型。ConvNeXt 是來自KAIST、Meta、紐約大學的研究者Liu[9]等提出的卷積神經網絡模型。這個模型以ResNet[10]為基礎, 引用 Vision Transformer[11]、 Swin Transformer[12]、ResNeXt[13]等神經網絡設計思路,通過改變階段計算模塊數量、簡化網絡輸入層、使用深度可分離卷積、采用倒置Bottleneck 模塊結構和大卷積核結構實現計算量的減少和準確率的提升。
ConvNeXt 改變了傳統的ResNeXt 的結構設計比例,將stage1 到stage4 堆疊block 的次數由(3,4,6,3)調整成(3,3,9,3),在保證精度的同時最大程度減少了所需要的參數量。并且block 更改下采樣模塊為一個卷積核大小為4×4以及stride 為4 的卷積層構成patchify,最大化通道維度的信息。同時還使用了深度分離卷積(depthwise convolution),只是對空間維度進行混合,將通道數從64 提升到96,實現深度可分離卷積,實現有效減少計算量的目的。
ConvNeXt 將depthwise conv 模塊上移,原來是1×1 conv →depthwise conv →1×1 conv 現在變成depthwise conv→1×1 conv→1x1 conv,還將depthwise conv 的卷積核大小由3×3 改成了7×7,然后聚焦到一些更細小的差異,比如激活函數以及Normalization。將激活函數ReLU 替換成 GELU, 使用更少的激活函數, 使用更少的Normalization,將BN 替換成LN,采用2×2,stride=2 卷積進行下采樣。通過一系列對模型細節的調整,ConvNeXt 在相同FLOPs 下準確率已經超過了Swin Transformer。
為了提高模型識別效率和準確率,本文將使用引入注意力機制改進后的YOLOv5 作為人臉定位器,將定位裁剪后的圖片輸入到ConvNeXt 的卷積神經網絡中進行分類的駕駛員狀態分析。本文提出的總體模型如圖2 所示。

圖2 駕駛員狀態分析模型結構圖
為了評估本文提出的算法,本節將在兩個公開的面部表情數據集上進行實驗,這兩個數據集分別是FER2013人臉表情數據集與KMU-FED 數據集。
FER2013(Facial Expression Recognition 2013)[14]數據集是用于面部表情識別的一個公開數據集。該數據集由私人公司Affectiva 創建,包含35 887 張灰度圖像,分為7個不同的表情類別:憤怒、厭惡、恐懼、開心、中性、悲傷和驚訝。每個圖像的尺寸為48×48 像素。圖3 是FER2013數據集樣例圖片。

圖3 FER2013 數據集樣例圖片
KMU-FED 數據集[15]用于實際駕駛環境中的表情識別。為了構建數據集,我們使用近紅外相機在真實的車輛駕駛環境中捕獲了基準數據集序列。KMU-FED 數據庫包含來自12 個對象的55 個圖像序列,包括各種照明變化(前、左、右和后光)和頭發或太陽鏡引起的部分遮擋。非常有效地模擬了駕駛環境中駕駛員的表情。圖4 是KMUFED 數據庫樣例圖片。

圖4 KMU-FED 數據庫樣例圖片
實驗所需的相關環境如下:GPU 為NVIDIA Tesla T4,以Python3.8 編程語言環境、PyTorch 2.1.0 作為深度學習框架搭建模型,并使用CUDA11.3 進行實驗加速,訓練過程中使用交叉熵損失函數,并采用AdamW 優化器優化模型。
3.3.1 FER2013 數據集上實驗結果及分析
將本文模型在FER2013 數據集上進行訓練和測試,在訓練過程中載入預訓練權重,批量大小為8,迭代次數為300 次,初始學習率為0.005,先采用warmup 的方法進行學習率預熱,然后再采用余弦退火來更新學習率的方法。AdamW 優化器即在Adam 基礎上加入了weight decay正則化。模型訓練過程中將FER2013 數據集分為訓練集(27 327 幅)進行訓練,在測試集(6 828 幅)上進行測試。在訓練數據集上進行參數訓練前,對樣本進行隨機翻轉等預處理。本文模型在FER2013 數據集上的混淆矩陣如圖5 所示。

圖5 Fer2013 數據集上的混淆矩陣
由圖5 可知,ConvNeXt 模型對FER2013 數據集的7種類別達到了73.65%的總體識別準確率。其中高興、厭惡、驚喜類別的識別率分別達到了90.21%、82.80%和79.34%,而憤怒、恐懼、傷心、中性類別的識別率稍低,分別為68.07%、61.88%、65.26%和68.53%,可能因為這4種表情特征的區分性稍差,此外,FER2013 數據集中的錯誤標簽對模型的準確率也有一定影響。
3.3.2 KMU-FED 數據集上實驗結果及分析
將本文模型在KMU-FED 數據集上進行訓練和測試,因為數據集較小,迭代次數為80 次,其他訓練參數與FER2013 數據集上一致。本實驗將KMU-FED 數據集分為訓練集(898 幅)和測試集(221 幅)。在訓練數據集上進行參數訓練前,對樣本進行隨機翻轉等預處理。本文模型在KMU-FED 數據集上的混淆矩陣如圖6 所示。

圖6 KMU-FED 數據集上的混淆矩陣
由圖6 可知,在KMU-FED 數據集上總體正確識別率達到了97.73%,并且對憤怒、恐懼、快樂、傷心和驚喜這5種表情的識別率達到了100%,但由于厭惡表情與憤怒表情某些特征相似,導致網絡模型對其識別率較低,僅有81.48%。證明本文模型在模擬真實駕駛員駕駛環境下,對駕駛員的人臉表情識別達到了一定的準確率,但是在區分厭惡與憤怒這種更細膩的表情時還有進步的空間,并且因為數據集較小的情況存在,所以在區分細膩差別時,模型還有調整進步的空間。
為了驗證本文所提出方法的有效性,為證明改進算法的有效性和合理性,在ConvNeXt 的基礎上依次加入YOLOv5 、CBAM-YOLOv5 改進策略,在兩個數據集上分別對每個模型進行訓練及測試。然后記錄準確率。結果見表1??梢钥闯?,本文模型在ConvNeXt 模型基礎上針對駕駛員人臉表情識別的場景相較基礎模型有所提高。由于FER2013 數據集本身圖像就很小,采用YOLOv5 對數據集圖像進行人臉識別定位的精度提升不明顯,但是在KMUFED 數據集上,因為采集圖像較大,對臉部進行定位裁剪后的方式對準確率有一個相對更加明顯的提升,并且添加了注意力機制后可以幫助整個網絡更加專注于表情分類的效果從而對準確率也有一定的提升。

表1 消融對比實驗
本文使用引入注意力機制改進后的YOLOv5 作為人臉定位器,將定位裁剪后的圖片輸入到ConvNeXt 的卷積神經網絡中進行分類的駕駛員狀態分析模型。其中YOLOv5 引入了卷積注意力機制,增強了網絡對復雜背景中目標區域的感知能力,處理后的圖片實現了減少網絡參數量和計算復雜度的目標,ConvNeXt 的卷積神經網絡改進了模型性能,提高了模型特征提取能力,提高了模型預測的準確率。在FER2013 數據集上可達到73.65%的準確率,在KMU-FED 數據集上準確率達到了97.73%,展現了本文模型具有較好的識別效果,能夠很好地完成在模擬駕駛員真實環境場景下的人臉表情識別,從而可以對駕駛員的駕駛狀態實現更好的輔助分析工作。