宋玉存,葛泉波,朱軍龍,陸振宇
1.南京信息工程大學(xué) 人工智能學(xué)院(未來技術(shù)學(xué)院),南京 210044
2.南京信息工程大學(xué) 自動(dòng)化學(xué)院,南京 210044
3.南京信息工程大學(xué) 江蘇省大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心,南京 210044
4.南京信息工程大學(xué) 江蘇省智能氣象探測機(jī)器人工程研究中心,南京 210044
5.河南科技大學(xué) 信息工程學(xué)院,洛陽 471000
目標(biāo)檢測任務(wù)就是找出圖像中所有感興趣的目標(biāo)物體,不僅要確定其類別,還要找到其在圖像中的位置,因此目標(biāo)檢測一直以來都是計(jì)算機(jī)視覺的熱門問題之一。由于深度學(xué)習(xí)的廣泛運(yùn)用,使得目標(biāo)檢測算法也由傳統(tǒng)的目標(biāo)檢測算法發(fā)展為基于深度學(xué)習(xí)的目標(biāo)檢測算法[1]?;谏疃葘W(xué)習(xí)的目標(biāo)檢測可分為2 類,分別為One-Stage 目標(biāo)檢測和Two-Stage 目標(biāo)檢測算法。Two-Stage 指的是檢測算法需要分2 步完成,如R-CNN 系列[2-5]算法,首先需要獲取待檢測物體的候選區(qū)域,然后再進(jìn)行分類;與之相對(duì)的是One-Stage 檢測方法,可以理解為一步檢測到位,且不需要單獨(dú)尋找物體的候選區(qū)域,典型算法有SSD/YOLO[6-7]。這2 類算法在檢測準(zhǔn)確度和檢測速度方面各有優(yōu)勢,但目前One-Stage 的目標(biāo)檢測算法的識(shí)別精度已經(jīng)與Two-Stage 的識(shí)別精度不相上下,且One-Stage 的目標(biāo)檢測速度要快于Two-Stage 的目標(biāo)檢測,因此One-Stage 目標(biāo)檢測算法的研究是當(dāng)前主流方向。
在One-Stage 的目標(biāo)算法體系中,無論是在使用范圍和影響力方面YOLO 系列算法都較為突出[8]。原始版本的YOLO 目標(biāo)檢測算法是2016 年提出的,它具有非??斓臋z測速度,但精度還有待提高[6]。同年提出的SSD[7]目標(biāo)檢測算法,相比于YOLOv1[6]進(jìn)一步提高了檢測的精度與速度。隨后,眾多學(xué)者針對(duì)YOLOv1 提出不同的改進(jìn)算法,包括YOLOv2、YOLOv3、YOLOv4和YOLOv5 目標(biāo)檢測算法[9-12]。最新的版本是2021 年由曠視科技提出的YOLOX[13]目標(biāo)檢測算法,它將解耦頭、無錨點(diǎn)以及標(biāo)簽分類等目標(biāo)檢測領(lǐng)域的優(yōu)秀進(jìn)展與YOLO 進(jìn)行了巧妙的集成組合,不僅超越了已有的YOLO 的各個(gè)版本,而且在模型的推理速度上取得極大的突破。然而,在自然界中由于各類物體具有不同的外觀、形狀、大小和姿態(tài),再加上物體成像時(shí)面臨的光照、遮擋和視角等因素,這些都對(duì)目標(biāo)檢測的結(jié)果造成了巨大的影響,從而導(dǎo)致現(xiàn)實(shí)環(huán)境中現(xiàn)有的目標(biāo)檢測算法依然面臨著巨大的挑戰(zhàn),并且如何提升目標(biāo)檢測的精度也成為了眾多學(xué)者的研究熱點(diǎn)[14]。
YOLOX 目標(biāo)檢測算法雖然在各方面的表現(xiàn)都很優(yōu)異,但進(jìn)一步提升和挖掘YOLOX 算法的性能同樣也非常重要。新算法針對(duì)YOLOX 從3個(gè)不同的方向進(jìn)行改進(jìn),分別是數(shù)據(jù)增強(qiáng)、網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù):① YOLOX 算法的數(shù)據(jù)增強(qiáng)會(huì)造成一部分圖像色彩不均衡,從而必將影響網(wǎng)絡(luò)的特征提取,因此采用隨機(jī)增加亮度和對(duì)比度來解決該問題;② 網(wǎng)絡(luò)結(jié)構(gòu)是影響整個(gè)YOLOX 算法精度的重要環(huán)節(jié),因此新算法也從激活函數(shù)和網(wǎng)絡(luò)頭結(jié)構(gòu)進(jìn)行改進(jìn),以進(jìn)一步提升其網(wǎng)絡(luò)模型的精度;③ 由于YOLOX 中所使用的損失函數(shù)并未解決目標(biāo)檢測算法中正負(fù)樣本不均衡問題,新算法通過采用新的損失函數(shù)來應(yīng)對(duì)。
在深度學(xué)習(xí)任務(wù)中,神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的過程需要使用優(yōu)化算法進(jìn)行神經(jīng)網(wǎng)絡(luò)參數(shù)學(xué)習(xí),以使得網(wǎng)絡(luò)損失函數(shù)的值盡可能小。一個(gè)好的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法可以使網(wǎng)絡(luò)模型能夠快速收斂,從而達(dá)到更好的性能表現(xiàn)[15]。深度神經(jīng)網(wǎng)絡(luò)的優(yōu)化能力關(guān)系著網(wǎng)絡(luò)最終的性能表現(xiàn),但其神經(jīng)網(wǎng)絡(luò)數(shù)百千萬的巨大參數(shù)量,使得網(wǎng)絡(luò)參數(shù)的優(yōu)化學(xué)習(xí)也異常困難。目前使用最廣泛的深度學(xué)習(xí)優(yōu)化算法包括隨機(jī)梯度下降法[16]和一些自適應(yīng)學(xué)習(xí)率的優(yōu)化算法。相對(duì)于隨機(jī)梯度下降法,自適應(yīng)學(xué)習(xí)率算法則有更快的收斂速度和良好的泛化性能,因此如何設(shè)計(jì)出更好的自適應(yīng)學(xué)習(xí)率的優(yōu)化算法對(duì)提升神經(jīng)網(wǎng)絡(luò)的性能表現(xiàn)非常重要。
深度神經(jīng)網(wǎng)絡(luò)優(yōu)化算法的研究一直都是眾多學(xué)者研究的熱點(diǎn)。通常根據(jù)優(yōu)化算法在優(yōu)化過程中使用的導(dǎo)數(shù)階數(shù)可以將優(yōu)化算法分為2 大類,分別是一階優(yōu)化算法和二階優(yōu)化算法[17]。其中二階優(yōu)化算法具有快速收斂的特點(diǎn),但由于深度神經(jīng)網(wǎng)絡(luò)的巨大參數(shù)量,二階優(yōu)化算法的計(jì)算過程要求解二階導(dǎo)數(shù),導(dǎo)致二階優(yōu)化算法并不適用于深度神經(jīng)網(wǎng)絡(luò)的優(yōu)化中,因此更多的是對(duì)一階優(yōu)化算法的研究[18]。一階優(yōu)化算法中以梯度下降法和自適應(yīng)學(xué)習(xí)率的優(yōu)化算法使用最為常見,其中自適應(yīng)學(xué)習(xí)率的優(yōu)化算法相比較梯度下降法具有更快的收斂速度,但是其自身泛化能力較差。最早的自適應(yīng)學(xué)習(xí)率優(yōu)化算法AdaGrad[19]于2011 年提出,之后又提出一些改進(jìn)后的自適應(yīng)學(xué)習(xí)率優(yōu)化算法,如AdaDelta 算法[20]、RMSprop 算法[21]以及Adam 算法[22]。其中,Adam 算法自2015 年提出至今一直備受歡迎,且眾多針對(duì)Adam 算法的改進(jìn)自適應(yīng)算法也層出不窮,包括AdaBound 算法[23]、DiffGrad 算法[24]、還有最近2 年的AdaBelief 算法[25]和DecGD 算法[26]等。因此設(shè)計(jì)出一個(gè)好的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法,并將其用在深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中提升網(wǎng)絡(luò)模型性能是極其有意義的,能有效提高神經(jīng)網(wǎng)絡(luò)算法的應(yīng)用性能。
YOLOX 目標(biāo)檢測算法是以YOLOv3_spp作為基準(zhǔn)模型。該模型采用DarkNet53 作為骨干網(wǎng)絡(luò),使用了空間金字塔池化結(jié)構(gòu)(SPP),并添加了EMA 權(quán)值更新、cosine 學(xué)習(xí)率機(jī)制和IoU 損失等策略[13]。YOLOX 通過對(duì)基準(zhǔn)模型做了以下的改進(jìn)以提升神經(jīng)網(wǎng)絡(luò)的檢測精度和速度:① 在模型的輸入端采用了更強(qiáng)的數(shù)據(jù)增強(qiáng)方法,對(duì)于基準(zhǔn)模型的主干網(wǎng)絡(luò)并沒有做出修改,只在網(wǎng)絡(luò)的預(yù)測頭使用解耦頭,這不僅提升網(wǎng)絡(luò)的精度,也加快了網(wǎng)絡(luò)的收斂速度;② 采用anchor free、multi postives 和SimOTA 等方法的共同作用使YOLOX 目標(biāo)檢測算法獲得了優(yōu)越的精度和極快的推理速度;③ YOLOX 又針對(duì)YOLOv5[12]的網(wǎng)絡(luò)做出改進(jìn),包括改進(jìn)了YOLOv5的主干網(wǎng)絡(luò)、在YOLOv5 的Mosaic 數(shù)據(jù)增強(qiáng)方法后使用MixUp[27]數(shù)據(jù)增強(qiáng)方法、采用SiLU 激活函數(shù)[28]等方法。根據(jù)網(wǎng)絡(luò)的大小和深度,對(duì)改進(jìn)的網(wǎng)絡(luò)命名為 YOLOX-S、YOLOX-M、YOLOX-L 和YOLOX-X,網(wǎng)絡(luò)的大小越大深度越深,其網(wǎng)絡(luò)的性能越好[13]。
深度神經(jīng)網(wǎng)絡(luò)模型是一個(gè)高度非線性模型,其訓(xùn)練過程就是求得這個(gè)非線性模型的最優(yōu)解,一般通過求解損失函數(shù)來得到。損失函數(shù)是一個(gè)非凸函數(shù),在求得損失函數(shù)的最優(yōu)點(diǎn)的過程中,可能會(huì)得到損失函數(shù)的局部最小值,從而不能使模型達(dá)到最好的性能。神經(jīng)網(wǎng)絡(luò)優(yōu)化算法就是為了能夠使得網(wǎng)絡(luò)盡可能達(dá)到最優(yōu)解,好的優(yōu)化算法能夠使網(wǎng)絡(luò)模型快速收斂,同時(shí)使得模型有更好的泛化能力。
現(xiàn)有廣泛用于神經(jīng)網(wǎng)絡(luò)的優(yōu)化算法都是一階優(yōu)化算法,它需求得待優(yōu)化目標(biāo)的梯度,并使用一個(gè)學(xué)習(xí)率去控制優(yōu)化算法一點(diǎn)點(diǎn)去接近最優(yōu)點(diǎn),因此優(yōu)化算法學(xué)習(xí)率的選擇則至關(guān)重要[17]。傳統(tǒng)梯度下降法使用一個(gè)固定的學(xué)習(xí)率去一步一步得到最優(yōu)點(diǎn),但固定學(xué)習(xí)率會(huì)導(dǎo)致收斂速度過慢。自適應(yīng)學(xué)習(xí)率的優(yōu)化算法會(huì)在優(yōu)化的過程中根據(jù)待優(yōu)化參數(shù)的不同而分配不同的學(xué)習(xí)率,從而可以使優(yōu)化算法快速收斂,所以如何設(shè)計(jì)一個(gè)更好的自適應(yīng)學(xué)習(xí)率的策略就至關(guān)重要[15]。二階優(yōu)化算法的收斂速度極快,但是由于高昂的計(jì)算成本導(dǎo)致無法用于大規(guī)模的神經(jīng)網(wǎng)絡(luò)優(yōu)化過程。眾所周知,牛頓法就是二階優(yōu)化算法,其收斂速度快主要在于優(yōu)化過程中需要計(jì)算待優(yōu)化函數(shù)的二階矩陣的逆,這里矩陣的逆可以看作是優(yōu)化算法自適應(yīng)的學(xué)習(xí)率[18]。另外,可以通過學(xué)習(xí)二階優(yōu)化算法自適應(yīng)學(xué)習(xí)率的策略,應(yīng)用于一階優(yōu)化算法中,以提升一階優(yōu)化算法的優(yōu)化效果。
為提升YOLOX[13]模型的收斂速度和精度,考慮對(duì)YOLOX 做出進(jìn)一步改進(jìn),主要從數(shù)據(jù)增強(qiáng)、改變網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)的損失函數(shù)3 方面進(jìn)行。同時(shí),設(shè)計(jì)新的基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法并用于YOLOX 網(wǎng)絡(luò)的訓(xùn)練任務(wù),以此來進(jìn)一步提升YOLOX 的模型精度。
1) 在YOLOX 的輸入端使用隨機(jī)增加對(duì)比度和亮度去解決原圖像增強(qiáng)后圖像色彩不均衡的問題。YOLOX 中使用MixUp[27]將經(jīng)過Mosaic 處理過的圖像再與隨機(jī)一張裁剪過的圖像按相同的權(quán)重直接相加融合,融合后的圖片包含了2 張?jiān)瓐D片各一半的信息,與原圖片相比就失去了一半的色彩信息,這會(huì)導(dǎo)致增強(qiáng)后的圖片色彩不均衡。針對(duì)這一問題,通過對(duì)數(shù)據(jù)增強(qiáng)后的圖片使用隨機(jī)增加對(duì)比度和亮度進(jìn)行處理,使其增強(qiáng)后丟失色彩信息的圖像隨機(jī)增加一部分色彩,從而均衡數(shù)據(jù)增強(qiáng)后的圖像。
2) 在YOLOX 網(wǎng)絡(luò)的預(yù)測頭中使用新的激活函數(shù)替代原有的SiLU 激活函數(shù)[28]來增強(qiáng)網(wǎng)絡(luò)的預(yù)測能力。通過改進(jìn)YOLOX 的預(yù)測頭結(jié)構(gòu)來提升網(wǎng)絡(luò)的預(yù)測準(zhǔn)確性,因此從預(yù)測頭網(wǎng)絡(luò)中的激活函數(shù)入手提出一種新的用于YOLOX 預(yù)測頭的激活函數(shù),命名為SoftTanh 激活函數(shù)。YOLOX 中使用的激活函數(shù)是SiLU 激活函數(shù),SoftTanh 激活函數(shù)相對(duì)于SiLU 激活函數(shù)具有更稀疏的特性,更稀疏的激活函數(shù)可以使神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時(shí)更容易收斂,可以進(jìn)一步提升網(wǎng)絡(luò)的精度。
3) 針對(duì)YOLOX 網(wǎng)絡(luò)解耦頭復(fù)雜的卷積結(jié)構(gòu),改進(jìn)的方法對(duì)其解耦頭重新解耦設(shè)計(jì)和優(yōu)化,以提升解耦頭部分的精度[13]。YOLOX 的網(wǎng)絡(luò)解耦頭首先是將分類和回歸解耦成2 個(gè)分支,之后再將回歸部分再解耦成2 個(gè)分支。新算法將分類和回歸直接一步解耦為3 個(gè)分支,將原來回歸的2 個(gè)分支解耦提前與分類分支解耦,這樣的設(shè)計(jì)使得網(wǎng)絡(luò)針對(duì)3 個(gè)解耦分支進(jìn)行了同樣深度和數(shù)量的卷積操作,相比原網(wǎng)絡(luò)增加了2 個(gè)卷積層,進(jìn)一步提升了網(wǎng)絡(luò)的回歸準(zhǔn)確性。
4) 使用FocalLoss 函數(shù)[29]代替YOLOX 網(wǎng)絡(luò)原有的BCEWithLogitsLoss 函數(shù)去解決網(wǎng)絡(luò)分類中正負(fù)樣本不均衡的問題。YOLOX 在計(jì)算目標(biāo)損失使用的是BCEWithLogitsLoss 函數(shù),該函數(shù)在目標(biāo)檢測中主要是用來進(jìn)行樣本的正負(fù)分類。但是在目標(biāo)檢測分類任務(wù)中,正樣本的數(shù)量是要遠(yuǎn)小于負(fù)樣本的數(shù)量,就造成了正負(fù)樣本不均衡的問題,BCEWithLogitsLoss 函數(shù)對(duì)正負(fù)樣本計(jì)算損失時(shí)是按相同權(quán)重計(jì)算,無法使網(wǎng)絡(luò)更好的學(xué)習(xí)正樣本。FocalLoss 函數(shù)針對(duì)正負(fù)樣本賦予不同權(quán)重?fù)p失,使得模型訓(xùn)練時(shí)更專注正樣本的分類,提升網(wǎng)絡(luò)對(duì)正樣本的分類效果,解決正負(fù)樣本不均衡的問題。
5) 提出一種基于梯度差自適應(yīng)學(xué)習(xí)率的新型優(yōu)化算法,用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練以提升網(wǎng)絡(luò)模型的性能表現(xiàn)?,F(xiàn)有優(yōu)化算法中二階優(yōu)化算法比一階優(yōu)化算法好,其主要是因?yàn)槎A優(yōu)化算法需要計(jì)算待優(yōu)化函數(shù)的二階導(dǎo)數(shù),二階導(dǎo)數(shù)表示的是一階導(dǎo)數(shù)的變化率,從函數(shù)圖像上反應(yīng)的是函數(shù)的凹凸性,這也意味著二階優(yōu)化算法考慮了待優(yōu)化函數(shù)的曲率信息?,F(xiàn)考慮用一階梯度的差來表示待優(yōu)化函數(shù)的曲率信息,以梯度差來作為學(xué)習(xí)率自適應(yīng)的一個(gè)策略,同時(shí)引入梯度分解去代替原有的梯度信息,設(shè)計(jì)出基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法。
上述5 點(diǎn)共同改進(jìn)YOLOX 目標(biāo)檢測算法,這5 點(diǎn)改進(jìn)分別針對(duì)的是YOLOX 網(wǎng)絡(luò)的數(shù)據(jù)增強(qiáng)、網(wǎng)絡(luò)結(jié)構(gòu)、損失函數(shù)和優(yōu)化算法,相互之間的作用共同提升了YOLOX 的性能。
在神經(jīng)網(wǎng)絡(luò)中經(jīng)常需要對(duì)訓(xùn)練集使用數(shù)據(jù)增強(qiáng)方法,從而防止神經(jīng)網(wǎng)絡(luò)對(duì)訓(xùn)練集過擬合,同時(shí)數(shù)據(jù)增強(qiáng)也可以彌補(bǔ)訓(xùn)練數(shù)據(jù)不足,達(dá)到擴(kuò)充數(shù)據(jù)集的目的。
2.1.1 YOLOX 的數(shù)據(jù)增強(qiáng)算法
YOLOX 在數(shù)據(jù)增強(qiáng)部分主要使用了Mosaic 和MixUp 數(shù)據(jù)增強(qiáng)算法。Mosaic 數(shù)據(jù)增強(qiáng)方法在YOLOv4[11]中提出,該算法是CutMix 數(shù)據(jù)增強(qiáng)方法的改進(jìn),Mosaic 數(shù)據(jù)增強(qiáng)通過隨機(jī)選取4 張圖像進(jìn)行拼接成一張圖片,以增加單張圖片中的目標(biāo)數(shù)量。對(duì)每張圖像的目標(biāo)位置,拼接后圖像中目標(biāo)位置相對(duì)于原未拼接的圖像中目標(biāo)的位置需要重新計(jì)算,Mosaic 的增強(qiáng)效果如圖1 所示[29]。
圖1 Mosaic 數(shù)據(jù)增強(qiáng)效果圖[29]Fig.1 Mosaic data enhancement picture[29]
通過Mosaic 數(shù)據(jù)增強(qiáng)后,YOLOX 再使用MixUp 數(shù)據(jù)增強(qiáng)方法。MixUp 數(shù)據(jù)增強(qiáng)[27]可以提升網(wǎng)絡(luò)模型的泛化能力,該算法是將隨機(jī)2 張圖片按不同的權(quán)重進(jìn)行融合從而生成一張新的圖像,對(duì)于圖片的標(biāo)簽也按照同樣的權(quán)重進(jìn)行融合生成新的標(biāo)簽,相對(duì)應(yīng)的計(jì)算公式為[27]
式中:λ∈[0,1];xi,j、yi,j分別表示隨機(jī)選取的2 張圖片和相對(duì)應(yīng)圖像的標(biāo)簽。在目標(biāo)檢測中λ一般取值0.5,這樣對(duì)于計(jì)算損失函數(shù)時(shí)可以不用考慮數(shù)據(jù)標(biāo)簽。YOLOX 是將Mosaic 數(shù)據(jù)增強(qiáng)后的圖片和隨機(jī)選取的一張圖片進(jìn)行MixUp 數(shù)據(jù)增強(qiáng),圖片的融合效果如圖2 所示[30]。
圖2 MixUp 數(shù)據(jù)增強(qiáng)效果圖[30]Fig.2 MixUp data enhancement picture[30]
圖2 (a)為隨機(jī)選取的待融合的圖像,圖2(b)為MixUp 將待融合的圖像和經(jīng)過Mosaic 數(shù)據(jù)增強(qiáng)[11]后的圖像融合的結(jié)果,通過加權(quán)融合后的圖像包含了更多待檢測的目標(biāo),但是也讓圖像丟失了一部分色彩信息。為了進(jìn)一步增強(qiáng)模型的泛化能力和魯棒性,對(duì)融合后的數(shù)據(jù)采取進(jìn)一步的數(shù)據(jù)增強(qiáng),使增強(qiáng)后的圖像恢復(fù)一部分色彩信息。
2.1.2 改進(jìn)YOLOX 的數(shù)據(jù)增強(qiáng)算法
改進(jìn)YOLOX 的數(shù)據(jù)增強(qiáng)算法是在原有數(shù)據(jù)增強(qiáng)算法后再使用隨機(jī)改變圖像的對(duì)比度和亮度的數(shù)據(jù)增強(qiáng)算法,通過隨機(jī)對(duì)圖像像素加減某個(gè)值來改變圖像的亮度和隨機(jī)對(duì)圖像像素乘某個(gè)值來改變圖像的對(duì)比度,即
式中:xiω表示改變圖像對(duì)比度,增加的ψ表示亮度的變化,ω∈[1,2],ψ∈[-10,10]為隨機(jī)值以達(dá)到對(duì)每張圖像數(shù)據(jù)隨機(jī)改變圖像的對(duì)比度和亮度的效果。同時(shí)為了防止增強(qiáng)后的圖像數(shù)據(jù)出現(xiàn)像素值過小或者像素值溢出,需要對(duì)增強(qiáng)后的數(shù)據(jù)進(jìn)一步處理,對(duì)增強(qiáng)后像素值<0 的像素點(diǎn)置0,對(duì)于增強(qiáng)后的像素值>255 的像素點(diǎn)設(shè)置為255,這樣便改變了增強(qiáng)后圖像的對(duì)比度和亮度。將隨機(jī)改變圖像的對(duì)比度和亮度的數(shù)據(jù)增強(qiáng)算法用在YOLOX 數(shù)據(jù)增強(qiáng)算法之后,使融合后的圖像恢復(fù)一部分色彩信息,以提升網(wǎng)絡(luò)模型的特征提取效果。
在神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)中要使用激活函數(shù),使用不同的激活函數(shù)就會(huì)有不同的網(wǎng)絡(luò)結(jié)構(gòu),不同的激活函數(shù)對(duì)網(wǎng)絡(luò)模型的影響也不同。一般激活函數(shù)都是非線性的,這樣可以為網(wǎng)絡(luò)模型加入非線性因素,因?yàn)榫€性模型的表達(dá)能力有限,好的激活函數(shù)能使網(wǎng)絡(luò)的性能得到很大的提升。
2.2.1 YOLOX 中的激活函數(shù)
YOLOX 將YOLOv5[12]網(wǎng)絡(luò)中使用的所有激活函數(shù)都改進(jìn)為SiLU 激活函數(shù)[28],該激活函數(shù)在深度模型上要優(yōu)于傳統(tǒng)ReLU 激活函數(shù)[31],具有光滑、非單調(diào)、無上界和有下界的特點(diǎn)。
2.2.2 改進(jìn)YOLOX 中的激活函數(shù)
為進(jìn)一步提升YOLOX 網(wǎng)絡(luò)的性能表現(xiàn),針對(duì)YOLOX 的網(wǎng)絡(luò)結(jié)構(gòu)做出改進(jìn),提出了新的激活函數(shù)去替代YOLOX 檢測頭的激活函數(shù),新的激活函數(shù)相比于其他激活函數(shù)具有更平滑的激活函數(shù)特性,更平滑的激活函數(shù)特性具有更好的泛化能力和有效的優(yōu)化能力,可以進(jìn)一步提高網(wǎng)絡(luò)模型質(zhì)量。
新的激活函數(shù)為式(7),命名為SoftTanh 激活函數(shù),使用SoftTanh 激活函數(shù)替代YOLOX 網(wǎng)絡(luò)預(yù)測頭的SiLU 激活函數(shù)[28],以提升YOLOX目標(biāo)檢測算法預(yù)測頭的精度,ReLU[31]、SoftTanh和SiLU 激活函數(shù)圖像如圖3 所示。SoftTanh 激活函數(shù)在整個(gè)區(qū)間都具有良好的特性。
圖3 激活函數(shù)的圖像Fig.3 Image of activation function
1) SoftTanh 函數(shù)在>0 的區(qū)間保持了ReLU激活函數(shù)良好的線性特性。從激活函數(shù)的圖像可以看到SoftTanh 函數(shù)在輸入>0 的區(qū)間保留了與ReLU 激活函數(shù)相同的特性,從函數(shù)圖像表現(xiàn)為ReLU 激活函數(shù)圖像與SoftTanh 函數(shù)基本重合,這一點(diǎn)相比于SiLU 激活函數(shù)更好。
2) SoftTanh 函數(shù)在<0 的區(qū)間具有更強(qiáng)的稀疏性,可以加快網(wǎng)絡(luò)的計(jì)算。在<0 的區(qū)間保留了一定的負(fù)值,這樣彌補(bǔ)了ReLU 激活函數(shù)<0 時(shí)激活值為0、梯度為0 的缺陷,與SiLU 激活函數(shù)相比較,當(dāng)x→-∞時(shí),SoftTanh 激活函數(shù)更快地趨近于0,這一點(diǎn)可以從圖3 的函數(shù)曲線圖看到。除此之外,通過求當(dāng)x→-∞時(shí),求SoftTanh 激活函數(shù)和SiLU 激活函數(shù)之商的極限來判斷2 個(gè)激活函數(shù)誰更快地趨近于0,通過計(jì)算可以證明SoftTanh 激活函數(shù)在負(fù)區(qū)間更快趨近于0,那么給定的輸入激活后的值就為0,在神經(jīng)網(wǎng)絡(luò)中就表示激活的矩陣中包含很多0,矩陣中更多的0 就意味著網(wǎng)絡(luò)模型是稀疏的,稀疏網(wǎng)絡(luò)因?yàn)橐?jì)算的東西更少,網(wǎng)絡(luò)的計(jì)算速度也更快[31]。
將3 種激活函數(shù)應(yīng)用到8 層隨機(jī)初始化的全連接神經(jīng)網(wǎng)絡(luò)中,輸入單張圖像并對(duì)神經(jīng)網(wǎng)絡(luò)的輸出進(jìn)行可視化處理,其圖像如圖4 所示,依次是輸入圖像,使用ReLU、SiLU 和SoftTanh 激活函數(shù)的8 層全連接神經(jīng)網(wǎng)絡(luò)輸出圖像。從圖4 可以看到,與SoftTanh 輸出的平滑輪廓相比,ReLU的輸出特征圖有許多直接的過渡。SoftTanh 的輸出同樣要比SiLU 的輸出更加平滑,更平滑的輸出意味著平滑的損失,從而具有更容易的優(yōu)化和更好的泛化特性。
圖4 3 種激活函數(shù)在8 層隨機(jī)初始化神經(jīng)網(wǎng)絡(luò)的輸入輸出圖像Fig.4 Three activation functions randomly initializing input and output images of neural network in eight layers
2.2.3 改進(jìn)YOLOX 中的解耦頭
傳統(tǒng)的YOLO 算法的檢測頭通常是直接通過分類和回歸分支融合共享來實(shí)現(xiàn)的,YOLOX中網(wǎng)絡(luò)檢測頭通過對(duì)融合特征的解耦來實(shí)現(xiàn)分類和回歸,這種解耦的設(shè)計(jì)不僅僅在精度上有所提高,而且也加快了YOLOX 網(wǎng)絡(luò)的收斂速度[13]。針對(duì)YOLOX 網(wǎng)絡(luò)的解耦頭設(shè)計(jì),將檢測頭進(jìn)一步解耦,原YOLOX 解耦頭的設(shè)計(jì)和改進(jìn)YOLOX 解耦頭的設(shè)計(jì)如圖5 所示。YOLOX 的網(wǎng)絡(luò)解耦頭是將分類和回歸解耦成2 個(gè)分支,之后再將回歸部分再解耦成2 個(gè)分支。新算法將分類和回歸直接一步解耦為3 個(gè)分支,將原來回歸的2 個(gè)分支提前解耦與分類解耦,這樣的設(shè)計(jì)使得網(wǎng)絡(luò)針對(duì)3 個(gè)解耦分支進(jìn)行了同樣深度和數(shù)量的卷積操作,比原網(wǎng)絡(luò)增加了2 個(gè)卷積層,相應(yīng)的因?yàn)榫矸e層數(shù)的增加,整個(gè)網(wǎng)絡(luò)的參數(shù)量和計(jì)算量也都有所增加,通過計(jì)算可以得到Y(jié)OLOX-S 和改進(jìn)后YOLOX-S 的參數(shù)量和運(yùn)算量。
圖5 改進(jìn)YOLOX 解耦頭Fig.5 Improved YOLOX decoupled head
從表1 可以看到增加卷積層后的YOLOX-S相比于原網(wǎng)絡(luò)參數(shù)量增加了10.1%,相應(yīng)的運(yùn)算量增加了17.6%。雖然整個(gè)網(wǎng)絡(luò)的參數(shù)量和運(yùn)算量有所增加,但通過實(shí)驗(yàn)可以發(fā)現(xiàn)增加卷積層的YOLOX-S 與原網(wǎng)絡(luò)相比,網(wǎng)絡(luò)回歸的準(zhǔn)確性得到了提升,可以從圖6[32]看到。
表1 改進(jìn)的YOLOX-S 的參數(shù)量和運(yùn)算量Table 1 Improved YOLOX-S parameters and FLOPs
圖6 原網(wǎng)絡(luò)與增加卷積層的YOLOX-S目標(biāo)檢測效果圖[32]Fig.6 YOLOX-S object detection results of original network and added convolutional layer[32]
圖6 中左圖為原YOLOX-S 目標(biāo)檢測結(jié)果,右圖為增加2 層卷積后的目標(biāo)檢測結(jié)果,可以看到圖中右上角的立交橋在原YOLOX-S 網(wǎng)絡(luò)中并未被檢測到,增加卷積層后的YOLOX-S 網(wǎng)絡(luò)回歸準(zhǔn)確性得到了提升,位于右上角的立交橋也被檢測到。因此,對(duì)YOLOX 的解耦頭進(jìn)一步解耦,雖然網(wǎng)絡(luò)參數(shù)和運(yùn)算都有所增加,但對(duì)于提升網(wǎng)絡(luò)回歸準(zhǔn)確性也具有明顯效果。
損失函數(shù)是用來評(píng)估模型的預(yù)測值與真實(shí)值之間的差值,在深度學(xué)習(xí)的訓(xùn)練過程中,往往需要通過使損失函數(shù)最小化,從而使得訓(xùn)練的模型能夠收斂,選擇一個(gè)好的損失函數(shù)可以使得模型具有更好的性能表現(xiàn)。
2.3.1 YOLOX 中的損失函數(shù)
YOLOX 網(wǎng)絡(luò)的損失函數(shù)包括3 部分,分別是IoU 損失,類別損失和目標(biāo)損失[13]。IoU 損失的作用是通過計(jì)算預(yù)測目標(biāo)框與真實(shí)目地之間的交并比來使得網(wǎng)絡(luò)能夠更加準(zhǔn)確地預(yù)測出目標(biāo)框的位置信息;類別損失是計(jì)算目標(biāo)類別的真實(shí)值與預(yù)測值之間的損失;目標(biāo)損失的作用是通過判斷當(dāng)前預(yù)測候選框是目標(biāo)還是背景,進(jìn)一步使網(wǎng)絡(luò)能更加準(zhǔn)確地將目標(biāo)與背景分開。在YOLOX 的網(wǎng)絡(luò)中,類別損失和目標(biāo)損失都使用了BCEWithLogitsLoss 函數(shù)[29],該函數(shù)是對(duì)輸入的數(shù)據(jù)先使用Sigmoid 函數(shù)(8),之后使用BCELoss 函數(shù),常用于多標(biāo)簽分類任務(wù)。
2.3.2 改進(jìn)YOLOX 中的損失函數(shù)
在目標(biāo)檢測中One-Stage 目標(biāo)檢測的檢測精度要低于Two-Stage 目標(biāo)檢測,主要因?yàn)闃颖绢悇e不均衡造成正負(fù)樣本難分類,解決的方法通常是使用FocalLoss 函數(shù)[29]。該函數(shù)是在交叉熵函數(shù)上做改進(jìn),交叉熵?fù)p失函數(shù)在計(jì)算損失時(shí),每個(gè)樣本使用相同的權(quán)重。在目標(biāo)檢測中,正樣本是檢測的目標(biāo),負(fù)樣本是大量的背景,正負(fù)樣本在數(shù)量上有著非常大的差距,但使用交叉熵?fù)p失函數(shù)并不能使模型能更好地區(qū)分正負(fù)樣本,F(xiàn)ocallLoss 函數(shù)針對(duì)正負(fù)樣本不均衡,分別賦予不同的權(quán)重,對(duì)于正樣本因?yàn)閿?shù)量少,需要設(shè)置更大的權(quán)重,相反,對(duì)于負(fù)樣本設(shè)置較小的權(quán)重。對(duì)于正負(fù)樣本難分類的問題,通過一個(gè)調(diào)制系數(shù),對(duì)容易分類的樣本減小其權(quán)重,對(duì)難以分類的樣本增大其權(quán)重,計(jì)算公式為[29]
式中:σ是根據(jù)正負(fù)樣本的比例來決定的,σ∈(0,1),將σ設(shè)置為FocalLoss 論文默認(rèn)取值0.25,(當(dāng)σ設(shè)置為0.25 時(shí)改進(jìn)的YOLOX-S 算法在RSOD[32]數(shù)據(jù)集中的性能并非最好)。對(duì)此分別設(shè)置參數(shù)σ=0.1,0.2,0.3,實(shí)驗(yàn)發(fā)現(xiàn)當(dāng)參數(shù)σ=0.2 時(shí),改進(jìn)的YOLOX-S 在RSOD 數(shù)據(jù)集中的結(jié)果更好。式(9)中pt表示檢測的結(jié)果,其值的范圍是[0,1],該值越大表示可信度越高,越容易分類樣本,相反,值越小可信度越小,更難分類。γ是一個(gè)調(diào)制系數(shù),可以控制容易分類和更難分類樣本的權(quán)重,γ∈(0,5),文中默認(rèn)取值為2。當(dāng)pt越大表示越容易分類,則(1-pt)2也就更小,損失函數(shù)的值也就越小。當(dāng)pt越小表示越難分類,則(1-pt)2也就更大,損失就更大,損失變大會(huì)使神經(jīng)網(wǎng)絡(luò)更傾向于更難分類樣本參數(shù)的學(xué)習(xí),從而提升神經(jīng)網(wǎng)絡(luò)對(duì)難分類樣本的分類準(zhǔn)確性。
自適應(yīng)學(xué)習(xí)率的優(yōu)化算法框架都是基于梯度下降法改進(jìn)的,區(qū)別在于兩者學(xué)習(xí)率的設(shè)置不同。在隨機(jī)梯度下降算法[16]中,針對(duì)每個(gè)待優(yōu)化的參數(shù)學(xué)習(xí)率α是一致的,算法迭代公式為
式中:θ是待優(yōu)化的參數(shù);gt表示待優(yōu)化函數(shù)的梯度,通常在使用隨機(jī)梯度下降法時(shí)更普遍使用帶動(dòng)量項(xiàng)的隨機(jī)梯度下降法[33],即
式中:mt為動(dòng)量項(xiàng),通過指數(shù)加權(quán)平均包含了過去梯度的信息,可以使梯度下降的方向基于過去累計(jì)梯度的方向。自適應(yīng)學(xué)習(xí)率優(yōu)化算法的學(xué)習(xí)率是針對(duì)不同參數(shù)有不同的學(xué)習(xí)率,最早的自適應(yīng)學(xué)習(xí)率優(yōu)化算法AdaGrad[19]是通過積累過去梯度的平方和的根來實(shí)現(xiàn)自適應(yīng)學(xué)習(xí)率,即
式中:Gt是過去t次迭代梯度的和;ε是為了保持分母數(shù)值穩(wěn)定的常數(shù),默認(rèn)取值為10-10。之后就出現(xiàn)了各種自適應(yīng)學(xué)習(xí)率優(yōu)化算法,其中使用最為廣泛的就是Adam 算法[22],它結(jié)合了AdaGrad[19]和RMSProp 算法[21]的優(yōu)點(diǎn),根據(jù)梯度的第一和第二矩的估計(jì)計(jì)算不同參數(shù)的各個(gè)自適應(yīng)學(xué)習(xí)率,即
式中:mt表示梯度gt的指數(shù)加權(quán)移動(dòng)平均值,為梯度的一階矩估計(jì),用來控制模型更新的方向;β1是指數(shù)加權(quán)移動(dòng)平均的衰減率,默認(rèn)取值為0.9;vt表示梯度g2t的指數(shù)加權(quán)移動(dòng)平均值,為梯度的二階矩估計(jì),用來控制學(xué)習(xí)率;β2為指數(shù)加權(quán)移動(dòng)平均的衰減率,默認(rèn)的取值為0.999;m?t和v?t是對(duì)mt和vt進(jìn)行偏差修正;ε是為了保持分母數(shù)值穩(wěn)定的常數(shù),默認(rèn)取值為10-8。AdaBelief 算法[25]針對(duì)Adam 算法做出了改進(jìn),使用(gt-mt)2來代替式(16)中的g2t,使得算法在更新時(shí)方差大減小學(xué)習(xí)率,方差小增大學(xué)習(xí)率,即
式中:β1、β2和ε的默認(rèn)取值與Adam 算法中β1、β2和ε的取值相同,分別為0.9、0.999 和10-8。自適應(yīng)學(xué)習(xí)率的優(yōu)化算法需要根據(jù)過去迭代的梯度信息來實(shí)現(xiàn)學(xué)習(xí)率的自適應(yīng),如何利用過去迭代的梯度信息設(shè)計(jì)出更好的自適應(yīng)學(xué)習(xí)率策略非常關(guān)鍵,DecGD 算法中提出使用損失來實(shí)現(xiàn)學(xué)習(xí)率的自適應(yīng),在網(wǎng)絡(luò)學(xué)習(xí)的過程中,學(xué)習(xí)率的大小應(yīng)該隨著函數(shù)的損失減小而減小,該算法利用復(fù)合函數(shù)
來表示損失函數(shù),其中c默認(rèn)為1,然后對(duì)復(fù)合函數(shù)求導(dǎo)將梯度進(jìn)行分解為復(fù)合函數(shù)和復(fù)合函數(shù)導(dǎo)數(shù)的乘積得到
其中:復(fù)合函數(shù)的導(dǎo)數(shù)為
復(fù)合函數(shù)則使用一元泰勒展開來近似表達(dá),其中復(fù)合函數(shù)的近似為
最后使用2g(x)?g(x)來表示原梯度來實(shí)現(xiàn)梯度下降。
新提出的優(yōu)化算法是基于梯度差的信息來實(shí)現(xiàn)學(xué)習(xí)率的自適應(yīng),同時(shí)結(jié)合了DecGD 方法的梯度分解,使用復(fù)合函數(shù)來表示原損失函數(shù),相比較于現(xiàn)有方法,具有更好的學(xué)習(xí)率自適應(yīng)性。
f(θ)是一個(gè)待優(yōu)化的函數(shù),其函數(shù)圖像如圖7 所示,要求得f(θ)的極小值,可使用隨機(jī)梯度下降法迭代法,但是在隨機(jī)梯度下降法中的學(xué)習(xí)率大小不變,固定的學(xué)習(xí)率會(huì)導(dǎo)致算法在最優(yōu)點(diǎn)來回震蕩,難以達(dá)到最優(yōu)點(diǎn)。
圖7 f (θ)函數(shù)圖像Fig.7 f (θ) functional image
基于梯度差的自適應(yīng)學(xué)習(xí)率使用梯度差信息來表示待優(yōu)化函數(shù)的曲率信息,以曲率值的大小來控制學(xué)習(xí)率的變化,設(shè)計(jì)出一個(gè)基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法。在圖7 中,點(diǎn)θ3和θ4在最優(yōu)點(diǎn)附近,學(xué)習(xí)率應(yīng)該設(shè)置的較小,這樣可以避免算法迭代在最優(yōu)點(diǎn)震蕩,在最優(yōu)點(diǎn)之外,點(diǎn)θ1和θ2或點(diǎn)θ5和θ6處學(xué)習(xí)率可以設(shè)置較大一點(diǎn),這樣可以使算法快速迭代到最優(yōu)點(diǎn)附近。最優(yōu)點(diǎn)附近的梯度差|g(θ4)-g(θ3)|要大于最優(yōu)點(diǎn)之外的梯度差|g(θ2)-g(θ1)|和|g(θ6)-g(θ5)|,因此可以利用梯度差信息來控制學(xué)習(xí)率在算法迭代過程中的大小。在最優(yōu)點(diǎn)附近,梯度差大,學(xué)習(xí)率小;在最優(yōu)點(diǎn)之外,梯度差小,學(xué)習(xí)率大,學(xué)習(xí)率的大小與梯度差成反比。
式中:Δgt為梯度差,表示當(dāng)前梯度gt與過去梯度gt-1的差值,使用梯度差作為學(xué)習(xí)率自適應(yīng)的一個(gè)策略,這個(gè)差值可以反應(yīng)出待優(yōu)化函數(shù)的曲率變化信息,通過曲率信息的變化自動(dòng)調(diào)整學(xué)習(xí)率的大小,從而實(shí)現(xiàn)學(xué)習(xí)率的自適應(yīng)。當(dāng)前梯度與上一步迭代的梯度的差值可能為正值,也可能為負(fù)值,差值的正負(fù)表示曲線向上彎曲還是向下彎曲,與梯度下降的方向沒有關(guān)系,因此可以只考慮差值的大小。
現(xiàn)考慮將基于梯度差自適應(yīng)的策略與梯度分解進(jìn)行結(jié)合,以實(shí)現(xiàn)更好的自適應(yīng)學(xué)習(xí)策略。這里使用對(duì)數(shù)函數(shù)(26)作為損失函數(shù)的復(fù)合函數(shù),損失函數(shù)f(θt)是一個(gè)恒大于零的函數(shù),當(dāng)損失為零時(shí),復(fù)合函數(shù)h(θt)=ln (f(θt)+1)也為零,對(duì)復(fù)合函數(shù)求導(dǎo),得到梯度?h(θt),對(duì)復(fù)合函數(shù)的梯度引入動(dòng)量加速法得到,復(fù)合函數(shù)的本身使用一元泰勒公式近似為式(30)。算法的更新規(guī)則是使用當(dāng)前梯度近似值mtevt和當(dāng)前梯度gt的不同權(quán)重結(jié)合替換傳統(tǒng)梯度下降法的梯度,同時(shí)引入當(dāng)前的梯度差,以實(shí)現(xiàn)基于梯度差自適應(yīng)學(xué)習(xí)率的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法。
式中:mt表示復(fù)合函數(shù)的梯度?h(θt) 的指數(shù)加權(quán)移動(dòng)平均值,參數(shù)β1表示指數(shù)加權(quán)移動(dòng)平均衰減率,默認(rèn)取值0.9。α表示學(xué)習(xí)率,默認(rèn)為0.01,參數(shù)ε既可以防止梯度差作為分母為零,也可以針對(duì)不同的優(yōu)化任務(wù)進(jìn)行適當(dāng)?shù)膮?shù)調(diào)整,默認(rèn)為0.01。β2作為當(dāng)前梯度和當(dāng)前梯度近似梯度融合的權(quán)重,β2∈(0,1),默認(rèn)取值0.3。
通過使用基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法去優(yōu)化高維的非凸函數(shù),并對(duì)其自適應(yīng)學(xué)習(xí)優(yōu)化算法的優(yōu)化過程以及優(yōu)化結(jié)果進(jìn)行可視化,以重點(diǎn)分析其自適應(yīng)學(xué)習(xí)算法的優(yōu)化效果。選用Rastrigin 函數(shù)進(jìn)行優(yōu)化,Rastrigin 函數(shù)是一種典型的非凸函數(shù),函數(shù)圖像如圖8 所示。
圖8 Rastrigin 函數(shù)圖像Fig.8 Rastrigin functional image
Rastrigin 函數(shù)表達(dá)式為
式中:A和n通常設(shè)為10 和2,當(dāng)x=0 時(shí),有全局最優(yōu)點(diǎn)f(0)=0。分別采用不同的優(yōu)化算法針對(duì)Rastrigin 函數(shù)進(jìn)行200 次迭代優(yōu)化并對(duì)其優(yōu)化過程以及優(yōu)化結(jié)果可視化處理。不同優(yōu)化算法的優(yōu)化效果如圖9 所示。因?yàn)镽astrigin 函數(shù)具有多個(gè)局部的極大值點(diǎn)和極小值點(diǎn),其最優(yōu)點(diǎn)在(0,0),常規(guī)的優(yōu)化算法很容易陷入局部最優(yōu)點(diǎn),圖9中的SGDM、Adam 以及AdaBelief 算法在經(jīng)過200 次迭代過程中都陷入了局部最優(yōu)點(diǎn),本文優(yōu)化算法在200 次迭代中經(jīng)過局部最優(yōu)點(diǎn)最終迭代得到全局最優(yōu)點(diǎn)(0, 0)。
圖9 不同優(yōu)化算法在Rastrigin 函數(shù)迭代優(yōu)化效果圖Fig.9 Rastrigin function iterative optimization results with different optimization algorithms
針對(duì)最新的YOLOX 目標(biāo)檢測方法主要從數(shù)據(jù)增強(qiáng)、網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)損失函數(shù)3 個(gè)不同的方面做出改進(jìn),這些改進(jìn)算法共同作用提升了其目標(biāo)檢測的性能。同時(shí)設(shè)計(jì)出一種新的基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法,將該優(yōu)化算法用于訓(xùn)練改進(jìn)過的YOLOX 目標(biāo)檢測任務(wù),進(jìn)一步提升目標(biāo)檢測的精度,并且該優(yōu)化算法也可以用在其他神經(jīng)網(wǎng)絡(luò)的訓(xùn)練任務(wù)中去。
改進(jìn)的YOLOX 目標(biāo)檢測算法從數(shù)據(jù)增強(qiáng)、網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)3 個(gè)不同方面進(jìn)行改進(jìn),其中還有用于訓(xùn)練改進(jìn)YOLOX-S 的基于梯度差的優(yōu)化算法。
改進(jìn)的數(shù)據(jù)增強(qiáng)方法是作用在輸入網(wǎng)絡(luò)的數(shù)據(jù),式(3)是對(duì)原始數(shù)據(jù)增強(qiáng)后的圖像進(jìn)一步增強(qiáng),恢復(fù)圖像部分色彩信息,再將其輸入到神經(jīng)網(wǎng)絡(luò)中,數(shù)據(jù)增強(qiáng)作用的是數(shù)據(jù)集,數(shù)據(jù)集與神經(jīng)網(wǎng)絡(luò)是2 個(gè)不同的模塊,因此數(shù)據(jù)增強(qiáng)與神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是非直接耦合關(guān)系。改進(jìn)的損失函數(shù)是為了解決數(shù)據(jù)集正負(fù)樣本不均衡的問題,但是數(shù)據(jù)增強(qiáng)與數(shù)據(jù)集的正負(fù)樣本并沒有直接關(guān)系,因此數(shù)據(jù)增強(qiáng)與改進(jìn)損失函數(shù)之間也是非直接耦合關(guān)系。
改變網(wǎng)絡(luò)結(jié)構(gòu)影響的是網(wǎng)絡(luò)的輸出,通過改變網(wǎng)絡(luò)的激活函數(shù)和改進(jìn)網(wǎng)絡(luò)的解耦頭設(shè)計(jì)來改進(jìn)網(wǎng)絡(luò)的部分結(jié)構(gòu),使得網(wǎng)絡(luò)具有更好的預(yù)測能力。改進(jìn)的損失函數(shù)作用在網(wǎng)絡(luò)學(xué)習(xí)分類的能力,式(9)中的損失函數(shù)可以對(duì)正負(fù)樣本設(shè)置不同的權(quán)重,使網(wǎng)絡(luò)對(duì)正負(fù)樣本具有更強(qiáng)的分類能力。2 個(gè)方法分別作用在YOLOX-S 的不同方面,因此是非直接耦合的關(guān)系。用于訓(xùn)練改進(jìn)YOLOX-S 的基于梯度差的優(yōu)化算法單獨(dú)作用于神經(jīng)網(wǎng)絡(luò),因此基于梯度差的優(yōu)化算法與改進(jìn)YOLOX-S 算法之間不存在耦合關(guān)系。
同樣可以通過實(shí)驗(yàn)仿真來驗(yàn)證各改進(jìn)算法之間的耦合關(guān)系,針對(duì)不同的改進(jìn)算法可以通過分步驗(yàn)證,依次驗(yàn)證單個(gè)改進(jìn)算法是否有效。
使用梯度差的信息作為自適學(xué)習(xí)率的策略,同時(shí)將梯度分解的近似梯度去代替原損失函數(shù)的梯度信息,最后在算法的更新上使用了當(dāng)前梯度和近似梯度的不同權(quán)重進(jìn)行更新,梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法的詳細(xì)信息如算法1 所示。其中:f(θ)∈R ,?θ∈Rd,f為最小化的損失函數(shù),θ為屬于Rd的參數(shù);t表示迭代次數(shù);h(θt)=ln (f(θt)+1);gt=?f(θt)表示f(θt)的梯度;Δgt表示梯度差信息;α表示學(xué)習(xí)率,默認(rèn)為10-3;ε為為防止梯度差作為分母為零設(shè)置的參數(shù),默認(rèn)為10-2;β1、β2表示平滑參數(shù),分別設(shè)置為0.9和0.3。
?
基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法結(jié)合了梯度分解和梯度差信息作為自適應(yīng)學(xué)習(xí)率調(diào)整的策略。AdaBelief[25]優(yōu)化算法中使用移動(dòng)指數(shù)加權(quán)平均的算法來計(jì)算當(dāng)前梯度與當(dāng)前梯度動(dòng)量項(xiàng)的差來作為學(xué)習(xí)率自適應(yīng)變化的計(jì)算算法,計(jì)算公式見式(20)。新算法直接使用了當(dāng)前梯度與上一次迭代的梯度的差作為梯度信息的變化,以實(shí)現(xiàn)學(xué)習(xí)率的自適應(yīng)。相比于AdaBelief算法,這樣的計(jì)算方法更加簡單和更易于理解。
DecGD[26]優(yōu)化算法中將損失函數(shù)的梯度分解為2 項(xiàng)的乘積,這2 項(xiàng)通過使用損失函數(shù)的復(fù)合函數(shù)來引入。新算法使用了相似的方法,但是使用了不同的復(fù)合函數(shù)來表示損失函數(shù)。DecGD 優(yōu)化算法使用表示損失函數(shù)的復(fù)合函數(shù),當(dāng)損失函數(shù)f(x)趨近于零時(shí),復(fù)合函數(shù)g(x)只會(huì)無限趨近于c,因此復(fù)合函數(shù)g(x)不具有與損失函數(shù)f(x)相同的極限,無法與損失函數(shù)f(x)的變化做到同步。使用對(duì)數(shù)函數(shù)h(x)=ln (f(x)+1)作為損失函數(shù)的復(fù)合函數(shù),當(dāng)損失函數(shù)f(x)趨近于零時(shí),復(fù)合函數(shù)h(x)與損失函數(shù)f(x)具有相同的極限,因此h(x)更能表達(dá)損失函數(shù)。通過梯度融合以達(dá)到梯度的近似性,從而使梯度更新的模型具有泛化性。
使用在線學(xué)習(xí)框架分析基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法在凸情況下的收斂性,使用遺憾來評(píng)估優(yōu)化算法,即在線預(yù)測ft(θt)和在最優(yōu)點(diǎn)ft(θ*)之間的所有之前差異的總和,遺憾定義為
在線凸優(yōu)化的標(biāo)準(zhǔn)假設(shè)如下:
假設(shè)1①X?Rd是緊凸集;②ft是凸的下半連續(xù)函數(shù),其中g(shù)t=?ft(θt);③D=maxθ,λ∈X||θλ||∞,G=maxt||gt||∞。
根據(jù)假設(shè)1 可以提出以下引理:
引理1假設(shè)函數(shù)ft是有界的凸函數(shù),對(duì)?θ∈Rd,令ht(θ)=ln (ft(θ)+1)。如果ft具有有界的梯度,那么ht也具有有界梯度,并且在可行區(qū)域內(nèi)有界,證明過程參考AdaBelief[25]算法。
根據(jù)假設(shè)1 和引理1,得出假設(shè)2。
假設(shè)2①X?Rd是緊凸集;②ft是凸下半連續(xù)的函數(shù),ht=ln (ft+1),其中l(wèi)t=?ht(θt);③||θ-λ||≤D,||lt||≤H,||gt-gt||≤G,|exp(ht(θt))|≤L。
定理1設(shè){θt}、{st}和{vt}為算法1 得到的序列,對(duì)?t∈[T],有0 ≤β1t≤β1<1,0 ≤β2<1,β11=β1,αt=,st-1≤st,0 <c≤。θ*表示域內(nèi)的最優(yōu)點(diǎn),對(duì)由基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法生成的任意θt,有以下遺憾界,參考AdaBelief[25]優(yōu)化算法的收斂證明思路可得:
推論1設(shè)β1,t=β1λt,0 <λ<1,有:
推論2在定理1 相同假設(shè)情況下,算法1 對(duì)所有的T≥1,可得算法的平均遺憾收斂:
進(jìn)行實(shí)驗(yàn)驗(yàn)證改進(jìn)后的YOLOX-S 目標(biāo)檢測算法在不同數(shù)據(jù)集的表現(xiàn),以及與其他目標(biāo)檢測算法在相同數(shù)據(jù)集上的比較,同時(shí)也將梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法與其他優(yōu)化算法在不同神經(jīng)網(wǎng)絡(luò)上使用相同的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)比較。
實(shí)驗(yàn)驗(yàn)證改進(jìn)后的YOLOX-S 目標(biāo)檢測算法的表現(xiàn),首先在標(biāo)準(zhǔn)的PASCAL VOC 07+12數(shù)據(jù)集[30]進(jìn)行實(shí)驗(yàn),使用的是PASCAL VOC 07+12 的評(píng)價(jià)標(biāo)準(zhǔn),實(shí)驗(yàn)設(shè)備使用的是NVIDIA A4000 顯卡。用未改進(jìn)的YOLOX-S 網(wǎng)絡(luò)[13]進(jìn)行實(shí)驗(yàn)得到一個(gè)基準(zhǔn)的實(shí)驗(yàn)結(jié)果,之后依次使用FocalLoss 函數(shù)、數(shù)據(jù)增強(qiáng)算法、SoftTanh 激活函數(shù)以及解耦頭去改進(jìn)YOLOX-S 并進(jìn)行實(shí)驗(yàn)對(duì)比,驗(yàn)證改進(jìn)的方法對(duì)YOLOX-S 的作用,最后再使用基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法去替換原YOLOX-S 訓(xùn)練所使用的隨機(jī)梯度下降法去訓(xùn)練改進(jìn)的YOLOX-S 網(wǎng)絡(luò)。
實(shí)驗(yàn)采用的評(píng)價(jià)指標(biāo)是平均精度AP,從表2實(shí)驗(yàn)結(jié)果可以看出,使用FocalLoss 函數(shù)后,YOLOX-S 的AP 提升了1.02%,主要是因?yàn)镕ocalLoss 函數(shù)解決了目標(biāo)檢測任務(wù)中正負(fù)樣本數(shù)據(jù)不均衡的問題,數(shù)據(jù)增強(qiáng)、新的激活函數(shù)和解耦頭結(jié)構(gòu)分別從數(shù)據(jù)和網(wǎng)絡(luò)結(jié)構(gòu)方面改進(jìn),分別從不同程度上提升了YOLOX-S 的AP。使用基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法使YOLOX-S 模型進(jìn)一步優(yōu)化,提升了YOLOX-S 的AP。改進(jìn)后的YOLXO-S 算法的AP 相比較于未改進(jìn)的YOLXO-S 算法的AP 提升明顯,雖然各改進(jìn)算法在精度方面對(duì)YOLOX-S 的提升效果大小各異,但總體上共同提升了算法的AP 表現(xiàn)。
表2 改進(jìn)的YOLOX-S 在VOC 數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果Table 2 Experimental results of improved YOLOX-S in VOC datasets
使用相同的設(shè)備用改進(jìn)后的YOLOX-S 算法與YOLOv3[10]算法、YOLOv5s[12]、未改進(jìn)的YOLOX-S[13]算法以及最新由美團(tuán)開源的YOLOv6s[34]算法在RSOD[32]數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)比較,RSOD 數(shù)據(jù)集用于遙感圖像中的物體檢測,其包含飛機(jī)、操場、立交橋和油桶4 類目標(biāo)共976張衛(wèi)星圖像,按照8∶2 隨機(jī)劃分為訓(xùn)練集和驗(yàn)證集進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)使用COCO 評(píng)估標(biāo)準(zhǔn),不同目標(biāo)檢測算法在ROSD 數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果如表3所示。
表3 不同目標(biāo)檢測算法在RSOD 的實(shí)驗(yàn)結(jié)果Table 3 Experimental results of different object detection algorithms in RSOD
從表3 可以看到改進(jìn)后的YOLOX-S 算法在RSOD 數(shù)據(jù)集的不同評(píng)價(jià)指標(biāo)都有提升,這也表明了,通過對(duì)YOLOX-S 從數(shù)據(jù)增強(qiáng)、激活函數(shù)、網(wǎng)絡(luò)結(jié)構(gòu)和優(yōu)化算法方面的改進(jìn)針對(duì)不同的數(shù)據(jù)集也可提升AP。其中AP50和AP75是算法預(yù)測框與真實(shí)框IOU>0.5 和0.75 的平均精度,IOU 越大預(yù)測的越準(zhǔn)確,APS、APM和APL分別表示不同大小目標(biāo)的平均精度,S、M 和L 分別表示小、中和大目標(biāo)。在表3 的實(shí)驗(yàn)結(jié)果可以看到改進(jìn)后的YOLOX-S 在RSOD 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果的大部分指標(biāo)都要優(yōu)于其他算法,其中AP50和AP75的實(shí)驗(yàn)結(jié)果比原YOLOX-S 的實(shí)驗(yàn)結(jié)果分別提升了1.5%和3.1%,精度提升效果明顯。改進(jìn)后的YOLOX-S 在RSOD 數(shù)據(jù)集上APM和APL的實(shí)驗(yàn)結(jié)果要優(yōu)于原YOLOX-S,其中改進(jìn)后的YOLOX-S 的大目標(biāo)檢測中的精度提升明顯,其平均精度提升了2.8%。而且改進(jìn)后的YOLOX 算法與最新的YOLOv6-s 目標(biāo)檢測算法相比較,在各項(xiàng)評(píng)價(jià)指標(biāo)中都有更好的表現(xiàn)。
通過對(duì)RSOD 驗(yàn)證集的目標(biāo)檢測結(jié)果可視化后,可以發(fā)現(xiàn)改進(jìn)后的YOLOX-S 相比于原算法的具體優(yōu)勢在于可以降低圖像中目標(biāo)的漏檢和誤檢問題,具體的情形如圖10[32]所示。對(duì)于圖10(a)中的2 個(gè)操場只檢測到一個(gè),圖10(b)中2 個(gè)操場都檢測到,改進(jìn)后的YOLOX-S 降低了圖像中目標(biāo)的漏檢。圖10(c)中,原YOLOX-S目標(biāo)檢測結(jié)果誤將類似飛機(jī)形狀的草坪檢測為飛機(jī),圖10(d)為改進(jìn)后的YOLOX-S 的目標(biāo)檢測結(jié)果,很明顯改進(jìn)后的YOLOX-S 可以減低目標(biāo)的誤檢。
圖10 原算法(左)與改進(jìn)后算法(右)目標(biāo)檢測結(jié)果圖[32]Fig.10 Object detection result of original(left), and improved algorithm(right)[32]
為驗(yàn)證新的優(yōu)化算法的優(yōu)化效果,使用相同的實(shí)驗(yàn)設(shè)備,分別使用SGDM[16]、Adam[22]、Ada-Belief[25]優(yōu)化算法以及梯度差優(yōu)化算法在RSOD數(shù)據(jù)集訓(xùn)練改進(jìn)后的YOLOX-S 網(wǎng)絡(luò),其中各優(yōu)化器的參數(shù)設(shè)置都為默認(rèn)參數(shù),實(shí)驗(yàn)結(jié)果如表4所示
表4 相同網(wǎng)絡(luò)不同優(yōu)化算法的實(shí)驗(yàn)結(jié)果Table 4 Experimental results of the same network and different optimization algorithms
從表4的實(shí)驗(yàn)結(jié)果可以看到,在使用RSOD 數(shù)據(jù)集和相同的網(wǎng)絡(luò)模型條件下,梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法較其他優(yōu)化算法在AP 上有一定的提升,這也表明基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法具有更好的優(yōu)化效果。采用SGDM 訓(xùn)練改進(jìn)后的YOLOX-S 算法相較于Adam 和AdaBelief 算法有一定的優(yōu)勢,但是與基于梯度差自適應(yīng)優(yōu)化算法訓(xùn)練改進(jìn)后的YOLOX-S 網(wǎng)絡(luò)相比較,基于梯度差自適應(yīng)優(yōu)化算法具有更好的AP 提升。
為驗(yàn)證基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法在其他神經(jīng)網(wǎng)絡(luò)的優(yōu)化結(jié)果,使用該優(yōu)化算法與其他主流的優(yōu)化算法在圖像分類任務(wù)上進(jìn)行實(shí)驗(yàn)比較。在圖像分類任務(wù)中使用CIFAR10 數(shù)據(jù)集[35],分別使用VGG11[36]、ResNet34[37]和DenseNet121[38]經(jīng)典網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn),其中各優(yōu)化器的參數(shù)都為默認(rèn)參數(shù),實(shí)驗(yàn)結(jié)果如圖11 所示。
圖11 CIFAR10 數(shù) 據(jù) 集 在 VGG11、ResNet34 和DenseNet121 的精度曲線Fig.11 Accuracy curves of CIFAR10 datasets in VGG11, ResNet34 and DenseNet121
從圖11 的精度曲線可以看到不同優(yōu)化算法在CIFAR10 數(shù)據(jù)集和各圖像分類網(wǎng)絡(luò)模型的條件下,本文優(yōu)化算法都具有更好的優(yōu)化表現(xiàn),這也表明本文優(yōu)化算法在不同神經(jīng)網(wǎng)絡(luò)中的優(yōu)化都是有效的。本文優(yōu)化算法在VGG11 網(wǎng)絡(luò)中的表現(xiàn)要明顯優(yōu)于其他優(yōu)化算法,在ResNet34 網(wǎng)絡(luò)中本文的優(yōu)化算法也要優(yōu)于SGDM 和Adam優(yōu)化算法,與AdaBelief 優(yōu)化算法的表現(xiàn)不相上下,在DenseNet121 網(wǎng)絡(luò)中本文的優(yōu)化算法的表現(xiàn)也優(yōu)于SGDM 和Adam 優(yōu)化算法,與AdaBeief優(yōu)化算法相比效果也要好一點(diǎn)。
本文針對(duì)最新的YOLOX 目標(biāo)檢測算法從3方面做出改進(jìn),設(shè)計(jì)出基于梯度差自適應(yīng)學(xué)習(xí)率的優(yōu)化算法用于改進(jìn)后的YOLOX 網(wǎng)絡(luò)的訓(xùn)練任務(wù),并通過實(shí)驗(yàn)驗(yàn)證了改進(jìn)后的YOLOX-S 在不同數(shù)據(jù)集的表現(xiàn)要優(yōu)于原YOLOX-S 算法。同時(shí)將基于梯度差自適應(yīng)學(xué)習(xí)率的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法用于其他神經(jīng)網(wǎng)絡(luò)的訓(xùn)練任務(wù),并在不同任務(wù)中進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)驗(yàn)證了基于梯度差自適應(yīng)學(xué)習(xí)率優(yōu)化算法的優(yōu)化表現(xiàn)要優(yōu)于現(xiàn)有的優(yōu)化算法,最后對(duì)本文提出的優(yōu)化算法做出了收斂性證明。未來將會(huì)在不同大小尺寸的YOLOX 網(wǎng)絡(luò)上進(jìn)行改進(jìn),使用更大的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),并將改進(jìn)的算法應(yīng)用到實(shí)際的目標(biāo)檢測任務(wù)中去。