侯 鑫 曲國遠(yuǎn) 魏大洲 張佳程
1(中國科學(xué)院計(jì)算技術(shù)研究所 北京 100190)
2(中國航空無線電電子研究所 上海 200241)
3(北京郵電大學(xué)信息與通信工程學(xué)院 北京 100876)
(houxin@ict.ac.cn)
隨著無人機(jī)(unmanned aerial vehicle, UAV)技術(shù)的成熟,配備攝像頭和嵌入式系統(tǒng)的無人機(jī)已被廣泛應(yīng)用于各個領(lǐng)域,包括農(nóng)業(yè)、安防與監(jiān)視[1]、航空攝影[2]和基礎(chǔ)設(shè)施檢查[3]等.這些應(yīng)用要求無人機(jī)平臺能夠感知環(huán)境,理解分析場景并作出相應(yīng)的反應(yīng),其中最基礎(chǔ)的功能就是目標(biāo)自動高效檢測.基于深度網(wǎng)絡(luò)的目標(biāo)檢測器[4-8]通過卷積神經(jīng)網(wǎng)絡(luò)自動提取圖像特征,大大提高了目標(biāo)檢測的性能.按照有沒有利用候選區(qū)域,目標(biāo)檢測主要分為兩大陣營:基于候選區(qū)域檢測陣營與不基于候選區(qū)域檢測陣營(如CornerNet[9],CenterNet[10]等).基于候選區(qū)域檢測陣營根據(jù)候選框處理手段又可以分為2階段目標(biāo)檢測(如R-CNN(region convolutional neural network)[11-13],R-FCN(region-based fully convolutional network)[14]等)和1階段目標(biāo)檢測(如YOLO(you only look once)[15-17],SSD(single shot multibox detector)[18],RetinaNet[19]等).
檢測性能提高的同時也帶來了巨大的資源消耗和內(nèi)存占用,這對計(jì)算能力受限的無人機(jī)處理平臺來說是不友好的:1)模型大小.深度卷積神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征表達(dá)能力得益于數(shù)百萬個可訓(xùn)練的參數(shù),如VGG-16網(wǎng)絡(luò),參數(shù)數(shù)量1.3億多,需要占用500 MB空間,這對嵌入式設(shè)備來說是很大的資源負(fù)擔(dān).2)計(jì)算量.深度卷積神經(jīng)網(wǎng)絡(luò)前向推理的過程需要執(zhí)行大量的浮點(diǎn)運(yùn)算,VGG-16(visual geometry group)網(wǎng)絡(luò)完成一次圖像識別任務(wù)需要309億次浮點(diǎn)運(yùn)算,這對于計(jì)算資源有效的嵌入式設(shè)備來說是巨大的挑戰(zhàn).3)推理時間.對于一張高分辨率的輸入圖像來說,嵌入式平臺執(zhí)行深度卷積神經(jīng)網(wǎng)絡(luò)前向推理過程是非常耗時的,可能要幾分鐘才能處理一張圖像,這對于實(shí)時應(yīng)用來說是不可接受的.
因此,很多研究者通過模型壓縮方式減小模型復(fù)雜度,減少模型參數(shù)量與計(jì)算量,加快模型前向推理速度.其中比較經(jīng)典的方法包括模型結(jié)構(gòu)優(yōu)化[20-23]、低秩分解[24-25]、模型剪枝[26-27]、模型量化[26,28]、知識蒸餾[29]等.模型壓縮方法在降低模型參數(shù)量和計(jì)算量的同時,勢必會帶來一定的精度損失.對于無人機(jī)場景目標(biāo)檢測來說,如何在保持精度基本無損的情況下,進(jìn)行最大限度的模型壓縮是關(guān)鍵的.
針對上述問題,本文提出了一種基于迭代稀疏訓(xùn)練的模型壓縮方法,其主要貢獻(xiàn)有3個方面:
1) 通過迭代稀疏訓(xùn)練的方式,對經(jīng)典目標(biāo)檢測網(wǎng)絡(luò)YOLOv3進(jìn)行通道和層協(xié)同剪枝,可以在保持精度基本無損的情況下實(shí)現(xiàn)最大限度的模型壓縮;
2) 通過組合不同數(shù)據(jù)增強(qiáng)方式增加了數(shù)據(jù)集分布的復(fù)雜性和多樣性,結(jié)合一些優(yōu)化手段(Tricks),提高了無人機(jī)場景下目標(biāo)檢測網(wǎng)絡(luò)YOLOv3的泛化性能;
3) 實(shí)驗(yàn)證明,該方法對于無人機(jī)場景下目標(biāo)檢測網(wǎng)絡(luò)YOLOv3模型壓縮效果明顯,在保證精度基本無損的情況下可以實(shí)現(xiàn)最大限度的模型壓縮,而且可以極大地加速模型的前向推理過程,使得模型實(shí)時應(yīng)用成為可能.
2013年以前,目標(biāo)檢測問題通過手工設(shè)計(jì)的特征算子與滑動窗口方式解決,處理速度慢、效果不魯棒,難以滿足實(shí)際工業(yè)需求.2014年,Girshick等人[11]提出R-CNN算法,使用深度卷積神經(jīng)網(wǎng)絡(luò)完成對輸入圖像的特征提取工作,緊接著一系列基于深度卷積神經(jīng)網(wǎng)絡(luò)的檢測算法出現(xiàn),包括基于2階段的檢測算法Fast R-CNN[12],F(xiàn)aster R-CNN[13],Mask R-CNN[6],R-FCN[14]等,以及1階段的檢測算法YOLO[15-17],SSD[18],RetinaNet[19]等.隨著檢測算法的發(fā)展,研究者們逐漸發(fā)現(xiàn)基于候選區(qū)域的目標(biāo)檢測存在一定的缺陷,因此出現(xiàn)了不基于候選區(qū)域的目標(biāo)檢測器,典型的有CornerNet[9],CenterNet[10]等算法.
1.1.1 基于2階段的目標(biāo)檢測器
基于2階段的目標(biāo)檢測過程主要由2部分組成,首先生成包含感興趣區(qū)域的高質(zhì)量候選框,然后通過進(jìn)一步分類與回歸獲得檢測結(jié)果.R-CNN是2階段檢測器的基礎(chǔ),首先使用深度網(wǎng)絡(luò)提取圖像特征,然后基于選擇搜索[30]生成候選區(qū)域,最后通過支持向量機(jī)(support vector machine, SVM)分類器對候選區(qū)特征進(jìn)行分類從而得到最終的檢測結(jié)果.R-CNN不能進(jìn)行端到端訓(xùn)練,隨著網(wǎng)絡(luò)的發(fā)展,逐漸形成了較為成熟的Faster R-CNN檢測算法,后續(xù)的改進(jìn)和提升基本都是基于Faster R-CNN進(jìn)行的.以R-CNN算法為代表的2階段檢測器經(jīng)過不斷的發(fā)展和改善,尤其是加入RPN(region proposal network)[13]結(jié)構(gòu)以后,檢測精度越來越高,計(jì)算復(fù)雜度也越來較高,檢測速度較慢,難以滿足實(shí)時應(yīng)用的需求.因此一般計(jì)算能力受限的嵌入式平臺不會使用2階段檢測器進(jìn)行部署應(yīng)用.
1.1.2 基于1階段的目標(biāo)檢測器
不同于2階段檢測器,1階段檢測器不包含候選區(qū)域生成步驟,直接對預(yù)定義錨框?qū)?yīng)的特征進(jìn)行分類和回歸以得到最終的檢測結(jié)果.這種方法相比2階段檢測器來說性能有一定的下降,但速度有明顯提升.YOLO[15]首先對訓(xùn)練樣本聚類得到候選框,使用這些預(yù)定義的候選框密集地覆蓋整個圖像空間位置,然后提取輸入圖像的特征并對預(yù)定義的候選框進(jìn)行分類和回歸.SSD[18]通過長寬及長寬比來預(yù)定義錨框,為提升1階段檢測器的性能瓶頸,SSD從多個尺度特征層出發(fā),同時對預(yù)定義的候選框進(jìn)行類別概率學(xué)習(xí)以及坐標(biāo)位置回歸,有效提升了檢測性能.后續(xù)提出的RetinaNet[19]引入focal loss函數(shù)來解決類別不平衡問題,1階段檢測器性能有了進(jìn)一步的提升.
1階段檢測器中YOLO系列算法運(yùn)行速度非???,可以達(dá)到實(shí)時應(yīng)用級別,但精度差強(qiáng)人意.后續(xù)YOLOv2[16],YOLOv3[17]的出現(xiàn),將精度進(jìn)行了大幅提升.特別是YOLOv3,借鑒了ResNet(residual network)[31]的殘差思想和FPN(feature pyramid network)[32]的多尺度檢測思想,在保持速度優(yōu)勢的前提下,進(jìn)一步提升了檢測精度,尤其加強(qiáng)了對小目標(biāo)的識別能力.在實(shí)際部署中,由于非常好的速度/精度均衡性和高度的集成性、靈活性,YOLOv3成為工業(yè)界最受歡迎的模型之一.
1.1.3 不基于候選區(qū)域的目標(biāo)檢測
2階段檢測器與1階段檢測器都基于候選框進(jìn)行分類與回歸,實(shí)際應(yīng)用中,很多研究者發(fā)現(xiàn)如果候選框設(shè)置不合適,可能影響檢測器的性能.因此,不基于候選區(qū)域的目標(biāo)檢測方法被提出,這些方法將目標(biāo)檢測任務(wù)轉(zhuǎn)換為關(guān)鍵點(diǎn)檢測與尺寸估計(jì).CornerNet[9]將目標(biāo)檢測任務(wù)轉(zhuǎn)換為左上角和右下角的關(guān)鍵點(diǎn)檢測任務(wù);ExtremeNet[33]將目標(biāo)檢測任務(wù)轉(zhuǎn)換為檢測目標(biāo)的4個極值點(diǎn);CenterNet[10]將左上角、右下角和中心點(diǎn)結(jié)合成為三元組進(jìn)行目標(biāo)框的判斷;FoveaBox[34]則借鑒了語義分割思想,對目標(biāo)上每個點(diǎn)都預(yù)測一個分類結(jié)果,物體邊界框通過預(yù)測偏移量得到.不基于候選區(qū)域的目標(biāo)檢測器的成功主要得因于FPN和focal loss結(jié)構(gòu),但與2階段檢測器和級聯(lián)方法的檢測精度仍然有差距,在靈活性和檢測速度上也沒有明顯優(yōu)勢.因此,目前工業(yè)部署應(yīng)用不是特別廣泛.當(dāng)然,作為一種新的檢測思路,隨著方法本身的發(fā)展,相信未來將會有更多的應(yīng)用.
在資源有限的設(shè)備上部署深度網(wǎng)絡(luò)模型時,模型壓縮是非常有效的工具,常用的模型壓縮方法主要包括模型結(jié)構(gòu)優(yōu)化[20-23]、低秩分解[24-25]、模型剪枝[26-27]、模型量化[26,28]、知識蒸餾[29]等.模型結(jié)構(gòu)優(yōu)化是指通過使用輕量化的網(wǎng)絡(luò)結(jié)構(gòu)來降低模型計(jì)算量,但這樣會導(dǎo)致模型表達(dá)能力下降,從而造成性能下降.低秩分解將原始網(wǎng)絡(luò)權(quán)值矩陣當(dāng)作滿秩矩陣,用若干個低秩矩陣的組合來替換原來的滿秩矩陣,低秩矩陣又可以分解為小規(guī)模矩陣的乘積,從而實(shí)現(xiàn)模型壓縮和加速.模型量化主要利用32 b表示權(quán)重?cái)?shù)據(jù)存在的冗余信息,使用更少位數(shù)表示權(quán)重參數(shù),從而實(shí)現(xiàn)模型壓縮和加速.上述2種方法在壓縮率較高時,都面臨精度損失大的問題.知識蒸餾通過學(xué)生網(wǎng)絡(luò)對老師網(wǎng)絡(luò)的擬合得到一個更加緊湊的網(wǎng)絡(luò)結(jié)構(gòu),以再現(xiàn)大型網(wǎng)絡(luò)的輸出結(jié)果.學(xué)生網(wǎng)絡(luò)的選擇與設(shè)計(jì),以及學(xué)習(xí)老師網(wǎng)絡(luò)的哪些信息依然是一個值得考慮的問題.模型剪枝指對一個已訓(xùn)練好的高精度復(fù)雜模型,通過一種有效的評判手段來判斷參數(shù)的重要性,將不重要的連接進(jìn)行裁剪以減少參數(shù)冗余,從而實(shí)現(xiàn)模型壓縮和加速.
Denil等人在文獻(xiàn)[35]中提出很多深度卷積神經(jīng)網(wǎng)絡(luò)中存在顯著冗余,僅僅使用很少一部分(5%)權(quán)值就足以預(yù)測剩余的權(quán)值,因此模型剪枝可以實(shí)現(xiàn)非??捎^的壓縮率.針對無人機(jī)場景數(shù)據(jù)集,本文選擇速度/精度均衡的YOLOv3作為基礎(chǔ)檢測模型,通過模型剪枝來進(jìn)行壓縮和加速,以獲得可在算力有限的嵌入式平臺部署應(yīng)用的快速準(zhǔn)確檢測模型.
數(shù)據(jù)增強(qiáng)的目標(biāo)是增加輸入圖像的可變性,以使模型對從不同環(huán)境獲得的圖像具有更高的魯棒性.常用的2種數(shù)據(jù)增強(qiáng)方式包括空間幾何變換與像素顏色變換[36-39],其中圖像平移、旋轉(zhuǎn)、縮放以及圖像亮度、對比度、飽和度是比較常用的.上述提到的數(shù)據(jù)增強(qiáng)方法都是基于像素級別的,對于無人機(jī)場景下的稠密小目標(biāo)檢測任務(wù)來說提升作用有限.Kisantal等人在文獻(xiàn)[40]中通過剪切粘貼方式來增加小目標(biāo)數(shù)量,該種方法對稠密分布的小目標(biāo)效果不明顯.此外,一些研究員提出使用多張圖像一起執(zhí)行數(shù)據(jù)增強(qiáng)的方法.Mixup[41]對任意2張訓(xùn)練圖像進(jìn)行像素混合從而起到正則化效果;Mosaic[42]任意混合4張訓(xùn)練圖像作為一張新的圖像參與訓(xùn)練.這2種方法混合了不同的上下文信息,有效提升了數(shù)據(jù)集的場景復(fù)雜性,從而提升了模型的檢測性能.本文除了使用基礎(chǔ)的空間幾何變換與像素顏色變換增強(qiáng)方式外,巧妙結(jié)合了Mixup和Mosaic兩種增強(qiáng)方式,進(jìn)一步提升了YOLOv3在無人機(jī)場景下的檢測精度.
深度卷積神經(jīng)網(wǎng)絡(luò)主要模塊包括卷積、池化、激活,這是一個標(biāo)準(zhǔn)的非線性變換模塊.網(wǎng)絡(luò)層數(shù)加深,意味著更好的非線性表達(dá)能力,可以學(xué)習(xí)更加復(fù)雜的變換從而擬合更加復(fù)雜的特征輸入.因此,對于同一場景數(shù)據(jù)集來說,網(wǎng)絡(luò)越復(fù)雜,通常意味擬合能力越強(qiáng),效果越好.而復(fù)雜模型參數(shù)量大,推理速度慢,對于嵌入式平臺部署應(yīng)用來說是一個很大的挑戰(zhàn).文獻(xiàn)[35]還提出這些剩下的權(quán)值甚至可以直接不用被學(xué)習(xí),也就是說,僅僅訓(xùn)練一小部分原來的權(quán)值參數(shù)就有可能達(dá)到和原來網(wǎng)絡(luò)相近甚至超過原來網(wǎng)絡(luò)的性能.受此啟發(fā),本文對一個特征表達(dá)能力強(qiáng)的復(fù)雜模型通過迭代稀疏訓(xùn)練的方式,巧妙結(jié)合層剪枝和通道剪枝,在保持檢測精度的同時,實(shí)現(xiàn)了模型極大比例的壓縮,剪枝流程如圖1所示:
Fig. 1 The process of iterative sparse training圖1 迭代稀疏訓(xùn)練流程圖
在實(shí)際部署應(yīng)用中,由于非常好的速度、精度均衡和高度的集成性、靈活性,YOLO系列模型成為最受歡迎的模型之一.YOLOv3借鑒了ResNet[31]的殘差思想和FPN[32]的多尺度檢測思想,在保持速度優(yōu)勢的前提下,進(jìn)一步提升了檢測精度,尤其加強(qiáng)了對小目標(biāo)的識別能力.如圖2所示為YOLOv3網(wǎng)絡(luò)結(jié)構(gòu),該結(jié)構(gòu)由大量1×1卷積、3×3卷積與殘差結(jié)構(gòu)組成,我們把每個這樣的結(jié)構(gòu)作為一個單元稱為CR塊.在檢測部分,YOLOv3引入了特征金字塔的思想,采用3個不同尺度的特征圖進(jìn)行檢測,以應(yīng)對目標(biāo)尺度變化大的問題.本文基礎(chǔ)模型基于YOLOv3進(jìn)行,相比Zhang等人在文獻(xiàn)[43]中基于YOLOv3-SPP3(spatial pyramid pooling)開展的工作,同樣剪枝率下本文模型參數(shù)量更少,推理速度更快,精度更高.
Fig. 2 The network structure of YOLOv3圖2 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
數(shù)據(jù)增強(qiáng)是目標(biāo)檢測中常用的不需要增加太多訓(xùn)練成本但可以有效提升模型性能的方法.Mixup[41]是一種新的數(shù)據(jù)增強(qiáng)策略,通過對任意2張訓(xùn)練圖像進(jìn)行像素混合來對神經(jīng)網(wǎng)絡(luò)起到正則化的效果,可以提高網(wǎng)絡(luò)對空間擾動的泛化能力,有助于提升檢測精準(zhǔn)率.Rosenfeld等人在文獻(xiàn)[44]中做過一個非常有趣的實(shí)驗(yàn),稱為“房間里的大象”,將包含大象的補(bǔ)丁圖像隨機(jī)放置在自然圖像上,使用現(xiàn)有的物體檢測模型進(jìn)行檢測,發(fā)現(xiàn)效果并不理想.Zhang等人在文獻(xiàn)[45]方案中將Mixup應(yīng)用于目標(biāo)檢測,有效提升了模型對“房間里的大象”現(xiàn)象的魯棒性.如式(1)所示為YOLOv3損失函數(shù):
(1)
增加了Mixup數(shù)據(jù)增廣策略之后YOLOv3的損失函數(shù)為:
(2)
Mosaic[42]是另一種有效的多張圖像混合的數(shù)據(jù)增強(qiáng)方法,通過混合4張不同圖像的上下文信息,有效提升數(shù)據(jù)集的場景復(fù)雜性,有助于提升檢測召回率.假設(shè)混合后的圖像分辨率為S×S,首先創(chuàng)建一個2S×2S的大圖,則混合圖像的中心點(diǎn)坐標(biāo)xc,yc~U[S×0.5,S×1.5],隨機(jī)從訓(xùn)練集中選取4張圖像,原圖像坐標(biāo)換算得到混合圖像,然后中心裁剪得到最終的增強(qiáng)圖像.混合圖像左上、右上、左下和右下4張圖像坐標(biāo)范圍為
左上角坐標(biāo):
ximg1_start,yimg1_start,ximg1_end,yimg1_end=
max(xc-wimg1,0),max(yc-himg1,0),xc,yc;
右上角坐標(biāo):
ximg2_start,yimg2_start,ximg2_end,yimg2_end=xc,
max(yc-himg2,0),min(xc+wimg2,2×S),yc;
左下角坐標(biāo):
ximg3_start,yimg3_start,ximg3_end,yimg3_end=
max(xc-wimg3,0),yc,xc,min(yc+himg3,2×S);
右下角坐標(biāo):
ximg4_start,yimg4_start,ximg4_end,yimg4_end=xc,yc,
min(xc+wimg4,2×S),min(yc+himg4,2×S).
(3)
其中,x,y,w,h分別表示圖像的橫縱坐標(biāo)、寬和高.
Mixup通過任意2張圖像的像素混合可以有效提升檢測精準(zhǔn)率,Mosaic通過任意4張圖像拼接混合可以有效提升檢測召回率,本文將Mixup和Mosaic這2種數(shù)據(jù)增強(qiáng)策略進(jìn)行巧妙結(jié)合,獲得了檢測精準(zhǔn)率和召回率的大幅提升.在訓(xùn)練時,首先加載batchsize張訓(xùn)練圖像,然后對每張圖像按照一定概率選擇數(shù)據(jù)增強(qiáng)策略,其中包含只進(jìn)行Mixup增強(qiáng)、只進(jìn)行Mosaic增強(qiáng)、同時進(jìn)行Mixup和Mosaic增強(qiáng)與Mixup和Mosaic增強(qiáng)都不執(zhí)行這4種方式.需要特別注意的是在選擇與其他圖像結(jié)合時,需要從batch以外的圖像中選擇.對batch中的每張圖像都執(zhí)行上述操作,直至最后得到新生成的batchsize張?jiān)鰪?qiáng)圖像參與模型訓(xùn)練,上述組合增強(qiáng)策略為
dataaug=a1mixup+a2mosaic+
a3(mixup+mosaic)+a4None.
(4)
模型剪枝通過對高精度復(fù)雜模型進(jìn)行冗余參數(shù)修剪,從而得到計(jì)算量和參數(shù)量有效降低的輕量化模型.除了2.2節(jié)提到的數(shù)據(jù)增強(qiáng)策略外,本文參考He等人在文獻(xiàn)[46]方案中的設(shè)置,在YOLOv3訓(xùn)練過程中加入了相關(guān)優(yōu)化方法,其中包括多尺度訓(xùn)練、大的批處理尺寸、熱啟動、余弦學(xué)習(xí)率衰減法(cos lr decay)、標(biāo)簽平滑(label smooth)等,有效提高了模型的精度.將該模型作為剪枝基準(zhǔn)模型,依次通過迭代稀疏、層剪枝、微調(diào)與迭代稀疏、通道剪枝、微調(diào)(finetune)的過程,最終得到了不同剪枝比例的可部署模型,剪枝流程如圖1所示.
2.3.1 稀疏訓(xùn)練
模型剪枝需要選擇可評估權(quán)重重要性的指標(biāo)來剪枝不重要的結(jié)構(gòu).本文采用批歸一化層(batch normalization, BN)中的縮放因子γ的絕對值度量權(quán)重的重要程度.BN層的標(biāo)準(zhǔn)化公式為
(5)
其中,μ和σ2為統(tǒng)計(jì)參數(shù),分別表示批處理中數(shù)據(jù)的均值和方差;γ和β為可訓(xùn)練參數(shù),分別對歸一化分布進(jìn)行縮放與平移,從而保留原始學(xué)習(xí)到的特征.基于BN層原理,縮放系數(shù)γ主要用來保留歸一化操作前的特征,因此可以作為評估權(quán)重重要程度的指標(biāo)因子.
如果權(quán)重分布不稀疏將不利于模型剪枝,需要通過外力強(qiáng)制稀疏化,L1正則化約束是常用的稀疏化方法.加入L1正則后YOLOv3的損失函數(shù)為:
(6)
其中,?為正則化系數(shù),平衡2個損失項(xiàng)之間的關(guān)系.由于添加的L1正則項(xiàng)梯度不是處處存在的(在0點(diǎn)導(dǎo)數(shù)不存在),因此我們使用次梯度下降[27]作為L1正則項(xiàng)的優(yōu)化方法.
2.3.2 層剪枝
如圖2所示為YOLOv3的標(biāo)準(zhǔn)網(wǎng)絡(luò)結(jié)構(gòu),特征提取部分由大量1×1卷積、3×3卷積與殘差結(jié)構(gòu)構(gòu)成,我們把每個這樣的結(jié)構(gòu)作為一個單元稱為CR塊.實(shí)際剪枝操作過程中,為保證YOLOv3結(jié)構(gòu)完整,CR塊作為一個整體參與.YOLOv3結(jié)構(gòu)中一共有23個CR單元,權(quán)重重要程度統(tǒng)計(jì)時,我們選擇CR單元的均值作為評估剪枝與否的指標(biāo),剪掉均值較低的單元.層剪枝是一種非常粗糙的剪枝方法,按照單元裁剪的方式可能會帶來較大的精度損失,因此實(shí)際剪枝過程中我們通過觀察γ的變化趨勢設(shè)置需要剪枝的CR單元比例,通常不會一次剪掉太多,每次迭代按照50%的概率進(jìn)行剪枝.通過稀疏訓(xùn)練-層剪枝-微調(diào)的迭代過程,保證每次剪掉一些CR單元后,其精度損失可以通過微調(diào)補(bǔ)償回來.圖3為層剪枝后的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖,具體剪枝參數(shù)設(shè)置見3.3節(jié).
Fig. 3 The network structure of YOLOv3 after pruning圖3 YOLOv3剪枝后的網(wǎng)絡(luò)結(jié)構(gòu)
2.3.3 通道剪枝
層剪枝之后我們得到了相對穩(wěn)定的網(wǎng)絡(luò)結(jié)構(gòu),此時通過通道剪枝對其進(jìn)行進(jìn)一步修剪.首先需要定義全局剪枝率λ,表示需要剪枝的通道數(shù)占總通道數(shù)的比例,同時可以換算出全局剪枝率λ對應(yīng)γ的閾值π1.為防止通道剪枝時某些層被全部剪掉,需要另外設(shè)置一個保護(hù)閾值β,表示每層中至少需要保留多少比例的通道,同理也可以換算出每層中對應(yīng)γ的閾值π2.當(dāng)且僅當(dāng)γ<π1,γ<π2同時滿足時,該通道可以剪枝.直接使用較大的剪枝率會損失較多的精度,因此通道剪枝時我們通過分析稀疏訓(xùn)練后γ的分布,按照30%的比例設(shè)置參數(shù)量剪枝率并迭代執(zhí)行稀疏、通道剪枝、微調(diào)的過程,使得由于剪枝帶來的精度下降可以通過微調(diào)補(bǔ)償回來,從而得到精度損失較小的輕量化模型.
2.3.4 微 調(diào)
在執(zhí)行完一次層剪枝或通道剪枝后,或多或少都會帶來精度損失,一定程度的精度損失可以通過后續(xù)的微調(diào)補(bǔ)償回來.本文我們是通過迭代稀疏訓(xùn)練進(jìn)行剪枝的,因此在每一次剪枝之后必須通過微調(diào)來補(bǔ)償剪枝帶來的精度損失,才能不影響下一次迭代的稀疏訓(xùn)練.
本文提出了一種基于迭代稀疏訓(xùn)練的模型剪枝方法.實(shí)驗(yàn)證明,該方法可以獲得精度和速度兼?zhèn)涞臋z測模型.其中,模型訓(xùn)練環(huán)境均基于Pytorch框架,服務(wù)器配置為Intel?Xeon?CPU E5-2640 v4@2.40 GHz,128GRAM,4塊GTX 1080 Ti.
VisDrone-DET2019[47]是一個典型的無人機(jī)目標(biāo)檢測應(yīng)用數(shù)據(jù)集.該數(shù)據(jù)集包含8 599張來自無人機(jī)平臺從不同高度、不同光照條件下收集的圖像,涉及包含人、車在內(nèi)的10個類別(pedestrian,person,car,van,bus,truck,motor,bicycle,awning-tricycle,tricycle),是一個非常有挑戰(zhàn)的數(shù)據(jù)集.其中訓(xùn)練集6 471張、驗(yàn)證集548張、測試集1 580張,由于測試集標(biāo)注未開放下載,因此本文中模型都是基于訓(xùn)練集訓(xùn)練、驗(yàn)證集評估的.
模型評估標(biāo)準(zhǔn)與文獻(xiàn)[43]中保持一致,我們主要評估輸入分辨率為608×608像素下模型的參數(shù)量、計(jì)算量(floating-point operations, FLOPS)、交并比(intersection over union, IOU)在0.5下的精度度量指標(biāo)F1-score和平均精度均值(mean average precision,mAP)以及模型壓縮中涉及的參數(shù)量壓縮率、計(jì)算量壓縮率等指標(biāo).為更全面地評估輕量化模型在不同分辨率下的性能,我們選取計(jì)算量壓縮率為85%的模型與文獻(xiàn)[43]中模型進(jìn)行對比分析,實(shí)驗(yàn)證明我們的算法在達(dá)到與文獻(xiàn)[43]中同等壓縮率的情況下可以獲得更高的精度與更快的速度.
本文模型訓(xùn)練環(huán)境基于Pytorch框架展開,采用動量0.9、權(quán)重衰減因子0.000 5的隨機(jī)梯度下降(stochastic gradient descent, SGD)權(quán)重更新策略;正常訓(xùn)練迭代次數(shù)為300epoch,初始學(xué)習(xí)率為0.002 5,分別在240epoch和270epoch衰減10倍;稀疏訓(xùn)練和微調(diào)的迭代次數(shù)為100epoch,初始學(xué)習(xí)率為0.001,分別在80epoch和90epoch衰減10倍;批處理大小為128;損失函數(shù)中α,β,γ分別設(shè)置為3.31,52.0,42.4;數(shù)據(jù)增強(qiáng)策略中α1,α2,α3,α4按照等概率設(shè)置為0.25;多尺度訓(xùn)練設(shè)置圖像大小變化區(qū)間為[416,896];稀疏因子根據(jù)γ分布設(shè)置為0.01~0.08之間.
3.3.1 數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng)是一種成本很低卻可以有效提升模型性能的方法.除了常規(guī)使用的增強(qiáng)方法外,本文結(jié)合了Mixup和Mosaic的優(yōu)勢,有效提升了檢測精準(zhǔn)率和召回率,增強(qiáng)效果如圖4所示:
Fig. 4 The effect of data enhancement圖4 數(shù)據(jù)增強(qiáng)效果圖
為獲得好的基準(zhǔn)模型,我們通過數(shù)據(jù)增強(qiáng)策略與優(yōu)化手段共同對YOLOv3標(biāo)準(zhǔn)模型進(jìn)行了優(yōu)化.表1中前兩行分別表示Zhang等人在文獻(xiàn)[43]中的測試結(jié)果,行3表示YOLOv3標(biāo)準(zhǔn)網(wǎng)絡(luò)測試結(jié)果,行4~6分別表示單獨(dú)加入Mixup增強(qiáng)策略、單獨(dú)加入Mosaic增強(qiáng)策略以及Mixup和Mosaic結(jié)合策略的測試結(jié)果,最后一行表示加入相關(guān)優(yōu)化手段的測試結(jié)果.我們可以看到不論使用Mixup策略還是Mosaic策略都可以提升mAP指標(biāo),此外Mixup和Mosaic隨機(jī)組合的策略對mAP的提升要比單獨(dú)執(zhí)行時效果更好.表1最后一行不論mAP還是F1-score都有很大的提升,雖然未加SPP[48]模塊,但通過數(shù)據(jù)增強(qiáng)策略與相關(guān)優(yōu)化手段可以達(dá)到甚至優(yōu)于YOLOv3-SPP3的結(jié)果,而且參數(shù)量和計(jì)算量更少.
Table 1 Test Results Comparison of Benchmark Model表1 基準(zhǔn)模型測試結(jié)果比較
3.3.2 剪 枝
基準(zhǔn)模型獲得后,我們通過迭代稀疏訓(xùn)練的方式進(jìn)行模型剪枝.圖5為層剪枝稀疏訓(xùn)練過程中CR單元γ均值變化曲線圖,其中實(shí)線表示基準(zhǔn)模型CR單元γ均值曲線,虛線表示稀疏訓(xùn)練后模型CR單元γ均值曲線.從圖5中可以明顯發(fā)現(xiàn),模型越靠前的層γ均值越大,越靠后的層γ均值越小.隨著迭代的進(jìn)行,γ均值會逐漸變小,但不改變層之間的相對大小關(guān)系,而且越靠后的層越接近0,說明針對當(dāng)前數(shù)據(jù)集來說,越靠后的層對模型性能貢獻(xiàn)越小,因此會在層剪枝過程中被剪枝.隨著剪枝過程的進(jìn)行,其稀疏訓(xùn)練過程也會變得越來越難,層剪枝難度增大,直至達(dá)到一定的結(jié)構(gòu)平衡,如圖3所示,完成層剪枝過程.
Fig. 5 The scale factor change curve of CR module圖5 CR單元縮放因子變化曲線圖
標(biāo)準(zhǔn)YOLOv3模型一共含有72個BN層,如圖6所示為通道剪枝過程中稀疏訓(xùn)練前后γ統(tǒng)計(jì)直方圖分布.對比圖6(a)(b)的2張圖可以明顯地看到,稀疏訓(xùn)練后γ數(shù)據(jù)分布直方圖變得更細(xì)更尖了,意味著接近于0的γ值變得更多了,而較大的γ值變少了,也即γ數(shù)據(jù)分布更加稀疏,有利于通道剪枝的實(shí)現(xiàn).
Fig. 6 The γ statistics histogram before and after channel pruning sparse training圖6 通道剪枝稀疏訓(xùn)練前后γ統(tǒng)計(jì)直方圖
表2表示不同剪枝率下的模型壓縮性能對比,其中YOLOv3_baseline表示本文剪枝前的基準(zhǔn)模型,YOLOv3_prune_70(85,90)分別表示計(jì)算量剪枝率為70%,85%,90%的模型,與文獻(xiàn)[43]工作中的SlimYOLOv3-SPP3-50(90,95)一一對應(yīng).在計(jì)算量達(dá)到同等剪枝率甚至更高剪枝率的條件下,我們的方法對參數(shù)量的壓縮率更高,而且精度誤差更低.特別是對于計(jì)算量壓縮率為85%時,參數(shù)量壓縮率達(dá)到97.3%,比文獻(xiàn)[43]方案中的87.48%高了將近10%.此外,mAP誤差只有0.3,相比文獻(xiàn)[43]方案中提升了2.4個點(diǎn).
為了與文獻(xiàn)[43]方案中結(jié)果進(jìn)行更公平全面的對比,表3針對計(jì)算量85%壓縮率水平進(jìn)行了416×416,608×608,832×832這3個分辨率的性能對比,不出意料,不論mAP指標(biāo)還是F1-score指標(biāo),我們的方法都取得了巨大的提升.圖7展示了608×608輸入分辨率下剪枝前后的檢測效果圖,可以看到剪枝前后都能檢測到絕大多數(shù)感興趣目標(biāo),而且剪枝前后誤差很小.
Table 2 Comparison of Model Compression Performance Under Different Pruning Rates表2 不同剪枝率下的模型壓縮性能對比
Table 3 Comparison of Model Compression Performance Under Different Resolutions
Fig. 7 Test result of model before and after pruning圖7 剪枝前后結(jié)果圖
本文通過數(shù)據(jù)增強(qiáng)策略與相關(guān)優(yōu)化手段的巧妙結(jié)合,得到了一個性能較好的基準(zhǔn)模型.通過迭代稀疏訓(xùn)練的模型壓縮方法,對上述基準(zhǔn)模型進(jìn)行了極大程度的參數(shù)量壓縮與計(jì)算量壓縮.與現(xiàn)有典型方法[43]相比,本文提出的方法在未添加額外計(jì)算量(SPP模塊)的情況下,得到了精度更高的基準(zhǔn)模型;同時通過迭代稀疏層剪枝與迭代稀疏通道剪枝相結(jié)合的方法,在達(dá)到同等計(jì)算量剪枝率的情況下,參數(shù)量更少,精度損失更小,適合在計(jì)算資源受限的無人機(jī)平臺部署應(yīng)用.模型壓縮是生成性能較好的輕量化模型的常用方法,如何保證在一定精度損失的條件下進(jìn)一步降低計(jì)算量和參數(shù)量仍然是一個值得深度研究的課題.當(dāng)前方法只驗(yàn)證了YOLOv3網(wǎng)絡(luò)在VisDrone-DET2019數(shù)據(jù)集上的壓縮性能,下一步我們將對其他典型檢測網(wǎng)絡(luò)與數(shù)據(jù)集做進(jìn)一步驗(yàn)證和推廣,以提高方法的普適性.
作者貢獻(xiàn)聲明:侯鑫參與代碼開發(fā)、實(shí)驗(yàn)測試、數(shù)據(jù)分析、論文攥寫與修改等工作;曲國遠(yuǎn)、魏大洲參與實(shí)驗(yàn)環(huán)境搭建、代碼開發(fā)、實(shí)驗(yàn)測試等工作;張佳程參與數(shù)據(jù)分析等工作.