李靖宇, 康 曉
(中國北方車輛研究所,北京 100072)
2012年,Hinton和Alex等人為了解決圖像分類任務,提出了基于卷積神經網(wǎng)絡的深度學習算法Alexnet[1],利用GPU加速卷積神經網(wǎng)絡算法,使其在圖像相關任務中的處理速度快速提升.近年來,隨著計算機算力的逐步提高和GPU在深度學習任務中的廣泛使用,大量基于卷積神經網(wǎng)絡的圖像處理算法被提出并應用于相關技術領域.卷積神經網(wǎng)絡在近年來常被用于解決目標檢測、目標跟蹤、語義或實例分割任務.作為圖像識別任務的進一步延伸,目標檢測任務不僅要識別出圖像中的目標物體,還要對這些物體的尺寸和位置進行標識.
常用的目標檢測算法一般分為兩階段方法和端到端方法.以Faster RCNN[2]等為代表的兩階段方法第一步是在待檢測圖像經過卷積處理后得到的特征圖上生成候選框,第二步是對得到的候選框做進一步判斷,確定其所包含物體類別.兩階段目標檢測方法優(yōu)點是準確率高,缺點是其對圖像的處理速度較慢.端到端方法同樣對圖像進行卷積、池化和激活等操作,但其最終直接輸出代表檢測結果的張量中包含檢測目標的類別及位置信息.端到端方法將整個目標檢測流程一體化,其算法結構更加緊湊.除此之外,端到端方法如YOLO系列算法[3]在工作階段速度較快,因此也經常被應用在實時目標檢測任務中.
端到端方法的目標檢測算法通常包括backbone、neck以及head 3個部分.backbone通常對算法輸入圖像進行一系列的卷積及相關操作,得到圖像的特征圖(feature map);Neck部分對特征圖進行處理,通過多尺度等操作提升檢測框架對不同尺寸特征的感知能力;Head部分對neck部分的結果進行少量的卷積及相關操作得到輸出張量,輸出張量一般包含原始圖像中全部的目標尺寸及類別信息.
雖然基于端到端方法的目標檢測框架的3個主體部分是基本固定的,但是每個部分可以有不同的具體實現(xiàn)方式.在head部分,特征提取網(wǎng)絡可以使用VGG、ResNet、DenseNet、Darknet[4-7]等不同框架,設計更加合理的特征提取網(wǎng)絡能夠顯著地提升目標檢測算法的性能.Neck部分對于特征圖的不同操作會進一步影響檢測結果.除此之外,不同的卷積、池化、以及激活函數(shù)的操作,也會影響整個算法的檢測效果.
本研究在YOLOv5算法的基礎上改進其激活函數(shù)和池化操作方法,構建新的目標檢測算法.經過改進后的目標檢測算法在訓練階段具有更準確的梯度變化,權重能夠精確迭代更新.在實驗部分將對提出的目標檢測算法利用現(xiàn)有數(shù)據(jù)集進行準確度測試,驗證其檢測性能.
本研究的目標檢測算法總體結構如圖1所示.該檢測算法分別從backbone、neck以及head 3個部分進行構建.
圖1 本研究目標檢測算法整體結構
首先進行backbone的選取.作為目標檢測算法的第一部分,backbone主要用于提取圖像的各類特征并生成特征圖,并直接影響目標檢測算法的檢測準確率.本研究選取backbone的思路是尋求一種在骨干網(wǎng)絡權重參數(shù)數(shù)量、算法整體工作速度以及目標檢測算法整體準確率之間平衡的結構.基于此思路,使用CSPNet結構[8]作為backbone網(wǎng)絡的基礎組成單元.CSPNet結構上與DenseNet[9]相似,二者之間的不同在于CSPNet將經過卷積操作的特征圖分為兩部分,其中一部分繼續(xù)進行一系列的卷積相關操作,另一部分則不經過處理,直接與第一部分經過處理的結果在特征圖深度方向進行拼接.式(1)和式(2)表示DenseNet中圖像數(shù)據(jù)的前向和反向傳播過程,而式(3)和式(4)代表輸入數(shù)據(jù)在CSPNet結構中的前向傳播和反向傳播過程,其中的變量均為張量形式.
x1=w1*x0,
x2=w2*[x0,x1],
……
xk=wk*[x0,x1,…,xk-1].
(1)
(2)
(3)
(4)
接下來對目標檢測算法的neck部分進行構建.Neck部分的主要構建思路是將backbone中提取出的特征圖進一步處理,拓寬特征圖的感受野,令其能夠包含不同尺度目標的信息,以方便之后的head部分輸出更加精確的結果.基于此思路,本研究借鑒目標檢測框架YOLOv5的思路,對backbone中不同階段的特征圖進行提取.之后將得到的較小尺度特征圖通過上采樣操作與大尺度的特征圖在尺寸上進行對齊,并在特征圖的深度維度上進行拼接,具體操作如圖1的中間分支箭頭部分所示.另外,應用空間特征金字塔池化,令網(wǎng)絡允許不同尺寸的圖像作為輸入,并可以得到統(tǒng)一尺寸的池化特征.
在構建的目標檢測算法中,空間特征金字塔池化操作不采用最大池化操作,而是選擇平滑池化[10]操作.圖2為平滑池化操作的示意圖.圖中,左邊帶有顏色的二乘二網(wǎng)格代表平滑池化操作,三乘三網(wǎng)格代表特征圖,右邊的二乘二網(wǎng)格代表經過平滑池化操作的輸出.
圖2 平滑池化操作示意圖
平滑池化為待采樣區(qū)域的每個像素值分配一個權重因子wi,該權重因子wi的計算方式如式(5)所示.
(5)
式中:j為采樣區(qū)域中包含的所有特征像素數(shù);a為采樣區(qū)域特定點的像素值.
獲得采樣區(qū)域的全部特征后,按照式(6)計算平滑池化的輸出值.在誤差反向傳播階段,采樣操作中各個像素的梯度計算方式如式(7)所示.不同于最大池化中采樣區(qū)域僅單個像素能夠獲得梯度變化的情況,平滑池化能夠令采樣區(qū)域內的所有像素獲得誤差梯度,使網(wǎng)絡權重參數(shù)獲得更多的有效信息,有利于提升網(wǎng)絡整體的識別準確率.
(6)
(7)
head部分負責目標檢測算法的最終輸出.為了使目標檢測算法擁有更強的多尺度目標檢測能力,本算法將head結構設計為3個三維張量,對大、中、小3種尺度的目標進行檢測.將不同尺度的目標放在不同的張量中進行表示不易使目標信息混淆,能夠提高檢測算法的準確率.本算法中3組輸出在寬度與高度的尺寸分別為13×13、26×26、52×52.
在整個模型中,激活函數(shù)是重要的一個組成部分.激活函數(shù)可以抑制不重要的特征輸出,起到強化特征信息表達的作用.在本研究中,整個目標檢測網(wǎng)絡使用了兩種激活函數(shù),分別為ReLU函數(shù)見式(8)和Mish函數(shù)[11]見式(9).
f(x)=max(0,x),x∈R.
(8)
f(x)=x·tanh[ln(1+ex)],x∈R.
(9)
由表達式以及圖3可以看出,Mish函數(shù)相較于ReLU函數(shù)在零點附近具有更加穩(wěn)定的梯度流.根據(jù)之前的討論,更加穩(wěn)定的梯度流能夠使網(wǎng)絡在權重的訓練階段更加穩(wěn)定,不易出現(xiàn)梯度消失現(xiàn)象.
圖3 兩種激活函數(shù)對比圖
本研究的檢測模型并未全局采用Mish函數(shù)作為激活函數(shù),而是在neck部分采用Mish函數(shù),在backbone部分采用ReLU函數(shù).采取這種做法的原因是為了保證backbone骨干網(wǎng)絡能夠直接加載已經最優(yōu)化的網(wǎng)絡權重參數(shù),這樣可以令檢測算法在訓練過程中減少模型訓練次數(shù),提高訓練效率.
首先考慮算法的訓練過程.基于卷積神經網(wǎng)絡的目標檢測算法卷積權重初始化的方法有兩種,分別是隨機初始化和加載預訓練卷積權重.隨機初始化權重參數(shù)一般適用于新提出的算法模型結構,這種初始化方式適用于各種目標檢測算法結構.但是采用該種初始化策略使整個網(wǎng)絡的訓練過程十分緩慢,并易使整個網(wǎng)絡參數(shù)陷入局部最優(yōu),無法取得最佳檢測表現(xiàn).加載預訓練卷積權重一般使用Imagenet等圖像分類數(shù)據(jù)集對算法的卷積網(wǎng)絡參數(shù)進行預訓練,調整卷積網(wǎng)絡參數(shù),也可以利用其他檢測算法中具有同樣結構卷積網(wǎng)絡的權重數(shù)據(jù)直接進行數(shù)據(jù)遷移.加載預訓練權重方式的缺點在與其不能在一種結構算法中加載另一種結構的算法權重.由于直接加載預訓練權重方式能夠節(jié)省大量的訓練時間且該種權重對整個模型的全局訓練影響較小,所以本算法backbone部分采用直接加載預訓練權重的方式進行權重加載.對于neck與head部分的權重參數(shù),則采用隨機初始化方法.
在算法訓練階段,權重更新依賴于網(wǎng)絡輸出值與樣本標簽值的誤差所產生的權重梯度變化.這表示網(wǎng)絡的損失函數(shù)對網(wǎng)絡模型能否收斂,以及網(wǎng)絡模型的最終表現(xiàn)具有直接的影響.目標檢測任務關注的是圖像中目標的類別、位置以及尺寸,所以目標損失函數(shù)應該包含這些因素.對輸入圖像中目標類別進行判斷,本質上可以定義為多分類問題,而對目標位置及尺寸的確定,則可以被歸類為多元回歸問題.針對目標類別多分類問題,本算法采用交叉熵損失函數(shù)計算模型類別輸出值與樣本真值的誤差.交叉熵函數(shù)的表達形式如式(10)所示.
(10)
式中:yic是樣本真值;pic是觀測樣本i屬于類別c的概率;M是待檢測物體類別數(shù)量.
對于目標的定位及尺寸問題,考慮到其回歸問題的本質特性,模型采用均方差損失函數(shù)計算樣本真值與預測值的誤差.將上述交叉熵損失函數(shù)與均方根損失函數(shù)疊加,即得檢測模型的整體損失函數(shù),如式(11)所示.
(11)
整個算法模型使用隨機梯度下降法進行模型訓練,當損失函數(shù)值趨于穩(wěn)定,表示算法模型收斂,此時停止訓練.對于網(wǎng)絡模型的輸出,抑制負樣本輸出的數(shù)量,將正負樣本的比例控制在1∶3,對于不影響正負樣本區(qū)域輸出的網(wǎng)絡權重參數(shù),在誤差反向傳播階段忽略其梯度變化,不對其進行更新.
算法模型在推理階段要求準確地輸出目標的位置及尺寸信息.由算法的結構圖可以看出,本研究構建的目標檢測算法輸出密集,這說明一個正確的輸出周圍有可能存在若干個與真值相近但并非最優(yōu)的輸出.這種輸出將導致圖4所示的情況發(fā)生.
圖4 未經過非極大值抑制的輸出
為了避免上述情況的發(fā)生,可以采用非極大值抑制算法(Non-maximum suppression, NMS)減少候選框的重復產生.非極大值抑制算法的核心思路是計算不同候選輸出之間的交集與并集,并通過它們的比值來確定最后需要保留的候選輸出,其算法偽代碼如圖5所示.
圖5 非極大值抑制流程圖
圖中,B是候選輸出合集,S是候選框對應置信度,D代表最終得到的輸出合集.通過對候選輸出進行非極大值抑制操作,多余的目標檢測結果被去除,目標檢測模型的輸出能夠更加準確簡潔.
為了測試目標檢測算法各個部分獨立的有效性以及模型整體的表現(xiàn),實驗首先對backbone骨干網(wǎng)絡框架、Mish函數(shù)、平滑池化部分的有效性進行測試,之后再對模型的整體有效性進行測試.
首先對backbone的有效性進行實驗.常見的圖像分類數(shù)據(jù)集有CIFAR、Caltech101、ImageNet等.其中CIFAR數(shù)據(jù)集對象種類為10種或100種,數(shù)據(jù)集內圖像像素數(shù)為32×32,尺寸較??;Caltech101數(shù)據(jù)集由101類對象圖片組成,每張圖片的像素大小在300×200;ImageNet數(shù)據(jù)集規(guī)模最大,包含了上萬類對象,以及超過1500萬張圖片,其子集ISLVRC 2012也為常用數(shù)據(jù)集.綜上,從算法模型大小以及訓練時間兩方面因素考慮,選用ISLVRC 2012的部分數(shù)據(jù)并分割為訓練集和測試集,對不同的backbone進行測試,所得結果如表1所示.
表1 各類backbone識別準確率
表1中,Top-1準確率指分類模型輸出結果概率最高項與測試數(shù)據(jù)標簽類別相同的比率.由于數(shù)據(jù)集種類共1000類,所以引入Top-5準確率,表示對于測試集所有數(shù)據(jù),分類網(wǎng)絡輸出概率中最大的5類中包含測試數(shù)據(jù)標簽類別的比率.由表1看出,特征提取網(wǎng)絡在分類任務上的準確率較高,反映了其優(yōu)秀的特征提取能力.
為證明Mish函數(shù)在卷積網(wǎng)絡模型中具有比其他激活函數(shù)更優(yōu)秀的性能,利用圖像分類網(wǎng)絡CSPResNeXt作為分類器,分別用ReLU、Swish、Mish 3種激活函數(shù)在ISLVRC 2012子集上進行測試,其分類結果如表2所示.
表2 各類激活函數(shù)識別準確率
表2中,運用Mish函數(shù)網(wǎng)絡模型較其他激活函數(shù)具有更高的分類準確率.可見Mish函數(shù)的運用能夠增強卷積神經網(wǎng)絡對特征的提取能力.
接下來對平滑池化的性能進行評價,采用的評價方式是分別將常用分類卷積網(wǎng)絡中的最大池化操作替換成平滑池化層,數(shù)據(jù)集同樣采用ISLVRC2012子集,其結果如表3所示.
表3 各類池化操作識別準確率
由表3中結果可以看出,替換為平滑池化操作之后的分類網(wǎng)絡具有更高的識別準確率,這證明了平滑池化的有效性.
現(xiàn)對本研究構建的目標檢測算法進行評價.根據(jù)前文所述,目標檢測算法不僅要對檢測對象的類別進行判斷,還要給出檢測對象的尺寸和位置.在這種情況下,單純的圖像分類數(shù)據(jù)集由于缺少檢測對象位置及尺寸信息,已經變得不再適用.在這種情況下,使用符合目標檢測模型輸出格式的數(shù)據(jù)集才能使模型在反復迭代訓練后具有良好的表現(xiàn).本研究選用COCO數(shù)據(jù)集的子集對網(wǎng)絡模型進行訓練及評價.采用全類別平均準確率(mean Average Precision, mAP)對不同模型的表現(xiàn)進行評價,結果如表4所示.
表4 不同模型目標檢測平均準確率
由表4可以看出,在測試數(shù)據(jù)集上,本文提出的方法具有良好的表現(xiàn).
本研究構建的目標檢測算法側重于在訓練階段的誤差反向傳播過程中為所有的權重參數(shù)提供更加穩(wěn)定與精確的梯度變化信息.本研究提出的算法模型架構并未引入額外的參數(shù),故模型占用空間相較于使用其他激活函數(shù)和池化操作的網(wǎng)絡模型沒有增加,這也是本研究所構建算法模型的一個優(yōu)點.與現(xiàn)有的算法相比,本研究構建的目標檢測算法的平均準確率表現(xiàn)并不是最突出的.究其原因,主要有兩方面的因素:
1)算法的一些超參數(shù)如預設檢測框尺寸等并未經過準確優(yōu)化,圖像數(shù)據(jù)集的預處理以及數(shù)據(jù)增強工作仍有待完善;
2)本研究構建的目標檢測網(wǎng)絡模型在設計方面仍有待改進之處,如損失函數(shù)的回歸部分可將坐標均方差損失替換為交并比損失等.
對以上方面進行改進,可以進一步提升本研究所設計的目標檢測算法的表現(xiàn).