張 瑤,潘志松
(陸軍工程大學(xué) 指揮控制工程學(xué)院,江蘇 南京 210006)
紅外目標檢測是計算機視覺的重要研究方向之一,是跨模式識別、夜間安全監(jiān)測等應(yīng)用的基礎(chǔ),具有重要的研究意義和廣闊的應(yīng)用前景。目前,紅外目標檢測在端側(cè)設(shè)備上的應(yīng)用需求越來越廣泛,這對紅外目標檢測模型的輕量化操作提出了現(xiàn)實要求,使其能夠在資源有限的平臺上依然能夠保持原有的性能。
近兩年,目標檢測領(lǐng)域出現(xiàn)了不少新成果,如無錨框機制[1]、解耦預(yù)測分支[2]、先進標簽分配策略[3]等。研究人員將這些成果與YOLOv3[4]進行了結(jié)合,得到了當前性能最好的目標檢測網(wǎng)絡(luò)YOLOX[5],并在CVPR自動駕駛比賽WAD 2021中取得Streaming Perception Challenge的雙賽道冠軍。同時,為了適應(yīng)不同設(shè)備的算力,研究人員還為YOLOX設(shè)計了六種不同規(guī)模的網(wǎng)絡(luò),模型尺寸由小到大依次為YOLOX-nano、YOLOX-tiny、YOLOX-s、YOLOX-m、YOLOX-l、YOLOX-x,其區(qū)別在于是否采用深度可分離卷積以及使用不同的網(wǎng)絡(luò)寬度和深度。然而,從模型輕量化的角度來看,YOLOX的模型仍有不少冗余。
傳統(tǒng)的模型輕量化方法可以分為輕量化模型設(shè)計、模型剪枝、知識蒸餾、模型量化和神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(NAS)等。1990年,LeCun等人[6]基于信息論,剪除網(wǎng)絡(luò)中不重要的權(quán)重以增強網(wǎng)絡(luò)的泛化能力,是學(xué)界首次提出輕量化的概念。2015年,韓松等人[7]在Deep Compression中將裁剪、權(quán)值共享和量化、編碼等方式運用在模型壓縮上,取得了非常好的效果,引發(fā)了模型輕量化方法研究的熱潮。輕量化模塊設(shè)計是指設(shè)計一個輕量級模塊或卷積方式來代替網(wǎng)絡(luò)中的常規(guī)卷積,以達到壓縮模型體積、減少運算量等目的。如AlexNet[8]提出的組卷積模塊,MobileNet[9]提出的深度可分離卷積模塊,ShuffleNet[10]提出的shuffle channel操作,GhostNet[11]提出的Ghost模塊,ShiftNet[12]提出的Shift操作以及AdderNet[13]提出的加法操作。
模型剪枝是指通過人為設(shè)定的冗余度評價準則來搜索和去除模型中的冗余參數(shù)或神經(jīng)元連接,從而實現(xiàn)減少連接權(quán)重數(shù)量的方法。剪枝的核心問題在于采取何種評價指標判斷權(quán)值的重要性。例如,韓松[7]提出將權(quán)重的絕對值大小作為判斷依據(jù);He等人[14]提出了幾何中位數(shù),并將其作為判斷依據(jù);Liu等人[15]提出了基于Batch Normalization層(簡稱BN層)的scale參數(shù)衡量權(quán)重重要性的方法等。剪枝的經(jīng)典流程由韓松[7]總結(jié)為:預(yù)訓(xùn)練→剪枝→恢復(fù)精度。
除此之外,一些工作[16-17]反思了上述經(jīng)典剪枝流程,并分別提出了“預(yù)訓(xùn)練→剪枝→重新訓(xùn)練”和“隨機初始化→剪枝→訓(xùn)練”兩種流程。
除輕量化模塊設(shè)計外,當前絕大多數(shù)模型輕量化方法都是在預(yù)訓(xùn)練的基礎(chǔ)上進行輕量化設(shè)計,依然無法避免重新訓(xùn)練一個龐大模型帶來的能耗和時間成本。
針對YOLOX模型體積大、浮點數(shù)運算量高、實時性不佳等問題,同時為了避免預(yù)訓(xùn)練帶來的不必要能耗,該文提出了基于無預(yù)訓(xùn)練的GP-YOLOX算法。該算法具有以下特點:
(1)利用輕量級的Ghost模塊重構(gòu)YOLOX的網(wǎng)絡(luò)結(jié)構(gòu),從而壓縮了模型體積和減少了計算量;
(2)對重構(gòu)后的模型進行了無預(yù)訓(xùn)練剪枝,從而避免了由于Ghost模塊使模型變得窄而深導(dǎo)致的模型前向推理時間延長。
實驗表明,基于無預(yù)訓(xùn)練的GP-YOLOX算法能夠在保持和原模型相當?shù)臋z測精度的前提下,大幅壓縮模型體積,減少浮點數(shù)運算量,縮短前向推理時間。
2012年,AlexNet[8]創(chuàng)新性地提出了組卷積,將輸入特征圖按通道進行分組卷積,再將分組卷積得到的結(jié)果按通道進行連接,得到最終的輸出特征,從而實現(xiàn)模型參數(shù)量的成倍減少。然而組卷積會導(dǎo)致組間的信息無法傳遞,輸出特征圖無法包含輸入特征圖的全部信息。為了解決這個問題,Google和曠視科技分別提出了MobileNet[9]和ShuffleNet[12]。2020年,華為諾亞實驗室的Han等人[11]分析了深度卷積神經(jīng)網(wǎng)絡(luò)的特征圖,發(fā)現(xiàn)其中存在著豐富甚至冗余的特征圖,是網(wǎng)絡(luò)得以充分理解輸入信息的重要保證,并據(jù)此提出了一個全新的輕量化卷積神經(jīng)網(wǎng)絡(luò):GhostNet。蘇志明等人[18]將Ghost模塊結(jié)合注意力機制引入了圖像去霧模型;符惠桐等人[19]用Ghost模塊替換了YOLOv4中的傳統(tǒng)卷積;洪愷臨等人[20]用Ghost模塊替換了CenterNet中的傳統(tǒng)卷積,均減少了模型的參數(shù)量和浮點數(shù)計算量。
從20世紀90年代開始,LeCun[6]就提出在訓(xùn)練過程中加入懲罰項使網(wǎng)絡(luò)變得稀疏。大部分的文獻研究的側(cè)重點都在如何判斷權(quán)重的重要性,采取的評價指標有權(quán)重絕對值大小[7]、幾何中位數(shù)[14]、BN層參數(shù)[15]、APoZ[21](Average Percentage of Zeros,激活函數(shù)輸出0的比例)等。絕大部分剪枝算法都遵循韓松[7]提出的“預(yù)訓(xùn)練→剪枝→恢復(fù)精度”的經(jīng)典流程。
然而,近兩年不少研究對這一經(jīng)典流程提出了質(zhì)疑。Frankle等人[16]提出了“彩票假說”,認為精度恢復(fù)這一步驟是不必要的,并通過實驗證明了隨機初始化的子網(wǎng)絡(luò)在重新訓(xùn)練后,依然能夠達到與原網(wǎng)絡(luò)相當?shù)木取ang等人[17]發(fā)現(xiàn)從初始化的原網(wǎng)絡(luò)中能夠獲得更加多樣的剪枝結(jié)構(gòu),對“預(yù)訓(xùn)練”這一步驟提出質(zhì)疑,并提出了一種無預(yù)訓(xùn)練剪枝算法。三種剪枝流程如圖1所示。
YOLOX是曠視科技以YOLOv3為基礎(chǔ),集成了預(yù)測分支解耦(decoupled-head)、Mosaic和MixUp數(shù)據(jù)增強、SimOTA正樣本選擇策略等方法的檢測技術(shù),其骨干網(wǎng)絡(luò)沿用了YOLOv3中的DarkNet53和SPP結(jié)構(gòu),頸部網(wǎng)絡(luò)則采用了YOLOv4[22]中的FPN和PAN結(jié)合的“雙塔”結(jié)構(gòu),前者自頂向下傳遞語義特征,后者自底向上,傳達定位特征,兩者結(jié)合,增強了不同層的信息融合,增強了模型的識別和定位能力。
YOLOX主要有以下兩個特點:
(1)將YOLO系列傳統(tǒng)的基于錨框(Anchor-based)識別改為無錨框(Anchor free)識別。錨框機制存在諸多的缺點,如需要在訓(xùn)練前對訓(xùn)練集的錨框進行聚類分析以獲得最佳的初始錨框設(shè)置,泛化性能較差;錨框增加了檢測頭的復(fù)雜度和生成結(jié)果的數(shù)量,對于邊緣設(shè)備來說無法承擔等。而近年來,無錨框檢測器取得了和錨框檢測器相當?shù)男阅堋@纾現(xiàn)COS(Fully Convolutional One-Stage Object Detection)[23]采用語義分割的思想,以逐像素的方式解決目標問題,在更加簡單快速的基礎(chǔ)上,增加了檢測精度。在改為無錨框機制后,YOLOX的參數(shù)量和計算量都大幅下降。
(2)將YOLO系列傳統(tǒng)的耦合預(yù)測分支解耦。在目標檢測中,分類與回歸任務(wù)的沖突是一種常見問題。因此,分類與定位頭的解耦已被廣泛應(yīng)用到如FCOS[23]、RetinaNet[24]等目標檢測模型中。然而,在YOLO系列中,雖然其骨干網(wǎng)絡(luò)和特征金字塔一直在不斷的更新迭代,但其預(yù)測分支卻一直處于耦合狀態(tài)。如圖2所示,將YOLO的耦合預(yù)測分支替換為輕量解耦預(yù)測分支,在提高模型精度的同時,還使模型能夠更快收斂。
除此之外,為了解決訓(xùn)練中正負樣本間的極端不平衡問題,YOLOX還采用了多正樣本策略,將3×3的中心區(qū)域指定為正樣本。最后,YOLOX采用SimOTA高級標簽分配策略,自動選擇中心區(qū)域內(nèi)成本最小的前k個預(yù)測作為正樣本,減少了訓(xùn)練時間。

圖2 耦合預(yù)測分支與解耦預(yù)測分支
雖然YOLOX在減小模型體積、增強推理實時性方面做了不少努力,但是,從模型輕量化的角度來看,YOLOX的模型仍有不少冗余。
YOLOX的網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。

圖3 YOLOX網(wǎng)絡(luò)結(jié)構(gòu)
針對YOLOX存在的問題,為了設(shè)計一個輕量級的目標檢測網(wǎng)絡(luò),該文提出一種采用Ghost模塊的YOLO目標識別算法GP-YOLOX。GP-YOLOX首先利用Ghost模塊重構(gòu)YOLOX目標檢測模型;然后在無預(yù)訓(xùn)練的基礎(chǔ)上進行剪枝,在不影響精度的前提下,極限壓縮網(wǎng)絡(luò)的模型體積;最后,得到一個性能好、效率高的輕量級目標識別模型。
GP-YOLOX目標檢測網(wǎng)絡(luò)的整體算法流程如圖4所示。首先,重構(gòu)YOLOX原始網(wǎng)絡(luò)模型。將常規(guī)卷積替換為輕量級Ghost模塊,充分利用冗余的輸出特征圖,用更加廉價的操作獲得同樣數(shù)量的輸出特征圖,同時減少模型的參數(shù)量和浮點數(shù)運算量,提高模型的運算效率。隨后,在無預(yù)訓(xùn)練的基礎(chǔ)上對重構(gòu)后的網(wǎng)絡(luò)剪枝,既得到了一個輕量級的目標檢測網(wǎng)絡(luò),又不需要額外預(yù)訓(xùn)練的開支,節(jié)約了能耗。

圖4 GP-YOLOX算法流程
Han等[13]認為,在深度卷積神經(jīng)網(wǎng)絡(luò)中存在著豐富甚至冗余的特征圖,這是網(wǎng)絡(luò)得以充分理解輸入信息的重要保證,并據(jù)此提出了輕量化卷積模塊:Ghost Module。給定輸入特征圖X∈Rc*h*w,其中c、h、w分別為特征圖的輸入通道數(shù)、高和寬。假設(shè)卷積核大小為f∈Rc*n*k*k,標準卷積運算可以表示為:
Y=X*f+b
(1)
其中,*表示卷積操作,b表示偏置項。如圖5(a)所示,在經(jīng)過標準卷積運算后,輸出特征圖大小為Y∈Rn*h*w'。可以得到,標準卷積操作的浮點數(shù)運算量為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。相似的,參數(shù)壓縮比為:
(5)
傳統(tǒng)的剪枝基本采用三階段流程,即預(yù)訓(xùn)練、剪枝和微調(diào)。通常認為,剪枝需要在預(yù)訓(xùn)練提供了冗余參數(shù)和結(jié)構(gòu)的前提下進行,而最終得到的壓縮網(wǎng)絡(luò)結(jié)構(gòu)及參數(shù)和原始模型并沒有依賴關(guān)系,但這一步往往耗費了研究人員的大量時間精力,也造成了不必要的能耗開銷和碳排放。如何避免預(yù)訓(xùn)練,直接從一個初始化的模型中得到壓縮網(wǎng)絡(luò)成了學(xué)術(shù)界研究的熱點。
2020年,Wang[20]比較不同剪枝模型的結(jié)構(gòu)發(fā)現(xiàn),從預(yù)訓(xùn)練權(quán)重中學(xué)到的剪枝結(jié)構(gòu)都是相似的,但從隨機初始化權(quán)重中可以學(xué)到更加多樣化、更加有效的剪枝結(jié)構(gòu),也就是說,在隨機初始化的原始模型中包含著更大的剪枝搜索空間,于是提出了一種無需預(yù)訓(xùn)練剪枝的策略。
對一個隨機初始化的深度神經(jīng)網(wǎng)絡(luò)f(x;W,α),其中x為輸入樣本,W為訓(xùn)練參數(shù),α為模型結(jié)構(gòu)。在NAS研究中,α通常包括算子類型、數(shù)據(jù)流拓撲結(jié)構(gòu)和各層超參數(shù)。剪枝流程如圖6所示。
首先,學(xué)習(xí)通道重要性。在此階段,不進行權(quán)重的更新。為了高效地學(xué)習(xí)各層通道重要性,賦予第j層一個標量門值λj,將該門值與相應(yīng)網(wǎng)絡(luò)層的輸出逐通道相乘。門值越接近0,就越會抑制對應(yīng)通道的輸出,從而產(chǎn)生類似剪枝的效果。將整個模型的門值記為Λ={λ1,λ2,…,λk},其中K為模型層數(shù),則其優(yōu)化目標為:
s.t.0≤λj≤1 ?j=1,2,…,K
(6)
其中,yi表示對應(yīng)的標簽,L表示交叉熵損失,λ表示平衡兩項的系數(shù)。在優(yōu)化門值的過程中,可以指定目標稀疏比值r,該稀疏比值是指剪枝后模型的浮點數(shù)運算量FLOPs與完整的模型的百分比。利用所有門值的平均值來近似整體的稀疏比例,用平方范數(shù)將稀疏度逼近為預(yù)先定義的比值r,則優(yōu)化的懲罰項為:
(7)
其中,cj是第j層的通道個數(shù)。

圖6 剪枝算法流程
最后,使用二分法查找最恰當?shù)募糁Y(jié)構(gòu)。在得到一組優(yōu)化后的門值Λ*后,通過二分法查找滿足給定FLOPs下的全局閾值τ來得到剪枝后的模型結(jié)構(gòu)。尋找剪枝結(jié)構(gòu)的算法如算法1所示。
算法1:尋找剪枝結(jié)構(gòu)算法。
輸入:門值Λ*,浮點數(shù)運算量最大約束值C,結(jié)構(gòu)生成器G(Λ),最大迭代次數(shù)T,τmin=0;
輸出:最終裁剪閾值τ*,剪枝網(wǎng)絡(luò)結(jié)構(gòu)A*。
原料:羊肉片750 g(宜選用內(nèi)蒙古集寧市產(chǎn)的小尾巴綿羊,而且要閹割過的公羊,這種羊沒有膻味),芝麻醬、紹酒、醬豆腐、腌韭菜花、醬油、辣椒油、鹵蝦油、米醋、香菜末(洗凈消毒)、蔥花適量。
1.fort←1 toTdo:
3.通過裁剪比例τt得到裁剪門值Λt;
4.得到剪枝網(wǎng)絡(luò)結(jié)構(gòu)At;
5.計算At的浮點數(shù)計算量Ct;
6.if |Ct-C|/C≤εthen
7.τ*=τt,A*=At
8.break
10.ifCt 11.end for 最終得到一個裁剪比例最接近r的剪枝模型結(jié)構(gòu)。 實驗在Ubuntu18.04操作系統(tǒng)上進行,配置2塊Nvidia GTX 2080Ti,cuda10.2,cuDNN7.6.5,采用的深度學(xué)習(xí)框架為Pytorch1.9.0。 實驗采用FLIR ADAS和KAIST紅外數(shù)據(jù)集進行算法驗證和比較。FLIR ADAS紅外數(shù)據(jù)集提供了帶注釋的熱成像圖像及其對應(yīng)的無注釋RGB圖像,共包含14 452張紅外圖像,均由視頻采樣獲得,所有視頻都來自街道和高速路。大多數(shù)圖片的采樣率為1秒兩幀,當環(huán)境中目標較少時,采樣率為1秒1幀。該數(shù)據(jù)集使用MSCOCO格式進行標注,共有五類目標,分別是行人(person)、兩輪車(bicycle)、小型汽車(car)、狗(dog)和其他車輛(vehicle)。KAIST紅外數(shù)據(jù)集來自校園、街道等常規(guī)交通場景。數(shù)據(jù)集共包含95 328張紅外圖像及其對應(yīng)的RGB圖像,其中訓(xùn)練集包含50 187張,測試集包含45 141張。其標簽為單個行人(person)、不好區(qū)分的多個行人(people)、騎行者(cyclist)。由于KAIST數(shù)據(jù)集采樣較為密集,相鄰圖片相差不大,故首先進行數(shù)據(jù)集清洗,在訓(xùn)練集中每隔4張圖像取1張,在測試集中每隔9張圖像取1張。經(jīng)過處理后的KASIT數(shù)據(jù)集共包含14 551張圖像,其中訓(xùn)練集10 037張,測試集4 514張。 采用的評價指標包括參數(shù)量Params、浮點數(shù)運算量GFLOPs、平均類別準確率mAP和平均前向推理時間infer time。 4.2.1 模型重構(gòu)部分 基于YOLOX原模型,用Ghost模塊代替常規(guī)卷積進行模型重構(gòu),得到G-YOLOX模型。該部分針對不同大小的YOLOX模型,如YOLOX-tiny、YOLOX-s、YOLOX-m等都進行了重構(gòu)實驗。 表1針對這些模型的參數(shù)量Params、浮點數(shù)運算量GFLOPs、平均類別準確率mAP和平均前向推理時間infer time做了對比。可以看出,雖然YOLO-m和YOLO-l的參數(shù)量分別是YOLO-s的3倍和7倍,但準確率并無顯著提升,這說明YOLO-m和YOLO-l中冗余較多,重構(gòu)模型和剪枝是提高模型效率的必要操作。 表1 改進YOLOX模型在FLIR和KAIST數(shù)據(jù)集上的性能對比 在YOLOX的四種規(guī)模的模型上,將常規(guī)卷積替換為Ghost模塊后,模型大小均減小了約32%,浮點數(shù)計算量也減小了約40%,但精度有約1.8%的下降。 但是,模型的前向推理時間不僅取決于浮點數(shù)計算量,也會受到并行化程度和存儲訪問等因素的影響。由于Ghost模塊使得模型變得窄深,減小了網(wǎng)絡(luò)的并行化程度,同時使得模型花費了更多的時間在調(diào)用、同步上,故前向推理時間略微延長了約0.8 ms。 4.2.2 模型剪枝部分 以G-YOLOX-s和G-YOLOX-m為例,設(shè)置不同的稀疏比例對模型進行剪枝。表2為剪枝前后的模型性能對比。其中,“ratio”指的是剪枝后模型的浮點數(shù)運算量FLOPs與完整的模型的百分比,“Params”表示剪枝后模型參數(shù)量,“Baseline”表示G-YOLOX-s和G-YOLOX-m的mAP,“Pruned”表示剪枝后模型的mAP,“△mAP”表示剪枝前后模型mAP的差值,“△Infer time”表示剪枝前后模型前向推理時間的差值。 可以看出,剪枝后的模型基本保留了剪枝前的性能,模型精度幾乎不變,甚至還有略微的提升。隨著模型越來越稀疏,模型的參數(shù)量和前向推理時間較之剪枝前的差值也越大。實驗結(jié)果證明,無預(yù)訓(xùn)練直接剪枝也可以在保留模型精度的前提下,大幅減少模型的浮點數(shù)運算量和前向推理時間。 表2 剪枝前后模型性能對比 4.2.3 模型對比部分 由于文中更改的主要是YOLOX的骨干網(wǎng)部分,因此本節(jié)將用不同的網(wǎng)絡(luò)替換YOLOX的骨干網(wǎng)絡(luò),與文中提出的方法進行對比。 MobileNetv3是當前SOAT的輕量級網(wǎng)絡(luò),該文將其替換YOLOX的骨干網(wǎng)DarkNet,并與提出的GP-YOLOX在FLIR數(shù)據(jù)集上進行對比,如表3所示。 可以看出,雖然用MobileNetv3替換DarkNet后模型的浮點數(shù)計算量略小于GP-YOLOX-s-0.5,但其前向推理速度遠遠大于GP-YOLOX-s-0.5。這符合Ma[8]的發(fā)現(xiàn):具有相似FLOPs的網(wǎng)絡(luò)模型運算速度卻大不相同。FLOPs是判斷模型復(fù)雜度的間接指標,并不能夠充分衡量網(wǎng)絡(luò)的性能。網(wǎng)絡(luò)的運行速度還受到模型的并行程度、計算平臺等因素的影響。因此,提出的模型具有明顯的優(yōu)越性。 表3 不同模型性能對比 針對現(xiàn)有的目標檢測模型參數(shù)量龐大、能耗高、剪枝前的預(yù)訓(xùn)練工作對人力物力浪費嚴重等缺點,提出了一種基于YOLOX的輕量級紅外目標檢測算法GP-YOLOX。該算法首先用Ghost模塊重構(gòu)目標檢測模型,減少了模型的參數(shù)量和浮點數(shù)計算量;隨后,在無預(yù)訓(xùn)練的基礎(chǔ)上直接對模型進行剪枝,保留了模型精度,又使得模型體積和浮點數(shù)運算量進一步減小。 該算法結(jié)合了輕量化模塊和通道剪枝兩種手段,在保證精度的前提下,有效壓縮了模型體積和浮點數(shù)運算量,減小了模型的能耗和占用的內(nèi)存資源,提升了模型的運行效率。 實驗結(jié)果表明,GP-YOLOX算法對YOLOX四種規(guī)模的模型都進行了有效壓縮,相較于YOLOX算法而言,有更高的檢測效率。4 實驗與分析
4.1 實驗環(huán)境和數(shù)據(jù)集
4.2 實驗結(jié)果與分析



5 結(jié)束語