張 瑤,潘志松
(陸軍工程大學 指揮控制工程學院,江蘇 南京 210006)
紅外目標檢測是計算機視覺的重要研究方向之一,是跨模式識別、夜間安全監(jiān)測等應用的基礎,具有重要的研究意義和廣闊的應用前景。目前,紅外目標檢測在端側設備上的應用需求越來越廣泛,這對紅外目標檢測模型的輕量化操作提出了現實要求,使其能夠在資源有限的平臺上依然能夠保持原有的性能。
近兩年,目標檢測領域出現了不少新成果,如無錨框機制[1]、解耦預測分支[2]、先進標簽分配策略[3]等。研究人員將這些成果與YOLOv3[4]進行了結合,得到了當前性能最好的目標檢測網絡YOLOX[5],并在CVPR自動駕駛比賽WAD 2021中取得Streaming Perception Challenge的雙賽道冠軍。同時,為了適應不同設備的算力,研究人員還為YOLOX設計了六種不同規(guī)模的網絡,模型尺寸由小到大依次為YOLOX-nano、YOLOX-tiny、YOLOX-s、YOLOX-m、YOLOX-l、YOLOX-x,其區(qū)別在于是否采用深度可分離卷積以及使用不同的網絡寬度和深度。然而,從模型輕量化的角度來看,YOLOX的模型仍有不少冗余。
傳統(tǒng)的模型輕量化方法可以分為輕量化模型設計、模型剪枝、知識蒸餾、模型量化和神經網絡架構搜索(NAS)等。1990年,LeCun等人[6]基于信息論,剪除網絡中不重要的權重以增強網絡的泛化能力,是學界首次提出輕量化的概念。2015年,韓松等人[7]在Deep Compression中將裁剪、權值共享和量化、編碼等方式運用在模型壓縮上,取得了非常好的效果,引發(fā)了模型輕量化方法研究的熱潮。輕量化模塊設計是指設計一個輕量級模塊或卷積方式來代替網絡中的常規(guī)卷積,以達到壓縮模型體積、減少運算量等目的。如AlexNet[8]提出的組卷積模塊,MobileNet[9]提出的深度可分離卷積模塊,ShuffleNet[10]提出的shuffle channel操作,GhostNet[11]提出的Ghost模塊,ShiftNet[12]提出的Shift操作以及AdderNet[13]提出的加法操作。
模型剪枝是指通過人為設定的冗余度評價準則來搜索和去除模型中的冗余參數或神經元連接,從而實現減少連接權重數量的方法。剪枝的核心問題在于采取何種評價指標判斷權值的重要性。例如,韓松[7]提出將權重的絕對值大小作為判斷依據;He等人[14]提出了幾何中位數,并將其作為判斷依據;Liu等人[15]提出了基于Batch Normalization層(簡稱BN層)的scale參數衡量權重重要性的方法等。剪枝的經典流程由韓松[7]總結為:預訓練→剪枝→恢復精度。
除此之外,一些工作[16-17]反思了上述經典剪枝流程,并分別提出了“預訓練→剪枝→重新訓練”和“隨機初始化→剪枝→訓練”兩種流程。
除輕量化模塊設計外,當前絕大多數模型輕量化方法都是在預訓練的基礎上進行輕量化設計,依然無法避免重新訓練一個龐大模型帶來的能耗和時間成本。
針對YOLOX模型體積大、浮點數運算量高、實時性不佳等問題,同時為了避免預訓練帶來的不必要能耗,該文提出了基于無預訓練的GP-YOLOX算法。該算法具有以下特點:
(1)利用輕量級的Ghost模塊重構YOLOX的網絡結構,從而壓縮了模型體積和減少了計算量;
(2)對重構后的模型進行了無預訓練剪枝,從而避免了由于Ghost模塊使模型變得窄而深導致的模型前向推理時間延長。
實驗表明,基于無預訓練的GP-YOLOX算法能夠在保持和原模型相當的檢測精度的前提下,大幅壓縮模型體積,減少浮點數運算量,縮短前向推理時間。
2012年,AlexNet[8]創(chuàng)新性地提出了組卷積,將輸入特征圖按通道進行分組卷積,再將分組卷積得到的結果按通道進行連接,得到最終的輸出特征,從而實現模型參數量的成倍減少。然而組卷積會導致組間的信息無法傳遞,輸出特征圖無法包含輸入特征圖的全部信息。為了解決這個問題,Google和曠視科技分別提出了MobileNet[9]和ShuffleNet[12]。2020年,華為諾亞實驗室的Han等人[11]分析了深度卷積神經網絡的特征圖,發(fā)現其中存在著豐富甚至冗余的特征圖,是網絡得以充分理解輸入信息的重要保證,并據此提出了一個全新的輕量化卷積神經網絡:GhostNet。蘇志明等人[18]將Ghost模塊結合注意力機制引入了圖像去霧模型;符惠桐等人[19]用Ghost模塊替換了YOLOv4中的傳統(tǒng)卷積;洪愷臨等人[20]用Ghost模塊替換了CenterNet中的傳統(tǒng)卷積,均減少了模型的參數量和浮點數計算量。
從20世紀90年代開始,LeCun[6]就提出在訓練過程中加入懲罰項使網絡變得稀疏。大部分的文獻研究的側重點都在如何判斷權重的重要性,采取的評價指標有權重絕對值大小[7]、幾何中位數[14]、BN層參數[15]、APoZ[21](Average Percentage of Zeros,激活函數輸出0的比例)等。絕大部分剪枝算法都遵循韓松[7]提出的“預訓練→剪枝→恢復精度”的經典流程。
然而,近兩年不少研究對這一經典流程提出了質疑。Frankle等人[16]提出了“彩票假說”,認為精度恢復這一步驟是不必要的,并通過實驗證明了隨機初始化的子網絡在重新訓練后,依然能夠達到與原網絡相當的精度。Wang等人[17]發(fā)現從初始化的原網絡中能夠獲得更加多樣的剪枝結構,對“預訓練”這一步驟提出質疑,并提出了一種無預訓練剪枝算法。三種剪枝流程如圖1所示。
YOLOX是曠視科技以YOLOv3為基礎,集成了預測分支解耦(decoupled-head)、Mosaic和MixUp數據增強、SimOTA正樣本選擇策略等方法的檢測技術,其骨干網絡沿用了YOLOv3中的DarkNet53和SPP結構,頸部網絡則采用了YOLOv4[22]中的FPN和PAN結合的“雙塔”結構,前者自頂向下傳遞語義特征,后者自底向上,傳達定位特征,兩者結合,增強了不同層的信息融合,增強了模型的識別和定位能力。
YOLOX主要有以下兩個特點:
(1)將YOLO系列傳統(tǒng)的基于錨框(Anchor-based)識別改為無錨框(Anchor free)識別。錨框機制存在諸多的缺點,如需要在訓練前對訓練集的錨框進行聚類分析以獲得最佳的初始錨框設置,泛化性能較差;錨框增加了檢測頭的復雜度和生成結果的數量,對于邊緣設備來說無法承擔等。而近年來,無錨框檢測器取得了和錨框檢測器相當的性能。例如,FCOS(Fully Convolutional One-Stage Object Detection)[23]采用語義分割的思想,以逐像素的方式解決目標問題,在更加簡單快速的基礎上,增加了檢測精度。在改為無錨框機制后,YOLOX的參數量和計算量都大幅下降。
(2)將YOLO系列傳統(tǒng)的耦合預測分支解耦。在目標檢測中,分類與回歸任務的沖突是一種常見問題。因此,分類與定位頭的解耦已被廣泛應用到如FCOS[23]、RetinaNet[24]等目標檢測模型中。然而,在YOLO系列中,雖然其骨干網絡和特征金字塔一直在不斷的更新迭代,但其預測分支卻一直處于耦合狀態(tài)。如圖2所示,將YOLO的耦合預測分支替換為輕量解耦預測分支,在提高模型精度的同時,還使模型能夠更快收斂。
除此之外,為了解決訓練中正負樣本間的極端不平衡問題,YOLOX還采用了多正樣本策略,將3×3的中心區(qū)域指定為正樣本。最后,YOLOX采用SimOTA高級標簽分配策略,自動選擇中心區(qū)域內成本最小的前k個預測作為正樣本,減少了訓練時間。
圖2 耦合預測分支與解耦預測分支
雖然YOLOX在減小模型體積、增強推理實時性方面做了不少努力,但是,從模型輕量化的角度來看,YOLOX的模型仍有不少冗余。
YOLOX的網絡結構如圖3所示。
圖3 YOLOX網絡結構
針對YOLOX存在的問題,為了設計一個輕量級的目標檢測網絡,該文提出一種采用Ghost模塊的YOLO目標識別算法GP-YOLOX。GP-YOLOX首先利用Ghost模塊重構YOLOX目標檢測模型;然后在無預訓練的基礎上進行剪枝,在不影響精度的前提下,極限壓縮網絡的模型體積;最后,得到一個性能好、效率高的輕量級目標識別模型。
GP-YOLOX目標檢測網絡的整體算法流程如圖4所示。首先,重構YOLOX原始網絡模型。將常規(guī)卷積替換為輕量級Ghost模塊,充分利用冗余的輸出特征圖,用更加廉價的操作獲得同樣數量的輸出特征圖,同時減少模型的參數量和浮點數運算量,提高模型的運算效率。隨后,在無預訓練的基礎上對重構后的網絡剪枝,既得到了一個輕量級的目標檢測網絡,又不需要額外預訓練的開支,節(jié)約了能耗。
圖4 GP-YOLOX算法流程
Han等[13]認為,在深度卷積神經網絡中存在著豐富甚至冗余的特征圖,這是網絡得以充分理解輸入信息的重要保證,并據此提出了輕量化卷積模塊:Ghost Module。給定輸入特征圖X∈Rc*h*w,其中c、h、w分別為特征圖的輸入通道數、高和寬。假設卷積核大小為f∈Rc*n*k*k,標準卷積運算可以表示為:
Y=X*f+b
(1)
其中,*表示卷積操作,b表示偏置項。如圖5(a)所示,在經過標準卷積運算后,輸出特征圖大小為Y∈Rn*h*w'??梢缘玫剑瑯藴示矸e操作的浮點數運算量為n*c*h'*w'*k*k。
如圖5(b)所示,Ghost模塊用更為廉價的線性操作替換運算量巨大的卷積操作。Ghost模塊首先采用
(a)標準卷積
標準卷積生成m個特征圖,且m≤n,稱為本源特征。而后通過廉價線性操作生成s個幻影特征圖。
(2)
Y={y11,y12,…,yms}
(3)
rs=
≈s
(4)
若d*d的幅度與k*k相似,且s遠小于c,則可得到理論加速比rs為s。相似的,參數壓縮比為:
(5)
傳統(tǒng)的剪枝基本采用三階段流程,即預訓練、剪枝和微調。通常認為,剪枝需要在預訓練提供了冗余參數和結構的前提下進行,而最終得到的壓縮網絡結構及參數和原始模型并沒有依賴關系,但這一步往往耗費了研究人員的大量時間精力,也造成了不必要的能耗開銷和碳排放。如何避免預訓練,直接從一個初始化的模型中得到壓縮網絡成了學術界研究的熱點。
2020年,Wang[20]比較不同剪枝模型的結構發(fā)現,從預訓練權重中學到的剪枝結構都是相似的,但從隨機初始化權重中可以學到更加多樣化、更加有效的剪枝結構,也就是說,在隨機初始化的原始模型中包含著更大的剪枝搜索空間,于是提出了一種無需預訓練剪枝的策略。
對一個隨機初始化的深度神經網絡f(x;W,α),其中x為輸入樣本,W為訓練參數,α為模型結構。在NAS研究中,α通常包括算子類型、數據流拓撲結構和各層超參數。剪枝流程如圖6所示。
首先,學習通道重要性。在此階段,不進行權重的更新。為了高效地學習各層通道重要性,賦予第j層一個標量門值λj,將該門值與相應網絡層的輸出逐通道相乘。門值越接近0,就越會抑制對應通道的輸出,從而產生類似剪枝的效果。將整個模型的門值記為Λ={λ1,λ2,…,λk},其中K為模型層數,則其優(yōu)化目標為:
s.t.0≤λj≤1 ?j=1,2,…,K
(6)
其中,yi表示對應的標簽,L表示交叉熵損失,λ表示平衡兩項的系數。在優(yōu)化門值的過程中,可以指定目標稀疏比值r,該稀疏比值是指剪枝后模型的浮點數運算量FLOPs與完整的模型的百分比。利用所有門值的平均值來近似整體的稀疏比例,用平方范數將稀疏度逼近為預先定義的比值r,則優(yōu)化的懲罰項為:
(7)
其中,cj是第j層的通道個數。
圖6 剪枝算法流程
最后,使用二分法查找最恰當的剪枝結構。在得到一組優(yōu)化后的門值Λ*后,通過二分法查找滿足給定FLOPs下的全局閾值τ來得到剪枝后的模型結構。尋找剪枝結構的算法如算法1所示。
算法1:尋找剪枝結構算法。
輸入:門值Λ*,浮點數運算量最大約束值C,結構生成器G(Λ),最大迭代次數T,τmin=0;
輸出:最終裁剪閾值τ*,剪枝網絡結構A*。
原料:羊肉片750 g(宜選用內蒙古集寧市產的小尾巴綿羊,而且要閹割過的公羊,這種羊沒有膻味),芝麻醬、紹酒、醬豆腐、腌韭菜花、醬油、辣椒油、鹵蝦油、米醋、香菜末(洗凈消毒)、蔥花適量。
1.fort←1 toTdo:
3.通過裁剪比例τt得到裁剪門值Λt;
4.得到剪枝網絡結構At;
5.計算At的浮點數計算量Ct;
6.if |Ct-C|/C≤εthen
7.τ*=τt,A*=At
8.break
10.ifCt 11.end for 最終得到一個裁剪比例最接近r的剪枝模型結構。 實驗在Ubuntu18.04操作系統(tǒng)上進行,配置2塊Nvidia GTX 2080Ti,cuda10.2,cuDNN7.6.5,采用的深度學習框架為Pytorch1.9.0。 實驗采用FLIR ADAS和KAIST紅外數據集進行算法驗證和比較。FLIR ADAS紅外數據集提供了帶注釋的熱成像圖像及其對應的無注釋RGB圖像,共包含14 452張紅外圖像,均由視頻采樣獲得,所有視頻都來自街道和高速路。大多數圖片的采樣率為1秒兩幀,當環(huán)境中目標較少時,采樣率為1秒1幀。該數據集使用MSCOCO格式進行標注,共有五類目標,分別是行人(person)、兩輪車(bicycle)、小型汽車(car)、狗(dog)和其他車輛(vehicle)。KAIST紅外數據集來自校園、街道等常規(guī)交通場景。數據集共包含95 328張紅外圖像及其對應的RGB圖像,其中訓練集包含50 187張,測試集包含45 141張。其標簽為單個行人(person)、不好區(qū)分的多個行人(people)、騎行者(cyclist)。由于KAIST數據集采樣較為密集,相鄰圖片相差不大,故首先進行數據集清洗,在訓練集中每隔4張圖像取1張,在測試集中每隔9張圖像取1張。經過處理后的KASIT數據集共包含14 551張圖像,其中訓練集10 037張,測試集4 514張。 采用的評價指標包括參數量Params、浮點數運算量GFLOPs、平均類別準確率mAP和平均前向推理時間infer time。 4.2.1 模型重構部分 基于YOLOX原模型,用Ghost模塊代替常規(guī)卷積進行模型重構,得到G-YOLOX模型。該部分針對不同大小的YOLOX模型,如YOLOX-tiny、YOLOX-s、YOLOX-m等都進行了重構實驗。 表1針對這些模型的參數量Params、浮點數運算量GFLOPs、平均類別準確率mAP和平均前向推理時間infer time做了對比??梢钥闯?,雖然YOLO-m和YOLO-l的參數量分別是YOLO-s的3倍和7倍,但準確率并無顯著提升,這說明YOLO-m和YOLO-l中冗余較多,重構模型和剪枝是提高模型效率的必要操作。 表1 改進YOLOX模型在FLIR和KAIST數據集上的性能對比 在YOLOX的四種規(guī)模的模型上,將常規(guī)卷積替換為Ghost模塊后,模型大小均減小了約32%,浮點數計算量也減小了約40%,但精度有約1.8%的下降。 但是,模型的前向推理時間不僅取決于浮點數計算量,也會受到并行化程度和存儲訪問等因素的影響。由于Ghost模塊使得模型變得窄深,減小了網絡的并行化程度,同時使得模型花費了更多的時間在調用、同步上,故前向推理時間略微延長了約0.8 ms。 4.2.2 模型剪枝部分 以G-YOLOX-s和G-YOLOX-m為例,設置不同的稀疏比例對模型進行剪枝。表2為剪枝前后的模型性能對比。其中,“ratio”指的是剪枝后模型的浮點數運算量FLOPs與完整的模型的百分比,“Params”表示剪枝后模型參數量,“Baseline”表示G-YOLOX-s和G-YOLOX-m的mAP,“Pruned”表示剪枝后模型的mAP,“△mAP”表示剪枝前后模型mAP的差值,“△Infer time”表示剪枝前后模型前向推理時間的差值。 可以看出,剪枝后的模型基本保留了剪枝前的性能,模型精度幾乎不變,甚至還有略微的提升。隨著模型越來越稀疏,模型的參數量和前向推理時間較之剪枝前的差值也越大。實驗結果證明,無預訓練直接剪枝也可以在保留模型精度的前提下,大幅減少模型的浮點數運算量和前向推理時間。 表2 剪枝前后模型性能對比 4.2.3 模型對比部分 由于文中更改的主要是YOLOX的骨干網部分,因此本節(jié)將用不同的網絡替換YOLOX的骨干網絡,與文中提出的方法進行對比。 MobileNetv3是當前SOAT的輕量級網絡,該文將其替換YOLOX的骨干網DarkNet,并與提出的GP-YOLOX在FLIR數據集上進行對比,如表3所示。 可以看出,雖然用MobileNetv3替換DarkNet后模型的浮點數計算量略小于GP-YOLOX-s-0.5,但其前向推理速度遠遠大于GP-YOLOX-s-0.5。這符合Ma[8]的發(fā)現:具有相似FLOPs的網絡模型運算速度卻大不相同。FLOPs是判斷模型復雜度的間接指標,并不能夠充分衡量網絡的性能。網絡的運行速度還受到模型的并行程度、計算平臺等因素的影響。因此,提出的模型具有明顯的優(yōu)越性。 表3 不同模型性能對比 針對現有的目標檢測模型參數量龐大、能耗高、剪枝前的預訓練工作對人力物力浪費嚴重等缺點,提出了一種基于YOLOX的輕量級紅外目標檢測算法GP-YOLOX。該算法首先用Ghost模塊重構目標檢測模型,減少了模型的參數量和浮點數計算量;隨后,在無預訓練的基礎上直接對模型進行剪枝,保留了模型精度,又使得模型體積和浮點數運算量進一步減小。 該算法結合了輕量化模塊和通道剪枝兩種手段,在保證精度的前提下,有效壓縮了模型體積和浮點數運算量,減小了模型的能耗和占用的內存資源,提升了模型的運行效率。 實驗結果表明,GP-YOLOX算法對YOLOX四種規(guī)模的模型都進行了有效壓縮,相較于YOLOX算法而言,有更高的檢測效率。4 實驗與分析
4.1 實驗環(huán)境和數據集
4.2 實驗結果與分析
5 結束語