李文豪,周斌*,胡波,張子涵
(1中南民族大學 計算機科學學院,武漢 430074;2武漢市東信同邦信息技術(shù)有限公司,武漢 430074)
人臉檢測是一項非常重要的計算機視覺任務,是目標檢測中的一個重要分支[1].基于深度學習的目標檢測算法主要分為兩類:一類基于區(qū)域建議,一類無區(qū)域建議.基于區(qū)域建議的目標檢測算法主要有R-CNN、Fast R-CNN、Faster R-CNN等[2],這類基于區(qū)域建議的目標檢測算法分為兩個步驟,首先會基于目標生成一系列候選框,然后再由卷積神經(jīng)網(wǎng)絡(luò)分類和坐標回歸.基于區(qū)域建議的目標檢測算法準確率較高,但模型參數(shù)往往過大且實時性也較差.無區(qū)域建議的目標檢測算法主要有2016年REDMON等[3]提出的YOLOv1,將候選框生成過程和分類回歸結(jié)合在一起,大大降低了神經(jīng)網(wǎng)絡(luò)的計算復雜度,但是相較于基于區(qū)域建議的兩階段法在準確率上較低.2017年REDMON等又提出了YOLOv2和YOLOv3算法[4],通過加入先驗框,在保證模型推理速度的同時提高了準確率.2020年ALEXEY等人在YOLOv3的基礎(chǔ)上引入空間金字塔結(jié)構(gòu)(SPP)、跨階段殘差結(jié)構(gòu)(CSP)等模塊提出了YOLOv4,在平均精度均值(mAP)上提升了10%,在檢測速度FPS上提升了12%[5].
這些主流的目標檢測算法往往需要高算力設(shè)備,但移動設(shè)備以及嵌入式設(shè)備在算力上無法支撐起這類復雜模型,為了設(shè)計出能更好滿足不同算力設(shè)備的高準確率和實時性高的目標檢測器,模型縮放技術(shù)十分重要[5].最直接的模型縮放技術(shù)是改變骨干特征提取網(wǎng)絡(luò)的深度和卷積層中卷積核的個數(shù),然后訓練出適合于不同設(shè)備的骨干網(wǎng)絡(luò).例如,在ResNet系列網(wǎng)絡(luò)中,ResNet-152和ResNet-101通常部署在云服務GPU這種超高算力的設(shè)備上,而ResNet-50和ResNet-34通常部署在個人GPU上,低端的嵌入式設(shè)備通常采用的是ResNet-18和ResNet-10.高陽等人利用多層特征融合使得Faster R-CNN檢測精度提升了2.2%[5].鞠默然等人在YOLOv3的基礎(chǔ)上將經(jīng)過8倍下采樣的特征層通過上采樣連接到4倍下采樣特征層,加強模型淺層特征對目標的檢測能力[7].邵偉平等人為了實現(xiàn)網(wǎng)絡(luò)輕量化,將YOLOv3網(wǎng)絡(luò)的主干特征提取網(wǎng)絡(luò)替換成Mobilenet,使得模型參數(shù)大小降低了90%[8].
近年來,一些精巧設(shè)計的網(wǎng)絡(luò)模型和算子被提出.HOWARD等設(shè)計出MobileNets,將卷積神經(jīng)網(wǎng)絡(luò)中的普通卷積替換為深度可分離卷積,大大降低了計算量和參數(shù)量[9].WANG等人提出了一種新的上采樣算子CARAFE,相較于傳統(tǒng)以插值為基礎(chǔ)的上采樣擁有更大的感受野,CARAFE算子使每個像素點能夠更好地利用周圍的信息[10].CARAFE上采樣核基于輸入內(nèi)容上采樣,這使得上采樣核和特征圖的語義信息相關(guān).CARAFE不會引入過多的參數(shù),也不會帶來多余的計算量,模型實現(xiàn)更加輕量化.
2017年LIN等人提出了特征金字塔網(wǎng)絡(luò)FPN(Feature Pyramid Networks),通過將高語義信息的深層特征圖通過上采樣然后再橫向連接到高分辨率低語義的淺層特征圖上,加強了模型淺層特征對目標檢測的能力[11].但FPN采用的是基于最近鄰插值法的上采樣,這樣會導致每個像素點無法很好地使用周圍像素點的信息.MISTRA在2019年提出了Mish激活函數(shù),計算量較LeakyRelu有略微增加,但是在最終精度上比LeakyRelu激活函數(shù)提升了1.671%[12].
綜合考慮計算量、參數(shù)量和模型推理速度,本文在YOLOv4-Tiny的基礎(chǔ)上提出YOLO-SD-Tiny,YOLO-SD-Tiny在主干特征提取網(wǎng)絡(luò)上將第五部分CSP-Body替換成基于Mish激活函數(shù)的MCSP-body,將第六部分CBL替換成CBM,使得信息可以更好地深入神經(jīng)網(wǎng)絡(luò).在特征金字塔網(wǎng)絡(luò)中將基于最近鄰插值的上采樣替換成基于CARAFE提出的SD(Self-DeConvolution),讓每個像素點可以更好地利用周圍信息,并且減少計算量和參數(shù)量.最終實驗結(jié)果表明,YOLO-SD-Tiny相較于YOLOv4-Tiny在遮擋人臉數(shù)據(jù)集OccludeFace上檢測速度提升了9.64%,AP提升了4.89%,在準確率和實時性上有一定提升,可以更好地部署于算力較低的設(shè)備中,具有工程應用價值.
YOLO-SD-Tiny模型圖見圖1.由圖1可見YOLO-SD-Tiny由主干特征提取網(wǎng)絡(luò)、FPN特征金字塔網(wǎng)絡(luò)和YOLO Head三部分組成.主干特征提取網(wǎng)絡(luò)用來提取信息;FPN特征金字塔網(wǎng)絡(luò)將深層特征圖上采樣然后橫向連接到淺層特征層,增強淺層目標檢測能力;YOLO Head部分用來預測.
圖1 YOLO-SD-Tiny網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 YOLO-SD-Tiny Network structure diagram
FPN也就是特征金字塔網(wǎng)絡(luò),是一種自上而下的特征融合方法[11].特征金字塔網(wǎng)絡(luò)采用的是自上而下的簡單融合,也就是將更抽象,語義更強的高層特征圖上采樣,將上采樣得到的特征圖通過橫向連接至前一層特征圖.在將高層特征融合到淺層特征之后可以幫助淺層特征更好地檢測目標.傳統(tǒng)的上采樣是基于插值法,插值法無法利用特征圖語義信息,且感受野也很小.本文在CARAFE的基礎(chǔ)上提出Self-DeConvolution,簡稱SD.SD分為兩個模塊,第一個模塊是上采樣核預測模塊,第二個模塊是特征遍歷模塊.對于形狀為H×W×C的特征輸入圖F,給定整數(shù)上采樣率為σ,SD之后會得到一個形狀為σH×σW×C新的特征圖.對于輸出特征圖中的某一個點lt=(xt,yt),在輸入特征圖F中都可以找到一個點l=(x,y)與之相對應,其中x=將l的鄰域記為N(Fl,k).
上采樣核預測模塊中,首先通過1×1卷積將通道數(shù)壓縮到Cr.接下來通過卷積φ為lt基于輸入特征圖F預測一個與位置信息相關(guān)的核ωlt,在此階段參數(shù)為其中kencoder=karea-1,ωlt的計算如式(1):
然后再將得到的核ωlt通過加權(quán)求和算子reshape后得到.最終通過softmax歸一化核σH×σW×karea×karea使得核權(quán)重和為1.的計算見式(2):
上采樣核預測模塊整體流程如圖2所示.
圖2 上采樣核預測流程Fig.2 Upsampling kernel prediction process
特征遍歷模塊見圖3.對于在輸出特征層(上采樣核)的點lt,將其映射回輸入特征圖對應的點l,取出以之為中心的karea×karea的區(qū)域,和預測出的該點的上采樣核做點積,得到輸出值.相同位置的不同通道共享同一個上采樣核.這樣對于特征輸入圖F中的一點l鄰域圖N(Fl,karea),在l的karea×karea區(qū)域每個像素點對輸出特征圖的貢獻不同,基于特征的內(nèi)容而不是位置的距離.這樣特征重組而來的特征圖語義可以比原始特征圖更強,因為每個像素點都可以關(guān)注來自局部區(qū)域中相關(guān)點的信息.
圖3 特征遍歷流程Fig.3 Feature traversal process
激活函數(shù)可以完成神經(jīng)元輸入到輸出的非線性變化,對神經(jīng)網(wǎng)絡(luò)的訓練有重要意義.神經(jīng)網(wǎng)絡(luò)常采用的激活函數(shù)有Sigmoid、Tanh、ReLU、LeakyReLU等[13],但它們都有一定的缺陷.以ReLU激活函數(shù)為例,當輸入為負的時候,梯度會變?yōu)榱?,從而導致梯度消失;LeakyReLU激活函數(shù)接受負值輸入時,允許輕微的負梯度,在一定程度上避免了輸入為負所帶來梯度消失的影響.Mish激活函數(shù)于2019年提出[12],Mish激活函數(shù)計算見式(3).
Mish激活函數(shù)的取值范圍為[≈-0.31,+∞].Mish激活函數(shù)與LeakyReLU激活函數(shù)曲線的對比見圖4.由圖4可見,Mish激活函數(shù)在取值范圍上允許存在輕微負值和沒有設(shè)置最大值帶來了效果更好的梯度流.神經(jīng)網(wǎng)絡(luò)的輸入在經(jīng)過平滑的激活函數(shù)映射后可以讓信息更好地深入網(wǎng)絡(luò),得到更好的準確率.
圖4 Mish和LeakyRelu的比較Fig.4 Comparison of Mish and LeakyRelu
YOLO-SD-Tiny的損失函數(shù)分為三個部分,分別為置信度損失、分類損失和邊界框回歸損失.采用CIOU損失函數(shù)來作為邊界框回歸損失[5].IOU指的是預測框和真實框的交集和并集的比值,作為邊界框回歸準確程度的衡量標準[14],IOU,CIOU計算見式(4)和式(5):
其中,B為預測框,Bgt為真實框.
其中,α為權(quán)重函數(shù),v是用來衡量邊界框的長寬比的參數(shù)見式(6):
在分類損失方面,引入GHM(gradient harmonizing mechanism)損失用來解決正負樣本不平衡的問題和特別難分的樣本(離群點)的問題[15].離群點的梯度模長d要比一般的樣本大很多,如果模型被迫去關(guān)注這些樣本,反而可能會降低模型準確率.為了同時衰減易分樣本和特別難分的樣本提出梯度密度GD(g),計算見式(7):
其中,δε(gk,g)表明在樣本1-N中,梯度模長分布在范圍內(nèi)的樣本個數(shù),lε(g)代表了區(qū)間的長度.因此梯度密度GD(g)的物理含義就是單位梯度模長g所處部分的樣本總數(shù).接下來,使用交叉熵和該樣本梯度密度的倒數(shù)作乘法就可以得到GHM損失,計算見式(8):
其中N是樣本總數(shù),公式(9)是二元交叉熵損失,p∈[0,1]是模型預測的概率,p*∈{0,1}是某個類別的真實標簽.
YOLO-SD-Tiny的損失函數(shù)在邊界框回歸損失采用CIOU損失來加快邊界框回歸速度,在分類損失采用GHM損失來解決正負樣本不平衡的問題以及特別難分的樣本(離群點)的問題.
當以416×416為輸入的時候,YOLO-SD-Tiny的整體網(wǎng)絡(luò)模型見圖1.由圖1可見,YOLO-SD-Tiny分為三個部分,主干特征提取網(wǎng)絡(luò),特征金字塔網(wǎng)絡(luò)和YOLO Head.主干特征提取網(wǎng)絡(luò)由兩個CBL、兩個CSP-Body、一個MCSP-Body和CBM構(gòu)成.CBL代表卷積(Convolution)、批量歸一化(Batch Normalization)和LeakyReLU激活函數(shù),CBM是將CBL中激活函數(shù)替換成Mish激活函數(shù).CSP-Body由三個CBL結(jié)構(gòu)和一個Maxpool組成,CSP-Body將上一層傳遞過來的特征圖劃分為兩個部分,然后通過跨階段層次結(jié)構(gòu)將它們組合起來.CSP-Body通過殘差結(jié)構(gòu)可以增強神經(jīng)網(wǎng)絡(luò)的學習能力,在保證神經(jīng)網(wǎng)絡(luò)精度不損失的同時減少內(nèi)存占用以及降低計算量[5].MCSP-Body將CSP-Body中的CBL結(jié)構(gòu)替換成基于Mish激活函數(shù)的CBM結(jié)構(gòu),使得信息更好地流入網(wǎng)絡(luò).FPN模塊采用SD上采樣,減小計算量和參數(shù)量.
YOLO-SD-Tiny目標檢測整體過程:首先需要用S×S個網(wǎng)格劃分輸入圖像,這S×S個網(wǎng)格中每個網(wǎng)格僅僅負責預測中心點落在該網(wǎng)格中的目標,并計算出3個預測框,每個預測框?qū)?+C個值;其中,C表示數(shù)據(jù)集中類別總數(shù),5表示預測邊界框中心點坐標(x,y)、預測框?qū)捀叱叽?w,h)和置信度.然后,求解網(wǎng)絡(luò)預測的類別置信度,其與目標落入網(wǎng)格的概率P(nobject)、網(wǎng)格預測第i類目標的精度P(nclass|nobject)、交并比(IOU)有關(guān),表達式見式(10):
若目標中心落入該網(wǎng)格,則P(nobject)=1,否則為0;為預測框和真實框之間的交并比.最后,使用DIOU NMS[16]篩選出得分最高的預測框作為目標檢測框,輸出特征圖分別為26×26、13×13,從而實現(xiàn)目標的定位和分類.
制作OccludeFace數(shù)據(jù)集基于WIDER FACE[17].根據(jù)人密集程度、遮擋程度、背景復雜程度選取1500張圖像,然后對采集到的數(shù)據(jù)樣本進行旋轉(zhuǎn)、拼接等數(shù)據(jù)增廣處理,最終獲得3000張圖像,隨機選取90%圖像用作訓練集,10%圖像作為測試集.
當前在目標檢測領(lǐng)域有多種性能評估指標,本文采用最為廣泛使用的準確率(Precision)和召回率(Recall)來評估模型,計算公式見式(11)、(12):
其中準確率P是用來評估預測結(jié)果的,式(11)中TP(True Positive)表示模型把正樣本正確地預測為正樣本的個數(shù),F(xiàn)P(False Positive)表示被預測為正樣本的負樣本個數(shù);召回率是用來評估樣本的,表示的是全部樣本中有多少正樣本被正確地預測了,F(xiàn)N(False Negative)表示模型把原本是正樣本的輸入預測為了負樣本.
AP表示單個類別在不同置信度閾值下Precision和Recall構(gòu)成的PR曲線與坐標所圍成的面積,綜合考慮了準確率和召回率,對單類目標檢測的識別效果評價較為全面.FPS為模型一秒可以檢測的圖像數(shù)量,F(xiàn)PS值越大說明模型的檢測速度越快.
使用Pytorch深度學習框架搭建實驗環(huán)境,通過RTX2060 6GB顯卡進行GPU加速,具體環(huán)境如表1所示.
表1 實驗環(huán)境配置單Tab.1 Experimental environment configuration sheet
遷移學習可以運用已有的知識來學習新的知識,核心問題就是找到已有知識和新知識之間的相似性.在OccludeFace數(shù)據(jù)集與PASCAL VOC2007[18]數(shù)據(jù)集之間存在著相似性,因此可以利用PSCAL VOC2007數(shù)據(jù)集先行訓練網(wǎng)絡(luò),然后將訓練好的參數(shù)通過遷移學習的方式運用到OccludeFace數(shù)據(jù)集上,這樣就可以解決OccludeFace數(shù)據(jù)集數(shù)據(jù)量較小的問題.具體做法就是將整體網(wǎng)絡(luò)通過VOC2007數(shù)據(jù)集訓練,然后在OccludeFace訓練的時候就可以凍結(jié)主干特征提取網(wǎng)絡(luò)來加快訓練速度.
設(shè)置輸入為416×416,總迭代次數(shù)total_epoch為100,凍結(jié)主干特征提取網(wǎng)絡(luò)freeze_epoch為50,凍結(jié)訓練的batch_size為4,初始學習率lr為0.001,未凍結(jié)訓練的epoch為50,batch_size為2,初始學習率lr為0.0001.YOLO-SD-Tiny和YOLOv4-Tiny訓練loss見圖5.
圖5 訓練損失比較Fig.5 Training loss comparison
將本文算法與YOLOv4-Tiny在數(shù)據(jù)集OccludeFace上做對比分析.同時對YOLO-SD-Tiny(with MCSP-Body)和YOLO-SD-Tiny(with GHM&CIOU)做消融實驗(圖6),驗證不同模塊對模型的影響,實驗結(jié)果見表2.由表2可見,引入基于Mish激活函數(shù)的MCSP-Body相較于YOLOv4-Tiny在AP上提升了0.51%,說明梯度不會消失且平滑的激活函數(shù)可以使信息更好地深入網(wǎng)絡(luò),從而提升檢測準確率.在分類損失部分引入GHM損失和在邊界框回歸部分引入CIOU損失的YOLO-SD-Tiny相較于原始的YOLOv4-Tiny模型在AP上提升了1.61%,說明綜合考慮了重疊面積、中心點和縱橫比的CIOU和解決了正負樣本不平衡和難分樣本的GHM損失可以增加模型的檢測準確率.YOLO-SD-Tiny相較于YOLOv4-Tiny在AP上提升了4.89%,檢測速度FPS上提升了9.64%.綜合表2中各種實驗數(shù)據(jù)對比,可以驗證本文所提出的改進方法可以有效提高人臉檢測精度和檢測速度(圖7).
圖7 實驗檢測結(jié)果對比Fig.7 Comparison of experimental test results
表2 實驗結(jié)果對比Tab.2 Comparison of experimental results
圖6 消融實驗結(jié)果對比Fig.6 Comparison of ablation experiment results
本文針對目標檢測模型過大而導致在低性能設(shè)備上無法部署,實時性差等問題,提出YOLO-SDTiny模型.在主干特征提取網(wǎng)絡(luò)部分引入基于Mish激活函數(shù)MCSP-Body,讓信息可以更好地流入網(wǎng)絡(luò).在特征金字塔網(wǎng)絡(luò)部分引入SD模塊來加快特征融合的速度和感受野.通過實驗結(jié)果分析可以看出,在OccludeFace數(shù)據(jù)集上本文所提出的YOLO-SDTiny相較于YOLOv4-Tiny在AP提升了4.89%,檢測速度提升了9.64%,具有一定的工程應用價值.