饒 睿,吳 劍,索會恒,胡 強,楊騰勝
(南昌航空大學信息工程學院 江西 南昌 330038)
現存的疲勞檢測有主觀檢測方法和客觀檢測方法[1]。主觀檢測法由被測者主觀判斷自己的身體狀態并記錄實驗數據。 客觀檢測法采用實驗設備提取被測者相關的特征數據,并對獲取的數據建立模型從而對疲勞程度進行評價。
傳統算法一般將方向梯度直方圖(histogram of oriented gradient, HOG)特征用于特征描述,使用支持向量機(support vector machine, SVM)分類器進行分類[2],也有將神經網絡如Fast-RNN,SSD 等用于目標檢測[3]。 本文選擇目標檢測算法YOLOv5s,對算法的部分網絡結構進行修改用于識別人臉,對檢測到的人臉部各個特征綜合判斷,受主觀影響較小,因此效果更加可靠,識別率也更高。
YOLOv5s 有4 個模塊,分別是輸入模塊、主干模塊、頸部模塊和輸出模塊。
輸入模塊:用于數據的準備工作。 模塊負責接收輸入圖像,并進行必要的預處理,例如尺寸調整、歸一化和通道轉換等,以使其適應網絡的輸入要求。
主干模塊:整個網絡的核心部分,負責將輸入的圖像逐層進行卷積和池化等操作,以實現對不同尺度特征的提取。
頸部模塊:用于進一步增強和豐富網絡提取到的特征。 頸部通過引入額外的卷積層、上采樣和下采樣操作或者特征金字塔等方法來提升網絡對多尺度特征的感知能力和目標檢測性能。
輸出模塊:負責對經過主干和頸部處理后的特征圖進行目標檢測,通常由一系列卷積層和全連接層組成,用于生成目標檢測所需的邊界框、類別置信度以及其他相關信息。
CA(coordinate attention)注意力機制關注空間特征層的空間信息和通道信息,實現原理如圖1 所示,可以看作是兩個并行階段的組合。 左邊求取的是高方向的注意力情況,右邊是寬方向上的注意力情況。 通過平均池化獲得高和寬兩個方向的特征層,將高寬特征合并到一起進行堆疊,利用卷積標準化獲得特征。 然后,再分開分別用卷積調整通道數,取sigmoid 后就可以獲得高寬這兩個維度的注意力情況。 最后,乘上原來特征,這就是CA 注意力機制的過程。

圖1 CA 注意力機制
將CA 注意力機制應用于YOLOv5,一個常見的做法是將其集成到YOLOv5 的主干網絡中,以增強網絡的表示能力。 具體來說,可以在主干網絡的某些模塊之間添加CA 注意力模塊或者替換一些現有的模塊。 本文在主干傳入頸部的P4 層和頸部傳入輸出的P14 層放置CA 注意力機制,改進后的YOLOv5s 網絡結構如圖2 所示。

圖2 改進的YOLOv5s網絡
SIoU(scylla intersection over union)是對回歸框有強大學習能力的損失函數,由4 個損失函數組成,即角度損失(angle cost,Ω)、距離損失(distance cost,Δ)、形狀損失(shape cost) 和IoU 損失(IoU loss),該損失函數將角度考慮進來,表達式如式(1)所示:
Kazemi 等[4]提出基于回歸樹集合(ensemble of regression trees, ERT)的人臉關鍵點定位算法。 將68 個點的映射對于面部坐標,每個點用線性索引表示,各個部位可以用固定的取值區間表示,分別為:嘴巴[48,67]、右眉毛[17,21]、左眉毛[22,26] 、右眼[36,41]、左眼[42,47],鼻子[27,35]和下巴[0,16]。 各個點位的位置如圖3 所示。

圖3 人臉關鍵點狀態圖
人眼狀態可以由眼睛長寬比(eye aspect ratio, EAR)判斷,睜開和閉合狀態的眼睛長寬比是不同的。 通過設定某個值與EAR 比較可以判斷出當前眼睛狀態。 同理可得嘴巴長寬比(mouth aspect ratio, MAR)。
已知眼部的關鍵點位置后可以利用歐式距離計算EAR。 歐式距離的計算公式如式(2)所示,P為點(x2,y2)與(x1,y1)之間的歐式距離。
對應于圖3 的關鍵點位置,眼部標注點可以通過式(3)計算左眼EARl,通過式(4)計算右眼EARr,二者取平均得到EAR,如式(5)所示。
同樣,可以利用歐式距離計算嘴巴的長寬比MAR,如式(6)所示。
頭部特征可以通過計算頭部的歐拉角來確定,包括俯仰角(pitch)、滾轉角(roll)和偏航角(yaw)。 視頻中的每一幀圖像都是二維的,通過圖像可以獲取人臉二維的特征點位置,然后經矩陣變換可得到三維數據,由此可以對當前圖像中的人體頭部狀態進行姿態估計。
PERCLOS(percentage of eyelid closure over the pupil over time)是疲勞判定的重要指標,原理是通過計算一段時間的眼睛閉合時間所占比例判斷疲勞狀態,眼睛閉合程度分別超過50%、70%、80%時判定人眼為閉合狀態,P80標準被證明與疲勞程度的相關性最好,因此選擇P80 標準判斷被測者是否疲勞。
由圖4 可得到PERCLOS 值的計算公式,如式(7)所示。

圖4 人眼睜開程度示意圖
通過計算一段連續視頻中的閉眼狀態的單幀圖像數K與有效圖像的總幀數N計算PERCLOS 值,計算公式如式(8)所示。
人臉檢測選擇WIDERFACE 數據集[5]作為基準數據集。 該數據集每張圖像平均包含24.45 張人臉,包括不同的光照條件、姿態變化、遮擋等。 為了滿足實際更多場景的需求,本文利用標注工具LabelImg 自制了數據集,通過使用這兩個數據集進行實驗能夠更真實地評估人臉檢測器的性能。
實驗結果如表1 所示。 經過訓練,YOLOv5s 算法的平均精確度(mAP)達到了72.6%。 對網絡進行改進后,雖然實時檢測的Fps 略有降低,但是模型的mAP 提升了3.1%。 通過改進網絡架構、優化算法或采用更有效的訓練策略,可以提高模型在目標檢測任務上的性能。 網絡改進使得模型在mAP 上獲得了顯著的提升,通過權衡準確度和速度,可以選擇適合具體應用場景的模型版本。

表1 算法測試結果
分析每一幀圖像,獲取人臉關鍵點數據并用于EAR、MAR 的計算和頭部姿態檢測。 一段檢測結束后統計PERCLOS 值、眨眼次數、哈欠次數、點頭次數以及各自持續的時間。 人疲勞時眼部特征最為明顯,所以先根據PERCLOS 值進行疲勞判斷。 當PERCLOS 值>0.3 時,判定為疲勞狀態并發出警告。 哈欠以及點頭作為輔助的判斷依據。 在一段檢測過程中,當動作次數或持續時間超過設定的閾值后,判定為重度疲勞狀態并產生警告。 若檢測結果通過了判定條件則判定當前為清醒狀態,重復判定過程直到視頻輸入結束。 算法檢測效果如圖5 所示(圖片中人臉是本文作者饒睿參與實驗所得)。

圖5 疲勞檢測效果
將YawDD 數據集[6]用于測試算法模型。 數據集給出的表格列出了不同視頻中的被測者狀態。 通過這個數據集可以有效測試算法準確率,評估算法性能。 將數據集中的50 段視頻用于算法準確性測試,測試結果如表2 所示,對于疲勞狀態的30 個視頻中28 個判定正確,準確率達到了93.3%,對于清醒狀態的20 個視頻中19 個判定正確,準確率達到了95.0%。 清醒狀態下的檢測準確率較低是因為誤把被測者說話的狀態判定為哈欠,算法總體準確率達到了94.0%。

表2 算法測試結果
本文實現了基于特征融合的疲勞檢測算法。 首先,使用改進的YOLOV5s 算法檢測人臉。 然后,利用回歸樹算法對齊人臉的68 個關鍵點,提取人臉關鍵點位置信息,并通過橫縱比判斷眼部和嘴部特征狀態。 同時,將二維坐標的關鍵點信息與真實世界的坐標相對應,計算頭部運動的歐拉角以判斷頭部姿態。 將這3 種狀態特征融合起來,判斷被測者疲勞狀態。 算法在測試集上的準確率達到94%。需要注意的是,算法首先要實現人臉檢測,只有檢測到人臉之后才能進行下一步的疲勞判定。 因此,在人臉檢測階段需要有較高的準確性。 未來的改進方向可以包括提高人臉檢測的準確率或者改進算法的疲勞判定條件。