鄒慧海,侯 進
(1.西南交通大學 唐山研究生院,河北 唐山 063000;2.西南交通大學 信息科學與技術學院,成都 611756)
隨著深度學習技術的發展,語義分割、目標跟蹤、目標檢測、車道線檢測在計算機視覺領域得到廣泛關注,尤其是無人駕駛汽車。目標檢測任務是對車輛前方道路環境的目標進行識別檢測及定位,因實際道路環境的復雜多變性,使得該任務面臨諸多挑戰。
傳統的目標檢測方法通常分為區域選擇、特征手工提取、分類回歸3 個步驟。文獻[1]提出一種差異訓練、多尺度的目標檢測方法DPM。該方法通過計算模型梯度方向直方圖(Histogram of Οriented Gradients,HΟG),利用支持向量機(Support Vector Machine,SVM)對模型進行分類訓練,從而得到物體的梯度信息。但是,在網絡選擇區域時因耗費大量時間,導致檢測速度慢,而且手工提取的特征語義信息比較少,導致檢測精度差。
近年來,將深度學習與目標檢測相結合的方法成為研究熱點。相比傳統目標檢測方法,深度學習方法的模型網絡層數深、參數多。在目標檢測領域中,該方法具有較高的檢測精度和較優的實時性。基于此,研究人員將深度學習理論融入到目標檢測工作中。深度學習目標檢測方法分為[2]單階段(one-stage)檢測方法和雙階段(two-stage)檢測方法。基于區域候選框的two-stage檢測方法提取輸入圖像的候選區域,并對其進行候選區域的分類與修正,從而實現目標檢測。代表模型有R-CNN系列,包括R-CNN[3]、Fast R-CNN[4]、Faster R-CNN[5],以及Mask R-CNN[6]等,都具有較優的檢測精度,但是檢測速度較慢,從而無法滿足實時性要求。與此相反,one-stage檢測方法是一種端到端的目標檢測方法,基于回歸分析的原理,利用卷積神經網絡提取圖像的特征信息,以識別檢測目標的位置和類別,能夠有效加快檢測速度。代表模型有YΟLΟ 系列,包括YΟLΟv1[7]、YΟLΟ9000[8]、YΟLΟv3[9]及YΟLΟv4[10]算法、SSD[11]和EfficientDet[12]等。YΟLΟv4[10]檢測模型作為單目標檢測模型類別中的最優模型,在主干部分引入跨階段局部網絡(CSPNet)[13]和特征融合金字塔網絡(PAN)[14],以解決梯度信息重復問題,從而提高同一物體在不同尺度上的識別精度,還可以通過數據增強等訓練方式,提高檢測精度和實時性。
在汽車行駛過程中,目標檢測方法不僅對近距離的大目標進行精準實時檢測,而且還要對遠距離的小目標進行位置檢測。針對道路前方行人和車輛類別的小目標檢測問題,本文提出一種基于改進SSD 的道路小目標檢測算法。通過引入改進特征金字塔網絡,融合不同層感受野特征信息,利用深層特征網絡ResNet50代替VGGNet16,同時在殘差結構中引入批量歸一化,從而提高檢測精度并加快收斂速度。
SSD 是單階段多類別的目標檢測算法,具有較優的檢測精度和較快的檢測速度,但是小目標檢測效果并不理想。SSD[11]網絡結構如圖1 所示。SSD 網絡結構主要分為2 個部分:1)VGGNet16 特征提取網絡,通過提取圖片目標的特征信息,得到特征圖;2)分類回歸層,對每個候選框進行分類與回歸,從而識別檢測出圖片目標。

圖1 SSD 網絡結構Fig.1 Structure of SSD network
SSD 算 法分別在尺度為38×38、19×19、10×10、5×5、3×3、1×1的特征圖上產生候選框,以檢測不同尺度的目標大小。本文是在這些尺度特征圖后通過連接特征金字塔融合結構進行消融實驗,提高小目標的檢測性能。SSD 算法候選框的數量為38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8 732。先驗框尺度的計算如式(1)所示,位置計算如式(2)所示:

其中:h、w為先驗框的長、寬;sk為面積;αr為系數因素;d為距離;cx、cy為距離x、y軸系數。
邊界框位置的計算如式(3)所示:

研究表明,匹配先驗框與邊界框遵循的原理是:首先計算邊界框與先驗框的所有IoU 值,當IoU 值大于等于設定的閾值時,說明匹配成功,即為正樣本;反之為負樣本。若存在一個先驗框與多個邊界框的IoU 值超過設定閾值時,此時匹配其中最大的邊界框為正樣本,剩余的邊界框為負樣本。
SSD 的損失函數采用多任務損失函數,由分類損失值和邊框回歸損失值2 個部分相加得到。其中分類損失采用交叉熵函數,回歸損失采用SmoothL1loss 函數,整體損失函數如式(4)所示:

其中:Lconf為分類損 失;Lloc為回歸損 失;α為權重系數,系數越大,表明回歸損失在整體損失中占比越大,在訓練過程中正樣本的邊框坐標優化效率越高。
ResNet(Residual Network)[15-16]是一種用于深度學習目標檢測的卷積神經網絡主干特征提取網絡,因其高效性和實用性,廣泛應用于計算機視覺檢測、分割、識別等領域。層數越深的網絡可以提取到更加復雜的特征信息,效果也越好,但是網絡層數的增加導致深層梯度在反向傳播過程中越來越小甚至消失,從而阻礙網絡的收斂,即網絡退化問題。網絡退化問題不僅增大了訓練誤差和測試誤差,也降低了網絡精度。
ResNet網絡中的殘差結構(Residual Block)可以解決網絡退化問題,殘差網絡結構對比如圖2 所示。

圖2 不同的殘差網絡結構對比Fig.2 Comparison of different residual networks structure
在殘差網絡結構中,當輸入為x時,殘差學習特征為H(x),網絡層的原始學習特征為F(x)。則殘差結構的學習特征H(x)如式(5)所示:

相比原始學習特征F(x),殘差網絡能夠學習殘差特征H(x),其原因是當卷積網絡層數加深時,特征隨網絡層向下傳遞,而梯度隨網絡層向上回傳。在此過程中,因網絡層數太深導致梯度消失。然而,本文的殘差網絡可以解決此類問題,即使左邊深層網絡向上回傳的梯度值過小甚至消失,但是右邊原始梯度值向上回傳,整體梯度值等于兩邊梯度值相加,從而解決梯度消失的問題。
本文使用的改進殘差結構如圖2(b)所示,在原殘差結構的基礎上,將relu[17]激活函數替換為Leaky-relu[18]激活函數,并加入批量歸一化(Batch Normalization,BN)[19]。在網絡訓練過程中,當relu函數在部分輸入小于0 的情況下,輸出恒為0,導致對應權重難以更新,從而無法訓練學習特征。Leaky-relu 函數在輸入小于0 的情況時,輸出持續變化,以更新權重并繼續學習。BN 是對特征圖進行歸一化處理,加快收斂速度。同樣在訓練時,部分輸入只通過直線連接前向傳播,導致整體結構變成一條直線結構。因此,在殘差結構右側加入1×1 卷積核操作,可以解決上述整體直線結構問題。
隨著網絡層數的加深,主干特征網絡提取特征圖的感受野逐漸增大,導致小目標的有效信息缺失,從而無法檢測出小目標。由于不同深度對應不同層次分辨率的語義特征信息,因此通過學習不同層之間相同的特征信息,提高網絡識別目標的精確度。特征金字塔融合結構如圖3 所示。增加雙向融合的特征金字塔網絡(Path Aggregation Network,PAN)[14]結構能夠有效解決小目標檢測的問題,PAN 結構如圖3(a)所示。通過自底向上和自頂向下融合不同網絡層提取的特征圖,整合不同感受野大小和語義強度的特征信息,以得到目標信息更加豐富的特征圖,從而提高檢測精度。

圖3 特征金字塔融合結構Fig.3 Structure of fusion feature pyramid
PAN 的提出驗證了雙向融合的有效性,但是其結構較簡單。因此,針對實際小目標檢測場景,本文提出更復雜的SFPN 特征融合結構,如圖3(b)所示。首先進行第1 次自底向上的特征融合,將每層特征網絡提取的特征圖進行相應倍數的上采樣,并分別與第1 層、上一層特征圖級聯相加融合得到特征圖Pi(i表示層數),然后再進行第2 次自頂向下特征融合,在此過程中,將第1 層特征圖P1分別與每層特征圖Pi級聯相加融合得到2 次融合特征圖Ni,其他結構保持不變。SFPN 特征融合結構的目的是為了融合淺層特征圖感受野小(包含全部小目標)的有效信息,得到小目標語義特征信息更豐富的特征圖,從而提高小目標檢測性能。
為提高小目標檢測性能,改進的SSD 網絡是通過引入特征融合金字塔SFPN 網絡,并加載在原SSD特征提取網絡之后,對不同尺度分辨率的特征圖進行融合,利用融合淺層和深層的特征圖感受野,以提高小目標檢測性能,進而分類回歸預測目標。同時為提升整體RFG_SSD 網絡性能,改進RFG_SSD 網絡結構選用ResNet50 替換VGGNet16,并將其作為改進模型的主干特征提取網絡,通過加深網絡層數提升性能。改進RFG_SSD 網絡結構分為主干特征提取結構、SFPN 特征融合結構、分類回歸檢測層結構3 個部分,如圖4 所示。

圖4 RFG_SSD 網絡結構Fig.4 Structure of RFG_SSD network
在主干網絡中,輸入圖片尺寸為300×300×3,首先通過ResNet50 網絡對輸入圖片進行特征提取,每經過一個殘差塊將提取的特征圖送入SFPN網絡中并進行特征金字塔融合操作,尺度分別為56×56、28×28、14×14 和7×7。在ResNet50 網絡結構中主要使用改進殘差結構(ResBlock),引入批量歸一化(BN)和Leaky-relu 激活函數。BN 操作是在特征圖的批量大小、長、高3 個維度上進行歸一化處理,目的是通過規范化方法將偏離的分布拉回到標準化,使梯度變大,以加快學習收斂速度,從而解決梯度消失的問題。Leaky-relu 激活函數操作是向上回傳梯度,以避免網絡退化現象的出現,從而為網絡增加了非線性表達能力且提高了網絡檢測性能。
在2 次縱向融合過程中,SFPN 特征融合結構將下一層特征圖進行2 倍上采樣、上一層特征圖進行1×1 卷積,進而將兩者級聯相加連接,得到融合不同層語義信息的特征圖,使得網絡學習特征更加精準,如圖4中SFPN模塊實線連接。為提取更多的小目標特征信息,在第1 次融合過程中,將各層不同感受野大小的特征圖Ci做2 倍、4 倍、6 倍上采樣后,并與C1特征圖融合得到P1,在第2 次融合過程中,將P1進行核為3×3 大小、步長分別為2、4、6 的3 種最大池化方式降采樣后,并與各層Pi融合得到Ni,如圖4 中SFPN 模塊虛線連接。最后分別將各層融合得到的高語義信息特征圖Ni傳入到檢測層進行分類回歸,以預測目標。
在檢測層結構中,依次經過批量歸一化BN 和Leaky-relu 激活函數操作層、全局平均池化層(Global Average Pooling,GAP)[20]、softmax 層[21],最終得到目標檢測結果。標準目標檢測網絡模型在特征提取后連接全連接層(Full Connected,FC),其目的是將前面學習得到的特征語義表示映射到樣本空間,降維得到一維向量組,并將其輸入到softmax 層進行分類,以得到相應類別目標。由于FC 層參數冗余,占據整個網絡參數量的80%以上,導致運算量過大,且容易過擬合,因此使用代替FC 層,如圖4 中檢測層結構。全局平均池化方式不僅能夠降維得到與FC 相同的結果,而且可以降低50%以上的參數量,同時去除了對輸入圖片大小的限制,以提高網絡運算速度。
本文選用pytorch 開源框架進行訓練、測試,基于ubuntu16.04 操作系 統,CPU 為Inter Core i7-9700K,3.60 GHz,顯卡為NVIDIIA GTX2080。編譯環境為torch-1.2、torchvision-0.40,cuda10.0、cudnn10.0,python 3.7語言編程。
針對道路行駛過程中車輛前方的行人和車輛目標,本文選用的數據集必須滿足車輛行駛過程中有足夠多的行人和車輛,并且是真實的路況環境。因此,本文使用BDD100K 數據集[22],該數據集是2018 年伯克利大學發布的大規模、內容多樣性的公開駕駛數據集。其中道路目標數據有1×105張圖片,包括城市街道、高速公路等路況場景,包含晴天、陰天、雨天等天氣環境。這些因素使得數據集具備豐富多樣性的行人、車輛路況場景,網絡能夠學習更豐富的特征,從而適用于道路上各種復雜場景,保障無人駕駛汽車的安全出行。
該數據集的道路目標數據包含訓練集7×104張圖片、測試集2×104張圖片、驗證集1×104張圖片,包括多種目標類別標簽數據。編寫代碼提取兩個數據集的行人、車輛類別標簽,并保存得到訓練集、測試集、驗證集txt 格式。同時使用式(1)計算每個類別標簽框尺度大小,設定尺度小于或等于19×19 的標簽框為小目標,統計類別標簽個數和小目標標簽個數,以得到小目標框個數約占所有框個數的40%,各標簽框數目統計如表1 所示。

表1 標簽框數目Table 1 The number of label boxes
本文通過控制變量法(不同模塊組合)進行消融實驗,以對比各模塊作用程度。各網絡的結構模塊如表2所示。本文使用BDD100K 訓練集對4 種網絡進行模型訓練實驗。訓練過程中批次大小為8,迭代次數為500,初始學習率為0.000 1,權值衰減為0.000 5。其中學習率決定得到最優值參數的速度,如果學習率過大,參數可能會跳過最優值,從而導致網絡無法收斂甚至發散;如果學習率過小,則優化效率過低,網絡長時間無法收斂,可能得到局部最優。因此,在訓練中權值衰減系數的設置是根據模型訓練情況來動態改變學習率大小,使得網絡在訓練迭代中得到最優值參數。

表2 不同網絡的模塊結構Table 2 Module structure of different networks
訓練時調用原SSD 在VΟC2007 數據集上訓練得到的權重并進行初始化,并且在訓練中將訓練損失值變化繪制成曲線,如圖5 所示。損失值越小表示模型預測目標越接近真實目標,模型的性能越好。

圖5 不同算法的損失值對比Fig.5 Loss values comparison among different algorithms
從圖5 可以看出,各算法經過迭代100 次后損失變化趨于穩定,曲線波動不大。SSD 算法使用VGGNet16 特征提取網絡,損失值最大;只將原SSD結構中特征提取網絡替換為ResNet50,損失值排在第2;在原SSD 結構中只增加SFPN 特征融合網絡,損失值排在第3;同時替換ResNet50 網絡和增加SFPN 網絡設計得到RFG_SSD 網絡,損失值最小,相對應的性能最優。
3.4.1 消融實驗精度評估
在目標檢測領域中,本文選用準確率和召回率來評估系統的性能。準確率是指在所有正樣本中,正確目標所占的比例,衡量查準率;召回率是指在所有真實的目標中,被模型正確檢測出來的目標所占的比例,衡量查全率。精確率和召回率如式(6)和式(7)所示:

其中:P為準確率;R為召回率;TTP為模型正確檢測的目標個數;FFP表示模型錯誤檢測的目標個數;FFN為模型漏檢的正確目標個數。
在實際過程中,準確率和召回率相互關聯,因此將計算得到的P、R值繪制成P-R 曲線,綜合考慮P-R 曲線下的面積AAP值來評估各類別檢測性能,AAP值越大,表示模型檢測精度越高,即性能越好,如式(8)所示:

針對多個類別N,本文使用平均值mmAP評估模型整體性能,如式(9)所示:

本文分別使用原SSD 算法、ResNet50 算法、VGG16+SFPN 算法和RFG_SSD 算法對BDD100K測試集測試檢測精度。編寫代碼利用各個算法訓練得到的權重模型計算P、R值,并繪制成P-R 曲線,得到各個算法類別AP 值,如圖6 所示。

圖6 不同算法的P-R 曲線對比Fig.6 P-R curves comparison among different algorithms
不同算法的檢測精度對比如表3所示。從表3可以看出,ResNet50算法相對于SSD算法mmAP提高了6.42個百分點,表明深層特征提取模塊ResNet50能夠有效提高模型的檢測精度。VGG16+SFPN算法相對于SSD算法mmAP提高8.6個百分點,表明SFPN結構有效提高模型的檢測精度。最終改進算法RFG_SSD 是將ResNet50模塊和SFPN 模塊相結合得到,與SSD 相比,其mmAP提高12.69個百分點,與單獨使用ResNet50模塊或SFPN 模塊相比,其mmAP分別提高6.72和4.09個百分點,表明2個模塊結合使用能夠有效提高模型的檢測精度。

表3 不同算法的檢測精度對比Table 3 Detection accuracy comparison among different algorithms %
3.4.2 不同算法的性能對比
算法性能的評估不僅要考慮平均檢測精度mmAP值,同時也需要評估檢測速度,即實時性(FFPS)的快慢情況。實時性表示目標檢測網絡檢測一張圖片需要的時間,假設網絡檢測一張圖片需要s,FFPS值越大,表示檢測時間越少,速度越快。FFPS如式(10)所示:

本文分別使用SSD 算法、YΟLΟv4 算法及改進SSD 算法對VΟC2007+2012 測 試集 與BDD100K 測試集進行測試評估,并對比各類算法的檢測精度和速度。其中文獻[23]算法在原SSD 淺層網絡結構上設計淺層特征增強模塊,以提高淺層小目標的特征提取能力,文獻[24]算法在檢測識別時利用小目標強化檢測模塊與原SSD 級聯方式,提高小目標的檢測效果。這2 種改進算法都只是針對小目標部分結構,雖然小目標檢測效果有所提高,但是整體檢測性能并沒有顯著提高。本文改進算法RFG_SSD不僅能夠提高小目標檢測性能,還提高了整體性能。
本文利用編寫代碼計算各類算法在兩個數據集上的平均精度和實時性表現,同時使用式(1)計算模型檢測的目標框尺度大小,并統計尺度小于19×19 的小目標框檢測個數。在VΟC2007+2012 和BDD100K 測試集上不同方法的檢測結果及適用場景對比如表4所示。從表4 可以看出,在VΟC2007+2012 和BDD100K 測試集上,VGG16+SFPN 算法相對文獻[22]、文獻[23]及SSD 算法的檢測精度和速度都有所提高,并且小目標檢測個數增多,驗證了SFPN 模塊結構提升小目標檢測性能的有效性,但是與YΟLΟv4 算法相比,VGG16+SFPN 算法的性能優勢并不明顯。在BDD 100K 數據集上,本文提出的改進算法RFG_SSD 在檢測精度和速度上相對于其他算法都具有明顯優勢,與目前性能最優的檢測算法YΟLΟv4 相比,其整體性能相差不大,精度降低了0.97 個百分點,檢測速度加快1.8 frame/s,小目標檢測數目相差約600 個。與原SSD 算法相比,RFG_SSD 算法精度提高了12.69 個百分點,檢測速度提高34.33 frame/s,小目標框檢測數高出3 倍以上。與文獻[23]、文獻[24]算法相比,RFG_SSD 算法的檢測效果得到明顯提高,表明ResNet50+SFPN 模塊能夠有效提高檢測準確度。

表4 不同算法的目標檢測結果與適用場景對比Table 4 Target detection results and applicable scenarios comparison among different algorithms
本文RFG_SSD 算法和SSD 算法對數據集圖片進行目標檢測對比,如圖7 所示。

圖7 不同算法的目標檢測結果Fig.7 Target detection results of different algorithms
從圖7可以看出,對于圖片中行人和汽車目標,SSD算法未識別檢測出小目標,只檢測出部分大目標,RFG_SSD 算法能夠精準檢測出大、小目標。結果表明,RFG_SSD 算法能夠精準檢測出圖片中任意尺度的目標,并且速度更快,性能得到顯著提升,以達到預期行人、汽車多尺度檢測的效果。
本文提出一種改進SSD 算法的道路小目標檢測算法。在SSD 網絡結構基礎上,通過引入改進特征金字塔結構SFPN 融合不同層特征的語義信息,將特征網絡VGGNet16 替換為網絡層數較多的ResNet50,以提高整體網絡性能,并通過增加批量歸一化、全局平均池化等結構,從而降低參數量。實驗結果表明,相比SSD、VGG16+SFPN 算法,該算法能夠顯著提高檢測精度,并加快檢測速度,實現多尺度目標檢測,其在BDD100K 數據集上的精確度達到98.05%。由于本文算法僅對道路行人、車輛進行檢測,因此后續將改進檢測模型,使其適用于道路多類別、多尺度的檢測。