周 晏,岳帥飛,韓 毅
(安陽工學院,河南 安陽 45500)
隨著社會經濟的不斷發展,中國的城鎮化擴大與人口流動頻率的增加使得公交交通的使用量逐漸提升。為了提高公交交通的運力效率,增加高峰期時人們的出行效率,就需要對公交車各時段的人流量進行統計,為公交調度提供參考,并通過定期的數據對比,來掌握人們的出行頻率,從而提升公交車的運力調度,方便人們的出行。
針對該問題, 本文設計了一種基于RetinaFace 的公交車客流量統計方法,本系統通過車內攝像頭進行乘客人臉圖像的采集,傳入終端設備進行實時分析,采用RetinaFace 算法進行目標檢測,對圖像人臉特征提取與分析,從而達到人數統計的目的。
由于乘客在車內位置分布呈現一定的隨機性,視頻圖像中面部信息呈現不同的尺度。如何解決復雜環境下的多尺度、小目標面部特征準確檢測,是實現車內人數實時統計的關鍵。本文介紹了一種基于自然條件下的精確、高效的人臉檢測方法,并給出了其原理圖。基于該算法,我們將研究一種新型的基于外向、自監督的多任務學習算法。RetinaFace 算法(圖1)可以在不同尺度上對人臉進行像素級別的定位[1-3]。

圖1 RetinaFace 示意圖
RetinaFace 是由Google 推出的Mobilent 輕量級骨干網絡,該網絡具有較高的檢測精度和檢測速度,特別適用于監控場景下的多尺度面部目標檢測。針對本文應用場景,本文擬采用可分離的深度卷積技術,構建一個基于流線型結構的輕量級深度學習網絡,對于深度可分卷積格式,所用的參數化格式較少。
在RetinaFace 算法網絡結構中,包含特征金字塔與殘差網絡模塊,網絡結構圖如圖2 所示。其中對于C2 到C5 級的殘差網絡模塊,分別對應特征金字塔中的P2 到P5,而在P6 級中,它為對應C5 的特征圖進行卷積步長為2,卷積核大小為3×3 的卷積,通過計算后得到特征圖。另外,特征金字塔中,每一層都采用了單獨的語義模塊,用來增強在剛性語境中的建模能力,改善接受域。模塊,用來增強在剛性語境中的建模能力,改善接受域。

圖2 RetinaFace 算法網絡結構
FPN(Feature pyramid network)特征金字塔網絡通過1×1 卷積后的通道數調整和上采樣+特征融合來進行特征加強提取,從而使主干網絡的輸出特征層加強提取。
SSH(Single Stage Headless)網絡在特征層上進一步增強了特征抽取能力。SSH 采用3 種平行的卷積:一種是3×3 卷積,另一種是用2 次3×3 卷積來替代5×5 卷積,最后一種是用3 次3×3 卷積來替代5×5 卷積。
采用ClassHead、BoxHead、LandmarkHead 網絡對圖像進行特征提取,得到預測結果。在此基礎上,先采用decode 解碼,再利用NMS 非極大抑制方法消除多個目標的重檢值,最終得到一個特征輸出的拼接值。
對于為了提升模型的魯棒性,針對視頻噪聲影響下的小目標面部檢測問題,采用基于WiderFace 的面孔數據,在特征金字塔中會生成錨點框,并對錨點框進行的比例逐步增加大小,長寬比設為相同,同時,逐漸增加錨點框的比重,以適應圖像中多尺度的面部信息。
首先,采用Mobilenet 抽取骨干特征網絡,利用FPN 和SSH 實現增強的特征抽取。
其次,分別采用ClassHead、BoxHead、LandmarkHead 網絡3 種不同的分類網絡來對樣本進行分類,從特征得到相應的預測結果。
最后,對預測的結果進行解碼。采用NMS 非極大值抑制方法消除重復檢測,得到最后的檢驗結果。
具體流程圖如圖3 所示。

圖3 算法流程圖
通過對采集到的圖像進行卷積計算,獲取到圖像的3 個特征圖。對于該圖的長和寬將其設置為33,對于深度,輸入圖片的通道數為16,需要656 個卷積核,因為選擇的是常規的33 卷積核,所以參數量為108。卷積示意圖如圖4 所示。

圖4 卷積示意圖
深度可分卷積算法是由谷歌的深度學習算法(深度學習可分變換)[4]提出來的一個新算法。與傳統的卷積不同,它可以分為2種類型,一種是提逐深寬卷積,一種是逐點卷積。
圖5 為深度可分離卷積的實現過程。

圖5 深度可分離卷積實現過程
一般情況下,在準備好建模的時候,首先要將卷積group 設定成in_filters 層,從而實現深度可分離卷積,然后再使用1×1 卷積來調整Channels 數。
RetinaFace 加強特征提取采用了1 個FPN 架構,該架構示意圖如圖6 所示。該架構是針對Mobilenet 最后3 個shape 的1 個有效的特征層而設計的[5]。

圖6 FPN 特征金字塔示意圖
FPN 構造方法就是先用1×1 卷積來調節3個有效特征層的信道數目。在此基礎上,采用Upsample 與Add 兩種方法對上述采樣點進行特征融合。
然后對P3、P4 和P5 進行進一步的計算。在RetinaFace 的基礎上,利用SSH 模組對其進行強化,以增強特征抽取的結果。SSH 的結構示意圖如圖7 所示。

圖7 SSH 結構示意圖
S S H 就是用3×3 卷積的堆疊來取代5×5 和7×7 卷積的效果:左邊代表3×3卷積,中間用2 次3×3 卷積代替5×5 卷積, 而右邊用3次3×3 卷積代替7×7卷積。
圖8 為RetinaFace 的網絡結構圖。

圖8 RetinaFace 網絡結構圖
通過卷積的計算與加強特征提取,可以獲得SSH1、SSH2、SHH3 三個有效特征層,并通過這3 個有效特征層獲得預測結果[6]。
在RetinaFace 算法中,先使用softmax 分類器對先驗框內部是否包含物體進行預測,以此來判斷先驗框是否存在物體。再根據回歸預測的結果調整先驗框,得到1 個預測框;利用回歸預測結果對先前設定的框進行調整,以獲取人臉關鍵點的精確位置,每個關鍵點都需要1 個水平和垂直坐標。 需要調整的參數有5 個,用于定位5 個人臉關鍵點。我們可以使用1 個1×1 的卷積來改變SSH 通道的數量,這樣做的效果與調整其他參數相似,調整每個人臉關鍵點的先驗框數量。
獲取預測結果后,可以獲得3 個有效特征層SSH1、SSH2、SSH3。
對于這3 個有效的特征層來說,當我們輸入的圖像為(640, 640, 3)時,它等同于把整個圖像分成不同尺寸的網格。SSH1 的Shape 值為(80,80, 64);SSH2 的Shape 值為(40, 40, 64);SSH3 的Shape 值為(20, 20, 64)。
SSH1 意味著原始圖像被分成80×80 的網絡小格;而SSH2 則表示原始圖像被分成40×40 的網絡小格;SSH3 表示原始圖像被分成20×20 的網絡小格,每一個網絡小格都有2 個先驗框,每一個先驗框都表示一個特定的面積。
最后,利用RetinaFace 算法對先驗框中的人臉進行識別,并通過修改先驗框中的人臉特征值,得到具有人臉特征值的預測框。
(1)分類預測的結果,會用來判斷先驗框中的對象有沒有被檢測到,可以去使用一個1×1 的卷積,將SSH 中的通道數目調節為num_anchors×2,表示人臉在每一個先驗框中的概率。
(2)此時用1×1 的卷積,在 SSH 中調整通道的數量為num_anchor×4,調整后的參量代表每個先驗框。每個框有4 個調整參量,前2 個參量用來調整框中心,后2 個參量用來調整框的長寬。
(3)利用回歸預測的結果調整先驗框來獲得人臉的特征值,對表示各先驗框的各面部關鍵點進行調整,利用2 個調節參數來調節先驗框中心的x、y 軸,從而得到人臉特征點的坐標。
調整、判斷完畢之后,做非最大值的遷移,在某一片的區域中,選擇同一種類型的框,獲得最高分數。最初的37 840 次預測被減少到49 次,使用了非極大抑制。
對于訓練的基本思想,是通過對大量樣本的學習,得到反饋。對于弱分類器,它會在不知道先前的訓練誤差的情況下,自動地調整其權重和錯誤率,直到它達到早期所需的性能。
對于訓練系統總框架來說[7],首先要輸入樣本集,在給定的矩陣特征原型下,通過計算獲得矩陣特集合的特征,然后再輸入特集合,使用所給的學習算法去確定閾值,再與弱分類器相對應,最終得到弱分類器集,并將其作為輸入。以檢測率與錯誤率為限制條件,選擇最佳的弱分類器,并對其進行合成得到的強分類器。當輸入了1 個強分類器后,這個分類被叫做1 個級聯分類,這個分類是根據一組非人臉的圖像,對那些不是人臉的圖像進行分類和填充。

圖9 訓練系統框架
在處理真實框的時候,首先要計算全部真實框與全部先驗框的符合程度,并將先驗框的 IOU 與真實框展開比較,大于0.35 的先驗框被認為可以用來預測得到真實框。接下來,我們會對那些與現實框更為相近的框進行編碼。最后,將實際圖像和相應圖像的預測結果結合起來,得到相應的loss 值。在loss 計算方面[8],首先對具有全部正性標記的框進行回歸(Box Smooth Loss),然后對各種類型的預測結果進行交叉熵(MultiBox Loss),最終對具有全部正性標記的人臉關鍵點進行回歸(Lamdmark Smooth Loss)。此外,在訓練過程中,還需要減少負樣本的選取,本次實驗選擇7 倍正樣本數量的負樣本來進行訓練。
在系統的實際應用方面,選用當下熱門的視頻監控計數技術,采用攝像頭等硬件搭配該人臉識別統計計數系統等軟件,在公共汽車內配備攝像頭來捕捉人臉圖片,將圖片上傳到終端由本次設計的系統進行人臉框的捕捉與統計,即可大致計算出當日公交車各個時間段實時客流量,方便公共汽車的調度,提升人們的出行效率。
利用Wider-Face 人臉評估數據集,進行數據采集標注9 600 張圖,得到1 206 張人臉,將數據隨機劃分為訓練集驗證集與測試集,分別為40%、10% 與50%,并進行關鍵點的標注。
本文算法在Windows10 操作系統下運行,基于PyTorch 深度學習框架,使用Python3.8 進行編程。機器硬件參數部分:CPU 為lntelR CoreTM i5-10200H CPU @ 2.40 GHz,GPU 為NVIDIA GeForce GTX 1650 4 GB。
對于數據處理而言,除了需要考慮數據處理、默認框生成與網絡結構這幾個方面,還需要考慮損失函數與性能的評估。對于損失函數的計算,可以先利用match 函數來保存真實框和先驗框的IOU 值,排列匹配每個真實框的最優默認框,進行for 循環真實框的匹配,最終得到所需要的目標回歸值。
對于每一個訓練樣本,需要將原圖進行裁剪,并將圖像縮小或者擴大到統一規格,從而產生更多的人臉圖像,提高模型的魯棒性。
首先是得到該算法在測試數據集上的準確率與召回率曲線圖(圖10)。

圖10 準確率與召回率曲線
其次是對于人臉不同情況下圖片的實時檢測情況。首先是對于單人臉檢測(無遮擋)情況,通過圖11a 可以看出,當所給圖像僅出現一個人的臉,而且面部清晰無遮擋,通過RetinaFace 可以很好地檢測出圖像中的人臉給出人臉框,說明對于圖像狀況良好的單人臉檢測,RetinaFace 具有很好的檢測結果。

圖11 人臉測試結果
然后進行測試單人正臉有遮擋的情況,看是否會出現誤檢或者漏檢的情況。當面部戴有口罩的時候,依然準確識別出了人臉的位置,說明對于口罩遮擋的人臉檢測具有良好的檢測結果。當面部戴有墨鏡與口罩時(圖11c),雖然人臉被遮擋的面積很大,但仍然能識別人臉的位置,這說明該算法對具有較大遮擋的人臉仍然具有良好的檢測效果。當檢測的圖像有其他動物的干擾時(圖11e),該系統的表現依然優異。
之后對于多目標人臉檢測,圖11d 中有8 個人,并且中間的人因為距離較遠而較為模糊,但該算法仍能精確地檢測出圖像中的目標人臉,檢測結果比較好。
最后是公交車實時環境下的人臉計數(圖12)。
在針對遮擋物嚴重的情況下,我們可以考慮引入更多的模態信息來解決遮擋問題,例如體溫識別或者語音識別等技術來增加識別的準確率。同時,可以升級硬件設備,加強識別的能力。最后就是通過使用規范提醒比如識別時不能帶口罩等規范行為來減少遮擋物的頻繁發生。
對RetinaFace 算法進行進一步的改進與創新,比如提升它的魯棒性,替換當前所用的移動網絡,提出一種新的注意力機制模塊,比如HECA,與上述算法所使用的MobilNet 相比,在幾乎不提高參數的情況下提升了計算量,檢測效果大大提升。
在提升困難檢測的圖片時,加上注意力機制模塊-HECA 作為主干網絡[9-10],在Easy(Average Precision,AP)子集上的平均精確值也有明顯的提高,再引入可形變卷積(Deformable Convolutional Networks,DCN)。用DCN 替換上文模塊中所有的3×3 卷積,增強幾何變換建模的能力,增強模型的適應性。模型根據實際情況的不同,更換不同量級的主干網絡,從而適應不同的檢測任務,推廣到不同的領域中。
綜上所述,該算法網絡選用輕量級主干網絡,經過進一步的改進與優化能達到很好的檢測效果。
本文基于對公交車客流量統計方法的研究,提出了一種基于RetinaFace 的人臉檢測算法。該算法不僅能夠輸出人臉框的位置,在有遮擋物或者實時環境因素的干擾下也有不俗的表現,從而有效提高統計公交車客流量的效率,減少了安全隱患,并方便公交車調度,有利于乘客的高效出行。對于下一步的研究與改進,可以對數據集中進行更為細致的劃分,增加人臉年齡、性別與角度等因素的標簽,對人臉檢測識別所輸出的效果進行更加良好的優化。
在實際環境因素的影響下,在此后針對100組圖片的檢測結果反映,人臉框的準確率幾乎達到了100%。在針對單人臉是否有無遮擋以及遮擋程度的不同、多目標的人臉檢測和動物干擾下的各種情況進行分析對比,并且進行人臉檢測。通過檢測的結果可以看出,RetinaFace 人臉檢測算法在不同的條件下,在圖像背景的復雜情況、人臉的表情姿態不同以及其他因素的干擾下,都具有良好的檢測效率與正確率,能達到滿足有效人臉檢測的要求。