劉紫燕,袁 磊,朱明成,馬珊珊
(貴州大學(xué)大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽 550025)
近年來深度學(xué)習(xí)技術(shù)在計算機視覺領(lǐng)域取得突破性進(jìn)展,基于卷積神經(jīng)網(wǎng)絡(luò)CNN(Convolutional Neural Network)的目標(biāo)檢測方法被廣泛應(yīng)用于軍事、醫(yī)學(xué)、農(nóng)業(yè)和民用等領(lǐng)域,如艦船檢測[1]、醫(yī)學(xué)圖像檢測[2]、遙感圖像檢測[3]和水下目標(biāo)檢測[4]等。隨著神經(jīng)網(wǎng)絡(luò)的檢測精度(mAP)不斷提高和網(wǎng)絡(luò)結(jié)構(gòu)愈加復(fù)雜,搭建網(wǎng)絡(luò)模型所需要的計算量和存儲資源也愈發(fā)龐大。在實際場景中部署的設(shè)備無法滿足模型所需的大量算力、內(nèi)存和能耗。因此,本文通過研究相關(guān)的目標(biāo)檢測算法和模型剪枝算法,針對實際場景中的目標(biāo)檢測算法構(gòu)建,提出一種融合通道和層剪枝的模型剪枝方法,以YOLOv4目標(biāo)檢測算法作為初始模型在口罩人臉數(shù)據(jù)集上進(jìn)行剪枝,并將剪枝后的模型與原模型以及YOLOv4的輕量化模型YOLOv4-tiny進(jìn)行對比實驗。本文主要貢獻(xiàn)如下:
(1)構(gòu)建用于人臉口罩檢測的數(shù)據(jù)集,能更好地檢測口罩佩戴不完全的情況。
(2)提出一種融合通道和層剪枝的模型剪枝方法,可以顯著減少模型的參數(shù)量,便于實時部署。
(3)使用本文所提方法在構(gòu)建的人臉口罩檢測數(shù)據(jù)集上對YOLOv4網(wǎng)絡(luò)進(jìn)行訓(xùn)練和剪枝。實驗結(jié)果表明,使用本文剪枝方法得到的模型在精度下降較少的情況下,較大程度減少了模型參數(shù)。同時,極限剪枝后的模型在參數(shù)量少于YOLOv4-tiny的情況下,其檢測精度遠(yuǎn)遠(yuǎn)超過YOLOv4-tiny的。
為了解決實際場景中口罩人臉檢測算法的部署問題,本文采用模型剪枝方法壓縮目標(biāo)檢測模型,本文涉及目標(biāo)檢測技術(shù)和模型剪枝技術(shù)。
目標(biāo)檢測是卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用的重點領(lǐng)域,基于深度學(xué)習(xí)的目標(biāo)檢測按照是否需要生成候選區(qū)域可以分為兩階段目標(biāo)檢測和單階段目標(biāo)檢測。兩階段目標(biāo)檢測,如Faster R-CNN[5]采用RPN(Region Proposal Network)結(jié)構(gòu),通過生成候選區(qū)域和預(yù)測2個階段獲得了較高的檢測精度;CBNet(novel Composite Backbone Network architecture for object detection)[6]通過合并功能強大的基礎(chǔ)網(wǎng)絡(luò)(backbone),提出復(fù)合骨干網(wǎng)絡(luò)(Composite Backbone Network),以提高目標(biāo)檢測器的性能,但其需要極為龐大的計算量。單階段目標(biāo)檢測,如SSD(Single Shot multiBox Detector)[7]采用多尺度特征圖用于檢測,提升了檢測效果和速度,但對小尺寸的目標(biāo)識別效果較差;YOLOv3(You Only Look Once v3)[8]相比YOLOv2[9]加入了殘差模塊,并且網(wǎng)絡(luò)中沒有池化層和全連接層,構(gòu)建了新的基礎(chǔ)網(wǎng)絡(luò)Darknet-53,達(dá)到了速度與精度的較好平衡。
2020年4月Bochkovskiy等[10]提出了新的單階段目標(biāo)檢測模型YOLOv4,采用基礎(chǔ)網(wǎng)絡(luò)CSPDarknet-53提取特征后,經(jīng)過SPP+PAN(Spatial Pyramid Pooling+Path Aggregation Network)模塊后,輸入檢測層,進(jìn)行3個尺度的預(yù)測,其在YOLOv3模型的基礎(chǔ)上進(jìn)行了多個方面的改進(jìn)和增強。在數(shù)據(jù)增強方面,YOLOv4采用了馬賽克(Mosaic)數(shù)據(jù)增強方法,混合4幅訓(xùn)練圖像和4個不同的上下文信息;在基礎(chǔ)網(wǎng)絡(luò)方面,YOLOv4采用CSPDarknet-53作為基礎(chǔ)網(wǎng)絡(luò),其感受野更大,檢測效果更好;在損失函數(shù)方面,YOLOv4采用CIOU Loss損失函數(shù),使網(wǎng)絡(luò)損失得到了更好的下降;同時,YOLOv4采用了Mish激活函數(shù)和DropBlock正則化來提高檢測效果,在檢測層之前加入SPP和PAN模塊,使網(wǎng)絡(luò)能更好地獲取圖像特征。這一系列方法使得YOLOv4成為了精度和速度完美平衡的目標(biāo)檢測算法。因此,本文選取YOLOv4作為口罩人臉檢測的基礎(chǔ)網(wǎng)絡(luò),其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
人工神經(jīng)網(wǎng)絡(luò)中的剪枝受啟發(fā)于人腦中的突觸修剪(Synaptic Pruning)。突觸修剪即軸突和樹突完全衰退或死亡,是許多哺乳動物幼年期和青春期的必經(jīng)過程。突觸修剪從人出生開始持續(xù)到20多歲。
Figure 1 YOLOv4 network structure
Figure 2 Sparse neural network
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖2左側(cè)部分所示,下層的每一個神經(jīng)元與上層都有連接,這意味著需要進(jìn)行大量浮點相乘操作。理想情況下,我們不需將每個神經(jīng)元與上一層中所有神經(jīng)元連接,僅需連接有用的幾個神經(jīng)元,從而減少許多浮點相乘操作,稱之為“稀疏”網(wǎng)絡(luò)。稀疏網(wǎng)絡(luò)更容易被壓縮,可以在推理期間跳過參數(shù)為0的神經(jīng)元,以改善延遲情況。若根據(jù)網(wǎng)絡(luò)中神經(jīng)元的貢獻(xiàn)對其進(jìn)行排序,則可以刪除排序較后的神經(jīng)元,得到規(guī)模更小、速度更快的網(wǎng)絡(luò),這樣的網(wǎng)絡(luò)更便于在移動設(shè)備上運行。
近年來深度學(xué)習(xí)模型剪枝技術(shù)不斷發(fā)展,Li等[11]提出了基于量級的裁剪方式,可以有效降低模型的復(fù)雜度并且不會給模型的性能帶來很大的損失;Yang等[12]提出了一種基于能量效率的裁剪方式,從能量利用率上最大限度地裁剪模型;Molchanov等[13]將裁剪問題視作組合優(yōu)化問題,優(yōu)化目標(biāo)是被裁剪模型的代價函數(shù)損失最小;盧海偉等[14]通過動態(tài)尋找冗余濾波器來獲取最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu);彭冬亮等[15]通過閾值剪枝算法,將GoogLeNet的模型參數(shù)量壓縮為原有參數(shù)量的1/16;孫彥麗等[16]提出通過同時優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和參數(shù)對卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮,使網(wǎng)絡(luò)模型尺寸變??;陳程軍等[17]提出基于激活-熵的分層迭代剪枝AE-LIP(Activation Entropy based Layer-wise Iterative Pruning)策略,在保證模型精度在可控范圍內(nèi)的同時減少模型的參數(shù)量;在SlimYOLOv3[18]中,將YOLOv3-SPP作為基礎(chǔ)網(wǎng)絡(luò)進(jìn)行稀疏訓(xùn)練和通道剪枝,YOLOv3中每個卷積層后的批量標(biāo)準(zhǔn)化層起到加速模型收斂、提高泛化能力的作用,批量標(biāo)準(zhǔn)化公式如式(1)所示:
(1)
稀疏訓(xùn)練的損失函數(shù)如式(2)所示:
(2)
其中,lossyolo為YOLOv4網(wǎng)絡(luò)反饋損失,α為權(quán)重系數(shù),Γ代表本次訓(xùn)練的所有通道,f(γ)=|γ|是懲罰因子,用來平衡2個損失,本文設(shè)置為0.000 1。
π=μλ+ν
(3)
其中,μ是自適應(yīng)率,用于調(diào)整λ在局部安全閾值中所占的比率;ν是最低局部安全閾值,用于防止過度剪枝。通過這種方法,網(wǎng)絡(luò)能夠自適應(yīng)調(diào)整各層的局部安全閾值π,在剪去網(wǎng)絡(luò)中更多無用通道的同時保留一定的安全通道,防止過度剪枝。
為了進(jìn)一步壓縮模型,本文還采用了層剪枝策略。YOLOv4由多個殘差模塊組成,而每個殘差模塊由2個CBM(Convolution,Batch normalization and Mish)模塊和1個殘差連接組成,如圖3所示。
Figure 3 Residual module and CBM module
每個CBM模塊由卷積層CONV、正則化BN和激活函數(shù)Mish組成,如果殘差模塊內(nèi)僅有1個卷積層被剪去,則會破壞網(wǎng)絡(luò)中殘差結(jié)構(gòu)的完整性。在前述通道剪枝的基礎(chǔ)上,本文結(jié)合γ值進(jìn)行層剪枝,對每個殘差模塊中的CBM模塊進(jìn)行評價得到各層的γ均值,然后根據(jù)各層的γ均值計算每個殘差模塊的γ均值并對其進(jìn)行排序,然后取γ均值最小的殘差模塊進(jìn)行剪枝,這里只考慮剪掉主干中的殘差模塊。
在實際的應(yīng)用場景中,僅從通道剪枝或?qū)蛹糁σ粋€方面對模型進(jìn)行壓縮,往往無法最大程度地壓縮模型中的無用信息,確保模型以最小的參數(shù)量和計算量獲得最高的檢測性價比,因此本文將融合改進(jìn)的通道和層剪枝,以盡可能地壓縮模型,使模型更便于在實際場景中部署。
融合通道和層模型剪枝的剪枝流程如圖4所示,首先對網(wǎng)絡(luò)進(jìn)行稀疏化訓(xùn)練,以獲得對應(yīng)的尺度因子,然后利用改進(jìn)的Slim通道剪枝得到剪枝后的模型,再判定該模型中的每一層是否需要層剪枝,得到最終剪枝后的模型。同時,由于剪枝后的模型檢測精度下降較多,本文采用知識蒸餾的方法,利用訓(xùn)練好的精度較高、參數(shù)較多的大模型指導(dǎo)剪枝后的小模型進(jìn)行再訓(xùn)練微調(diào),提高剪枝后的模型的檢測精度,最終得到參數(shù)和計算量更小、更利于實際部署的模型。
Figure 4 Pruning process
本文從 WIDER FACE人臉數(shù)據(jù)集[19]中隨機抽取 3 800 幅人臉圖像,從MAFA數(shù)據(jù)集[20]中抽取4 000幅人臉戴口罩的圖像,對這些圖像進(jìn)行重新標(biāo)注和預(yù)處理,組成共7 800幅圖像的口罩人臉數(shù)據(jù)集。
本文在數(shù)據(jù)集構(gòu)建過程中發(fā)現(xiàn),部分人臉口罩佩戴不完全,或者遮擋的人臉會被誤檢為帶口罩的人臉,如圖5a和圖5b中的口罩佩戴不完全;圖5c和圖5d中未佩戴口罩,但是因為人臉被遮擋被誤識別為佩戴口罩。
Figure 5 Erroneous detection of images
因此,本文隨機從已抽取的人臉數(shù)據(jù)集中抽取1 000幅圖像,通過讀取標(biāo)注的人臉坐標(biāo),在其人臉框內(nèi)添加不同顏色的遮擋,如圖6所示,并將這1 000幅處理過的圖像加入數(shù)據(jù)集中,重新劃分這個數(shù)據(jù)集,隨機抽取6 000幅圖像組成訓(xùn)練集,2 800幅圖像組成測試集。
Figure 6 Augmented images
為了使檢測的預(yù)設(shè)框?qū)θ四樋谡謾z測數(shù)據(jù)集的檢測精度更高,本文首先采用K-means聚類算法對訓(xùn)練集中的標(biāo)簽進(jìn)行聚類,得出最適合本文數(shù)據(jù)集的9個預(yù)設(shè)框尺寸,分別為(7,9),(13,17),(21,27),(32,43),(50,65),(70,98),(105,139),(142,185)和(185,256)。然后進(jìn)行常規(guī)訓(xùn)練,設(shè)置總訓(xùn)練批次epoch為300,采用余弦退火的學(xué)習(xí)率下降方式,使模型更好地學(xué)習(xí)數(shù)據(jù)集,達(dá)到更高的檢測精度。
在常規(guī)訓(xùn)練得到模型的最終權(quán)重模型后,將權(quán)重輸入模型中進(jìn)行稀疏化訓(xùn)練,設(shè)置尺度稀疏率為0.002,同樣進(jìn)行300批次稀疏化訓(xùn)練,聚合模型中的參數(shù),使模型便于剪枝。
對訓(xùn)練完成后的模型進(jìn)行通道剪枝,設(shè)置全局通道修剪百分比分別為0.5,0.6,0.7,0.8,每個卷積層通道保持百分比為10%,保證模型在剪枝的同時不會過度修剪。然后進(jìn)行層剪枝,對每一個殘差模塊進(jìn)行綜合評價,設(shè)置剪掉的殘差結(jié)構(gòu)為4,8,12,16,20個。
最后微調(diào)剪枝后的模型,采用知識蒸餾的方法重新訓(xùn)練剪枝后的模型,設(shè)置訓(xùn)練總批次為100,提升模型的檢測精度。
通道剪枝時分別設(shè)置全局通道修剪百分比為0.5,0.6,0.7,0.8,輸入圖像尺寸為416×416,分別測試4種通道剪枝后的模型以找到最好的通道剪枝。由于經(jīng)稀疏化訓(xùn)練后的模型的檢測精度會下降,而模型剪枝是在稀疏化模型的基礎(chǔ)上進(jìn)行的,因此本文以稀疏化模型YOLOv4作為對比模型。測試結(jié)果如表1所示,模型1(Prune-0.5)剪枝率最低,參數(shù)量仍舊較大;模型2(Prune-0.6)的檢測精度下降較少;模型3(Prune-0.7)和模型4(Prune-0.8)的檢測精度下降太多,表明剪枝率過高,丟失了模型中的部分重要信息。模型2的檢測精度下降較少,同時其模型的GFLOPS、參數(shù)量和模型大小都較小。根據(jù)4個模型的檢測結(jié)果可知,在通道剪枝率設(shè)置為0.6~0.7時,模型檢測精度下滑很大。這說明針對本文所用口罩?jǐn)?shù)據(jù)集和模型,在通道剪枝率為0.7時剪去了部分對口罩檢測十分重要的通道,造成模型檢測精度的嚴(yán)重下降。而在通道剪枝率為0.6時,模型檢測精度下降不多,經(jīng)過再訓(xùn)練可以恢復(fù)精度,故本文選擇模型2(Prune-0.6)作為通道剪枝后的模型。
Table 1 Performance comparison of channel pruning models
同理,在層剪枝時分別設(shè)置剪去Shortcut結(jié)構(gòu)為4,8,12,16,20個,以稀疏化訓(xùn)練后的YOLOv4模型作為剪枝基礎(chǔ)模型和對比模型。測試結(jié)果如表2所示,模型5(Shortcut-20)相比較模型4(Shortcut-16)的檢測精度下降太多,表明在層剪枝設(shè)置為剪枝20個時,剪掉了模型中對口罩檢測十分重要的層,造成了檢測精度的嚴(yán)重下降;而模型4(Shortcut-16)仍舊具有一定的檢測精度,同時其GFLOPS和參數(shù)量較小,因此本文選擇模型4(Shortcut-16)作為層剪枝后的模型。
為了進(jìn)一步驗證剪枝的有效性,本文通過微調(diào)使模型精度得到恢復(fù)后,將剪枝后的模型與YOLOv4和YOLOv4-tiny進(jìn)行對比測試實驗。設(shè)置4個模型,模型1(Prune-best)為本文得到的最適合模型,即通道修剪百分比為0.6和層剪枝16個殘差模塊后的模型;考慮2種極端情況:一種是剪枝率最小,通道剪枝率設(shè)置為0.5和層剪枝8個殘差模塊的模型2(Prune-least);另一種是剪枝率很高,即剪去0.8通道和16個殘差模塊的模型3(Prune-most);以及極限剪枝狀態(tài)下的模型4(Prune-limit),即通道剪枝率設(shè)置為0.9和層剪枝20個殘差模塊。
測試結(jié)果如表3所示,由于模型1(Prune-best)是針對本文所用人臉口罩檢測數(shù)據(jù)集的,通過剪枝剪去了模型中對模型檢測精度影響不大的通道和卷積層,而盡可能保留了對檢測精度影響較大的通道和卷積層,因此進(jìn)行剪枝后的模型其GFLOPS遠(yuǎn)遠(yuǎn)小于YOLOv4的,僅有42.9,參數(shù)量僅有9.86 MB,模型大小也同樣僅有37.92 MB,而檢測精度達(dá)到了0.759,只下降了2.7%,同時其推理時間也減少了3.7 ms。對于模型2(Prune-least),由于其剪枝率最小,有較多的對模型檢測精度影響不大的層和通道仍然被保留,因此模型的參數(shù)量、大小等均沒有太大提升,但其檢測精度基本無損失;對于模型3(Prune-most),由于其剪枝率最大,因此其模型的參數(shù)量比YOLOv4的簡化模型YOLOv4-tiny少1.834 MB,其模型大小更是達(dá)到了11.69 MB,比YOLOv4-tiny的還小,但同樣因為剪枝率過大,剪去了模型中較為重要的通道和卷積層,其檢測精度(mAP)比YOLOv4-tiny的高11.3%,屬于小而快、更容易部署的模型;最后的剪枝模型4(Prune-limit)更是以5.56 MB的模型大小和1.428 MB的參數(shù)量獲得了0.662的mAP。綜上所述,通過融合改進(jìn)通道和層剪枝方法,在2個方面對模型進(jìn)行剪枝,能在較大壓縮模型的參數(shù)量和大小的情況下使模型仍舊具有較高的檢測精度和更快的速度,使模型能更利于部署,檢測性價比更高,效果更好。
Table 2 Performance comparison of layer pruning models
Table 3 Performance comparison between the pruned model and the original model
圖7所示為模型Prune-best的檢測結(jié)果,可以看出檢測效果較好,能滿足人臉口罩檢測的要求,其中圖7a~圖7d為易誤檢圖像,Prune-best可以將其準(zhǔn)確檢測出;圖7e和圖7f為實際場景中的檢測效果;圖7g和圖7h為實際場景中醫(yī)護(hù)人員口罩檢測效果。
Figure 7 Testing results
本文采用一種基于人臉的數(shù)據(jù)擴增方法構(gòu)建了用于人臉口罩檢測的數(shù)據(jù)集,采用改進(jìn)的通道和層剪枝的模型剪枝方法對YOLOv4進(jìn)行剪枝,實驗結(jié)果表明,本文采用的剪枝方法能在保證精度的情況下,較大程度地壓縮模型,極限剪枝的模型達(dá)到了比YOLOv4-tiny更好的檢測效果,更少的參數(shù)量和更高的性價比,更便于部署。將模型實際部署于攝像頭、智能小車或無人機等硬件上,將是未來的研究方向。