梁禮明,錢艷群,吳媛媛
(江西理工大學 電氣工程與自動化學院,江西 贛州 341000)
目標檢測任務是實例分割、姿態(tài)估計、自動駕駛、視頻分析等任務的基礎,更是計算機視覺領域中非常熱門的研究方向。傳統(tǒng)的檢測算法利用滑動窗口的技術從輸入圖像上提取大量候選框,人工設計特征提取器提取候選區(qū)域的特征,選取合適的分類器進行分類。大數(shù)據時代下,傳統(tǒng)的手工提取的方法已經不能滿足人們對目標檢測的高要求,隨著深度學習技術的發(fā)展和計算機硬件設備的提高,在檢測任務上達到了快速且精確的程度?;谏疃葘W習的目標檢測方法分為2種:基于候選區(qū)域的兩階段檢測和基于回歸的一階段檢測。Ren等[1]提出的Faster RCNN利用候選區(qū)域提取模塊RPN替換SS算法,通過anchor機制生成候選區(qū)域,達到了更為準確的定位和較高的識別精度。Lin等[2]提出的FPN網絡,設計了具有橫向連接的自頂向下的體系結構,使檢測器不再只在網絡的頂層進行檢測。Dai等[3]提出的R-FCN使用全卷積網絡實現(xiàn)計算共享,提高檢測的速度。He等[4]提出的Mask RCNN用ROI Align取代Faster RCNN中的感興趣池化層解決特征圖與原始圖像上的感興趣區(qū)域不對準的問題。Hao等[5]提出的BlendMask采用一種自頂向下與自底向上設計相結合的策略,不但可以用在實例級別的識別檢測任務上,還能很好地解決全景分割問題。
雖然兩階段的目標檢測算法精度更高,但檢測速度較慢,而一般的工業(yè)或是自動駕駛等領域對實時性的要求又很高,所以相比兩階段檢測算法,速度較快的一階段檢測算法更有發(fā)展空間。最有代表性的一階段目標檢測算法是SSD算法[6]和Yolo系列算法[7-12],其中Yolov3[12]是Yolo系列中應用最為廣泛的目標檢測算法。張智等[8]將Yolov3中采用不同深度的空洞卷積引入低層紋理特征豐富高層的語義信息。譚芳等[9]利用FAST角點檢測算法與BRISK特征點描述算法改進Yolov3完成多目標行人跟蹤任務。李軒等[10]在Yolov3的基礎上利用暗通道去霧算法實現(xiàn)圖片增強。許多改進的算法僅僅是針對某個類別,泛化能力較差,無法應對類別多的場景,并不適用于通用目標檢測,尤其是在復雜的環(huán)境和背景下,原Yolov3算法往往存在邊界框的定位不準、對物體的檢測精度不高等問題。本文以Yolov3算法為基礎,提出融合跨階段局部網絡和空間金字塔池化的Yolov3目標檢測算法,通過將主干網絡融合跨階段局部網絡CSPNet提高網絡的學習能力,引入改進的空間金字塔池化結構增強網絡的局部區(qū)域特征,在損失函數(shù)中融入focal loss解決正負樣本不均衡所帶來的問題,旨在保證速度的前提下,提高Yolov3的檢測精度。
2018年提出的Yolov3在Yolov1[7]和Yolov2[11]的基礎做更進一步的改進,采用Darknet53作為基礎網絡,運用殘差結構使得網絡的層數(shù)可以更深,網絡結構中有大量的1×1和3×3的卷積層,特征圖的大小通過調節(jié)卷積步長確定,其網絡結構如圖1所示。
圖1 Yolov3網絡結構框圖
Yolov3借鑒FPN的思想,大的尺寸特征圖用來預測小物體,小的尺寸特征圖用來預測大物體,檢測層共有3個尺度的輸出,分別是在32倍降采樣、16倍降采樣、8倍降采樣進行檢測。輸入圖像是經過主干網絡等一系列卷積層生成的特征圖,經過3×3、1×1卷積之后生成Feature Map1,用經過1×1的卷積層加上上采樣層,與主干網絡的中間層輸出特征進行concat操作,生成Feature Map2,同樣的操作之后產生Feature Map3,Yolov3從主干網絡DarkNet53中共提取了3個不同的特征層進行預測,使用邏輯回歸預測每個邊界框的是否存在檢測目標,然后采用非極大值抑制篩選出最終的檢測結果。此外,Yolov3還借助殘差網絡residual network[13]的思想,在一些層之間設置了快捷路徑(shortcut connections)[13]。這種結構的特點就是能夠通過增加一定的深度來提高準確率,并且能緩解增加深度帶來的梯度消失問題。
Yolov3算法的損失函數(shù)共有3個組成部分,分別是bbox、置信度和類別帶來的誤差。具體損失函數(shù)如下:
Loss=bbxloss+confloss+probloss=
(1)
Yolov3的特征提取網絡DarkNet53借鑒了Resnet[13]的跨層連接操作(如圖2(a)),隨著網絡的層數(shù)加深,對神經網絡所需的推理計算能力的要求進一步提高,目前先進的檢測技術之所以能在計算機視覺任務上取得顯著的成果,很大原因在于具備昂貴的計算資源。為了減輕這種需要大量推理計算能力的問題,本文中將跨階段局部網絡(CSPNet)應用于DarkNet53,CSPNet是wang等[14]提出的一種新型網絡結構體系,主要目的是豐富梯度組合,在緩解計算量的情況下還能提高網絡的學習能力和推理速度,大大減少內存開銷。CSPNet的基本思想是將特征層拆分為2個部分:一部分進行卷積操作,另一部分和之前進行卷積操作的結果concat,利用跨階段的分割與合并策略,能夠有效地減少信息在集成過程中重復使用的可能性[15]。改進的網絡結構如圖2(b)所示。
圖2 融合CSPNet的網絡結構框圖
首先,改進的網絡結構將原來DarkNet53殘差塊的堆疊分成了Shortconv和Mainconv兩部分。Shortconv部分的目的是生成一個大的殘差邊,經過1×1卷積調整通道數(shù)后連至最后。Mainconv部分作為主干部分繼續(xù)進行殘差塊的堆疊,先經過1×1的卷積調整通道數(shù),再經過的卷積增強特征的提取,接著將其輸出進行跨層連接。之后經過的卷積將其通道數(shù)調整為與Shortconv部分相同。最后,將Shortconv部分和Mainconv部分進行堆疊。其中,N的取值依次為1、2、8、8、4。通過將基礎層的特征分成2個部分,然后通過一個跨階段的層次結構合并他們,利用這種方式,使得網絡傳播的梯度信息可以產生較大的相關差異。此外,本文還對激活函數(shù)進行了改進,將原Yolov3的激活函數(shù)LeakyReLU函數(shù)換成Mish函數(shù)。Mish函數(shù)[16]具有“有下界無上界“的特點,可以在訓練過程中有效地避免梯度飽和。此外,Mish激活函數(shù)還具有非單調性和光滑的特點,此特點優(yōu)于LeakyRelu函數(shù)在零點處不光滑、梯度為零的情況。改進的Mish激活函數(shù)能夠很好地提高網絡的學習能力,提升梯度的傳遞效率,公式如下:
Mish=x*tanh(ln(1+ex))
(2)
空間金字塔池化結構(spatial pyramid pooling)原是用于解決卷積神經網絡對圖像重復特征提取的問題[17],并且可以將不同大小的特征圖進行一系列尺度的池化操作,再轉化為所需要的維度的特征向量,有效避免了圖像因為裁剪、縮放所帶來的問題。本文借鑒空間金字塔池化思想,目的是為了進一步獲得局部特征信息,與改進的主干網絡得到的全局特征信息融合,提高檢測精度。如圖3所示,在主干網絡的最后一個特征層的卷積里加入改進的空間金字塔池化結構,先對13×13的特征圖進行1次卷積操作,然后借鑒空間金字塔池化的思想對卷積后的特征圖進行3個不同尺度的池化處理,池化核大小分別為13×13、9×9、5×5,步長均為1,最后將13×13的全局特征圖和經過3個池化操作的局部特征圖進行concat后,再進行1次卷積操作。改進的空間金字塔池化結構可以在很大程度上增加最后一個特征層的感受野,使得上下文特征更加明顯,能夠進一步獲得豐富的局部特征信息。
圖3 改進的空間金字塔池化結構框圖
單階段目標檢測器直接從輸入圖像中產生成千上萬的候選框,在這些密集的檢測框中,只有很少的一部分候選框是包含目標的,其他的都是背景框,因此在訓練過程中存在正負樣本的嚴重不均衡問題。此外,在這些大量的候選框中,還存在許多易分類樣本與難分類樣本,使得損失函數(shù)很難對模型做出正確的指導。Lin等[18]提出一種新的loss計算方案,通過控制正負樣本的權重和控制易分類樣本和難分類樣本的權重來解決上述問題。先以簡單的二分類為例,普通的交叉熵loss為:
(3)
其中,y代表目標的類別標簽,取值為0或1;p代表模型預測y=1的概率。利用簡化交叉熵損失,具體如下:
(4)
此時,交叉熵loss變?yōu)椋?/p>
CE(p,y)=CE(pt)=-loga(pt)
(5)
由于數(shù)據集中存在極大的正負樣本不均衡問題,因此在交叉熵損失函數(shù)中利用與目標存在概率成反比的系數(shù)來調整,在常規(guī)的交叉熵損失函數(shù)前加上一個系數(shù)at來調整正負樣本的影響,通過改變at的值來控制正負樣本對loss的影響,at的表示如下:
(6)
結合式(4)~(6),則可得到:
(7)
其中,a的取值范圍為0~1。如果將a的值設置成0~0.5,就會降低正樣本的權重,增加負樣本的權重;如果將a的值設置成0.5~1,就能增加正樣本的權重,減少負樣本的權重,因此通過改變a的值就能改變正負樣本的權重。此外,focal loss還在交叉熵損失函數(shù)的基礎上設置了一個(1-pt)r調制參數(shù)。以正樣本為例,當網絡能夠正確分類時,此時的樣本是容易分類樣本,pt趨于1,整個調制參數(shù)趨于0,對loss的貢獻很?。划斁W絡不能很好地分類時,此時的樣本是難分類樣本,pt趨于0,調制參數(shù)趨于1。和容易分類樣本相比,難分類樣本的權重就大得多,對loss的貢獻大。通過調整r值以實現(xiàn)調制系數(shù)的改變,其具體公式如下:
FL(pt)=-at(1-pt)γloga(pt)
(8)
改進后的Yolov3損失函數(shù)為:
Loss=bbxloss+confloss+probloss=
(9)
實驗環(huán)境為Linux操作系統(tǒng)Ubuntu 16.04,深度學習開發(fā)環(huán)境的各個軟件版本為:python 3.7,cuda 9.2,cudnn 7.1,Anaconda 3,Pytorch 0.4.1。CPU型號為Intel I7-7800,選用NVIDIA Titan X的GPU。
采用PASCAL VOC數(shù)據集,總共有20種類別。訓練數(shù)據采用VOC 2007訓練驗證集和VOC 2012訓練驗證集,總共有16 551張圖片,包含40 058個樣本框。VOC 2007部分數(shù)據作為驗證集。選用VOC 2012測試集作為測試數(shù)據,總共有4 952張圖片,包含12 032個樣本框。
采用端到端的方式優(yōu)化模型,使用多任務損失函數(shù)優(yōu)化網絡參數(shù)。訓練之前,先將訓練集數(shù)據中的真實框使用K-means聚類的方法得到先驗框的寬和高,總共得到3個尺度9個錨框,分別是(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116×90)、(156×198)和(373×326)。實驗在Pytorch框架上進行,圖像輸入大小為 416×416,通道數(shù)為3,訓練時批量大小設置為16,動量值設置成0.9,在訓練的初始階段,為了加強模型的穩(wěn)定,采用warm up[19]預熱學習率方式。warm up階段分兩輪,先讓學習率逐步增大到0.000 1,等模型相對穩(wěn)定后采用consine衰減[19]讓學習率逐步降低以減小網絡的損失。其模型訓練的學習率示意圖如圖4所示。
圖4 學習率示意圖
損失函數(shù)中的a值設置為0.75,γ值設置為2。圖5為損失函數(shù)訓練曲線,其中橫坐標是迭代次數(shù),縱坐標是loss值,藍色線代表損失值,紅色線代表驗證集的平均精度,數(shù)字是每迭代1 000次的評估結果。從圖5中可以看出:損失函數(shù)一開始下降較快,之后變慢到最后基本穩(wěn)定在0.1左右。
圖5 損失函數(shù)訓練曲線
進行原Yolov3算法與改進Yolov3算法的對比實驗。訓練數(shù)據均采用VOC 07訓練驗證集加VOC 12訓練驗證集,使用平均準確率(mAP)作為評價指標,選取VOC 07測試集作為測試數(shù)據。表1為不同算法在VOC 07測試集上的測試結果。從表1可以看出:在圖像大小輸入相同的情況下,與原Yolov3_416算法相比,改進的算法的mAP值提升了1.8%,與原Yolov2_416算法相比,改進的算法的mAP值提升了4.4%。并且本文改進的算法比一階段檢測算法FSSD的mAP值高9.8%,比兩階段檢測算法R-FCN的mAP值高0.7%,可以看出本文的算法在目標檢測任務上的提升效果較明顯。
表1 不同算法在VOC 07測試集上的結果
將改進型Yolov3算法與原算法在PASCAL VOC 07測試集上進行單種類別的比較,結果如表2所示。
表2 VOC 07測試集單類AP結果 %
從表2可以看出:改進型的Yolov3算法對像鳥、船、瓶子以及飛機等小物體的檢測精度有了明顯提升,說明引入的空間金字塔池化結構對尺度不同的物體尤其是小尺度的物體具有很好的檢測效果。隨機選取VOC 07測試圖片進行測試,如圖6(a)、圖6(c)所示為原Yolov3算法檢測,圖6(b)、圖6(d)所示為改進的算法檢測。從圖中很明顯可以看出:改進的算法檢測出原算法沒有檢測出來的小尺度的人和車,并且相同的目標改進的算法也比原算法檢測精度高。此外,為了證明改進算法在面對現(xiàn)實場景中環(huán)境的復雜性和背景的多樣性時具有較好的魯棒性,對現(xiàn)實中的圖片進行了檢測與展示,如圖6(e)所示為Yolov3算法檢測,圖6(f)所示為本文改進的算法檢測。從檢測效果圖看到,改進的算法檢測出了遠處的卡車和行人,說明改進的算法泛化性能更好。
圖6 測試圖對比
為了驗證每個改進模塊對最終性能的影響,進行了消融實驗,檢測結果均在VOC 07測試集上進行評估,圖片輸入大小均為416×416。實驗結果如表3所示。第1組為原Yolov3算法,其mAP值為79.4%;第2組為融合CSPNet的Yolov3算法,其mAP值為80.3%,因為采用跨階段的分割與合并策略,增強了主干網絡的學習能力,使得其檢測精度提高了0.9%;第3組在前一組的基礎上加入改進的空間金字塔池化結構,其mAP值為80.7%,增加最后一個特征層的感受野,使模型能更好地獲得豐富的局部特征信息,使得其檢測精度提高了0.4%,說明改進的空間金字塔結構對模型整體性能的提升有一定的影響;第4組也就是本文算法,在前一組的基礎上使用了Focal loss,其mAP值為81.2%,說明所改進的損失函數(shù)使得正負樣本不均衡問題得到緩解,不但使檢測精度進一步提升,而且總體相比于原始的Yolov3算法有了很好的改進效果。
表3 消融實驗結果
以Yolov3算法為基礎,針對原算法在復雜的環(huán)境和背景下存在邊界框定位不準、對各個尺度的目標檢測精度不高等問題,提出了一種融合跨階段局部網絡和空間金字塔池化的Yolov3目標檢測算法。該算法將主干網絡融合跨階段局部網絡CSPNet提高網絡的學習能力;為了充分利用網絡的多尺度局部區(qū)域特征,引入一種改進的空間金字塔池化結構增強特征提取能力;在損失函數(shù)中融入focal loss解決正負樣本不均衡所帶來的問題。實驗結果表明:該算法在PASCAL VOC數(shù)據集上的平均精度達到81.2%,比原Yolov3算法精度提高0.7%,并且能夠很好地檢測一些小尺度的目標。從效果圖中可以看出:對于一些遮擋比較嚴重的目標還不能很好地檢測,因此,下一階段的任務是研究如何提高遮擋目標的檢測效果。