李麗芬,黃 如
(華北電力大學(保定) 計算機系,河北 保定 071003)
針對自動駕駛,目標檢測的主要任務是在車輛行駛過程中對前方道路中的目標進行識別與定位,系統提前規劃行駛路線,保證汽車安全行駛。但目前通用目標檢測算法在檢測小目標時由于目標分辨率低、特征表達能力弱,導致出現目標漏檢率較高的問題,嚴重影響檢測效果,是目標檢測任務亟待解決的難點問題[1]。
傳統方法采用人工提取特征來實現目標檢測,但對于小目標的特征提取效果差,目前小目標檢測的算法都使用卷積神經網絡CNN(convolutional neural networks)提取特征。當前,主流的基于CNN的目標檢測算法主要分為兩大類。第一類是兩階段目標檢測算法(two stage),此類算法首先是生成候選區域,然后對候選區域進行類別分類與位置預測。兩階段算法具有較高檢測精度,但檢測速度較慢,無法滿足實時性要求,代表算法有RCNN系列[2,3]等。第二類為單階段目標檢測算法(one stage),此類算法以回歸為核心思想,取消生成候選區域,直接利用網絡中提取的特征來對目標的類別和位置進行預測,是一種端到端的目標檢測算法,具有更快的檢測速度。該類算法的代表模型有YOLO系列,其中YOLO系列中效果較好的為YOLOv3[4]和YOLOv4[5]。無論是單階段檢測算法還是兩階段檢測算法,都能夠取得較好的檢測結果,但對于小尺度目標檢測仍然存在一些不足。因此,本文提出一種引入Transformer的道路小目標檢測算法來解決存在的問題。
目前越來越多的學者投入了大量的努力來提高道路小目標的檢測精度。鄒慧海等[6]對模型中的特征金字塔網絡進行改進,融合不同層特征圖的特征信息來提高道路小目標的檢測精度。岳曉新等[7]對YOLOv3網絡模型的聚類算法進行優化,在原K-means聚類算法的基礎上,利用DBSCAN(density-based spatial clustering of applications with noise)聚類算法消除聚類時噪音點對聚類結果的影響,進而選取出更適合小目標的Anchor Box,提高了道路小目標的檢測精度。羅建華等[8]將模型中的損失函數替換為DIOU損失,提高目標定位精確度,降低了道路小目標的漏檢率。
自動駕駛領域中,目前常用的目標檢測算法對近距離大尺度目標有較高的檢測精度,但對于遠距離小尺度目標的檢測精度仍然較低。針對該問題,本文以單階段目標檢測算法YOLOv4為基礎,提出一種引入Transformer的道路小目標檢測算法來提高小尺度目標的識別精度。
YOLOv4算法網絡結構是由CSPDarknet53[9]特征提取模塊,SPPNet[10](spatial pyramid pooling)與PANet[11](path aggregation network)特征融合模塊和YOLO-Head檢測模塊3部分組成。如圖1所示,先將原始圖像處理為416×416大小,之后將預處理后的圖像輸入到特征提取網絡中,使用CSPDarknet53主干網絡對特征圖進行多次卷積操作提取圖像特征,輸出13×13、26×26、52×52這3種尺度的特征圖。在特征融合模塊中,13×13尺度的特征圖采用SPP模塊增加網絡的感受野,并將得到的特征圖與26×26、52×52的特征圖全部輸入到PANet網絡中實現淺層特征與深層特征的融合。經過特征融合后,輸入YOLO-Head檢測頭,最終得到3個檢測頭。檢測頭把特征圖分為S×S個網格,每個網格對應3個先驗框,經過非極大值抑制,根據預測值調整先驗框得到最后的預測框。

圖1 YOLOv4網絡結構
本文提出一種引入Transformer的道路小目標檢測算法,網絡結構如圖2所示。相較原始網絡,進行多尺度檢測改進、引入ICVT模塊(如圖2虛線塊所示)、改進SPP模塊并在淺層特征層后嵌入改進的SPP+模塊(如圖2虛線塊所示)。

圖2 改進YOLOv4網絡結構
YOLOv4采用13×13、26×26和52×52這3種不同尺度的錨框進行檢測。在道路場景中,因遠距離的車輛與行人所占像素較少,經過多次卷積后小目標的特征信息丟失嚴重,導致小目標的漏檢率提高。
針對上述問題,本文在原有多尺度檢測基礎上,增加一個104×104尺度的小目標檢測層,由原來的三尺度檢測變為四尺度檢測。具體操作是將融合后的52×52尺度特征層上采樣得到104×104尺度的特征層,并將其與主干網絡經過兩次下采樣得到的104×104尺度特征層進行融合,獲得104×104尺度的檢測層。這一改進可以使淺層小目標特征信息得到充分提取,并與具有較強語義信息的深層特征信息融合,獲得特征信息豐富的小目標特征圖,減少小目標特征信息的丟失,從而提高小目標的檢測性能,降低小目標的漏檢率。
原始YOLOv4的Anchor Box尺寸是依據COCO數據集設置的,但由于本文針對的是車輛與行人檢測,并且新增一個檢測層,導致COCO數據集的Anchor Box適配度不高,因此采用K-means聚類算法選取適合的Anchor Box。通過聚類計算得到的12個錨框尺寸分別為(6,54),(8,22),(11,29),(12,95),(16,36),(20,54),(25,178),(27,39),(33,65),(49,85),(66,134),(104,200)。將這12個錨框尺寸依次分給4個尺度,其中分辨率較小的檢測層對應大目標的錨框尺寸,分辨率較大的檢測層對應小目標的錨框尺寸,錨框與每個尺度特征圖的對應關系見表1。

表1 錨框與特征圖對應關系
本文選用的是Haiping Wu等學者[12]提出的CvT(convo-lutional vision transformer)模型。ViT[13](vision transformer)是一種基于自注意力機制的模型,通過使用自注意力機制,可以減少依賴外部信息,能夠捕獲特征的內部相關性,進而獲得豐富的上下文信息,增強特征的表達能力。CvT模型通過在ViT中引入卷積神經網絡,使得模型在保持ViT模型優點的同時,也能夠擁有卷積神經網絡的特性。自動駕駛中道路場景復雜,小目標的特征信息少,容易與道路中的建筑物混淆,引入該模型能夠充分利用上下文信息,從而分辨出車輛與行人小目標。
CvT模型具體引入兩個卷積操作:把ViT模型中的分塊處理和自注意力機制之前的線性投影替換成卷積操作。其中卷積操作雖取消了位置編碼,但實際上卻能夠隱含地編碼絕對位置信息[14]。然而,該模型僅僅考慮在卷積操作中位置編碼的問題,忽略了位置編碼對較高層也很重要。為了解決這個問題,本文對CvT模型進行改進,在CvT模型的較高層引入Benjamin Graham等學者[15]提出的注意偏差(attention bias),使較高層注入相對位置信息,從而設計了ICvT(improved convolutional vision transformer)模塊。模塊結構如圖3所示,具體分為4個步驟。

圖3 ICvT模塊結構
(1)卷積Token嵌入。對輸入特征圖進行卷積操作生成大小為C×H×W的特征圖,接著把它平鋪(flatten)成 (H*W)×C大小的張量并進行歸一化操作。通過此操作減小Token序列的長度(即特征圖的大小),同時增加Token的寬度(即特征圖的通道數)。
(2)卷積映射。對上一步驟得到的Token歸一化后進行reshape操作,生成大小為C×H×W的特征圖。然后對特征圖分別進行3個深度可分離卷積,再通過平鋪得到query,key和value。
(3)將q、k、v向量通過線性化處理后輸入改進后的多頭注意力機制模塊IMHA(improved-multi-head attention)。IMHA模塊具體計算過程如下:
首先設置注意力頭為h組,接著將q、k、v向量分別切分為h組。計算過程為
(1)

之后對每組q與k向量進行相似度計算獲權重,再加入相對位置信息(attention bias)。接著對得到的權重和相應的v進行加權求和得到每組注意力權重。最終將每組注意力權重連接起來,得到IMHA模塊的輸出。改進后每組頭的自注意力機制模塊結構如圖4所示。計算過程為

圖4 改進后自注意力機制模塊結構
headi=Attention(qi,ki,vi),i=1,…h
(2)
(3)
multihead(q,k,v)=concat(head1,…headh)
(4)
其中,s為softmax函數,ab為平移不變的注意力偏置(attention bias),concat為拼接函數。
由IMHA模塊的輸出和(1)得到的Token殘差連接。計算過程為
F=d(multihead(q,k,v))+Token
(5)
其中,d為dropout函數。
(4)將上一步驟得到的F經過歸一化操作后通過前饋網絡層FFN(feed forward network)防止網絡退化,再與F進行殘差連接。最后經過reshape操作后使用1×1的卷積得到ICvT模塊的輸出。
原YOLOv4算法在主干提取網絡后加入了空間金字塔池化模塊。SPP模塊通過使用大小不同卷積核的最大池化層(Maxpool),將擁有局部特征信息的特征圖和全局特征信息的特征圖進行融合,可以增加模型感受野,進而豐富特征圖的表達能力,提升檢測精度,結構如圖5所示。

圖5 SPP與SPP+模塊結構
在卷積神經網絡中,最大池化操作對感受野有很大的影響,其中主要取決于卷積核的大小,卷積核越大模型的感受野越大。因而本文對SPP模塊進行改進,將3個卷積核不同的最大池化操作減少為一個最大池化操作,使其卷積核大小為最接近輸入特征圖的大小。這樣在可以獲得全局感受野的同時,也可以減少模型的計算量。本文將改進后的模塊稱為SPP+模塊,改進后的結構如圖5所示。
對算法進行多尺度檢測改進后,52×52和104×104尺度的檢測層用于檢測小目標。為了提高小目標的檢測精度,如圖2所示本文在主干網絡第二、三個殘差塊后加入SPP+模塊,用來增加淺層特征圖的感受野。其中52×52和104×104特征層后接的SPP+模塊的最大池化操作的卷積核分別設置為17與43。
本實驗所用的硬件平臺為:Intel(R)Xeon(R)Gold 5218的CPU,Tesla T4*8的GPU,操作系統為ubuntu 18.04,深度學習框架為Pytorch。
實驗使用的數據集為KITTI數據集中的二維目標數據集,其中包含在真實交通環境下采集的圖像數據,如城市地區、鄉村和高速公路等,圖像中所含遠距離小目標數量多[16]。KITTI數據集單幅圖像所含目標數量多、背景復雜、分辨率低,適合用來驗證小目標的準確率。本文對KITTI數據集的類別進行了處理,將汽車類標簽合并為car類,行人類標簽合并為pedestrian類。
為了驗證改進后算法的性能,本文實驗采用以下5個評價指標對算法進行評估。精度(percision)表示預測樣本中預測正確樣本數在總正確樣本數中所占的比例。召回率(recall)表示預測樣本中預測正確樣本數在總預測樣本數中所占的比例。平均精度AP(average precision)表示以R為橫坐標,P為縱坐標時,P-R曲線下的面積。多個類別平均精度的平均值mAP(mean average precision)表示數據集中所有類別平均精度的均值,作為模型精度評價指標。每秒檢測幀數FPS(frame per second)表示每秒內檢測的幀數,作為模型速度評價指標。計算公式如下
(6)
(7)

(8)
(9)
3.3.1 模型訓練
實驗根據以下參數設置進行訓練,批量大小設置為16,總共訓練300個epoch。采用Adam優化器,初始學習率為0.001,使用余弦退火策略調整學習率。訓練過程Loss曲線如圖6所示。

圖6 訓練損失曲線
如圖6所示,隨著訓練輪數的增加,損失值不斷降低,迭代到175輪后損失曲線趨于穩定,達到收斂狀態,原YOLOv4算法與本文改進算法損失值穩定于0.9和0.8左右。與原算法相比改進后模型的損失值有所下降,驗證模型的檢測精度提高,本實驗設置的超參數合理。
3.3.2 消融實驗
為了驗證本文算法有效性,進行了消融實驗,結果見表2,表中yolo_head、ICvT、SPP+分別表示新增一個檢測頭、添加ICvT模塊和SPP+模塊。對于實驗結果具體分析如下。

表2 消融實驗結果
實驗2為增加尺度特征圖進行檢測的實驗結果。新增一個檢測頭后的mAP為90.64%,與原YOLOv4相比在進行多尺度檢測改進后mAP提高1.2%。在檢測速度方面,改進后的算法比原YOLOv4僅僅降低2.9 FPS。該實驗結果表明,由三尺度檢測變為四尺度檢測能夠提取到更多的淺層特征信息,可以有效提高目標的檢測精度,同時基本不影響算法的檢測速度。
實驗3為采用ICvT方法進行檢測的實驗結果。引入ICvT模塊后的mAP為90.01%,與原YOLOv4相比提高0.57%,檢測速度降低4.8 FPS。該實驗結果表明,引入ICvT模塊捕獲局部信息,能夠更有效提升目標檢測精度;對于檢測速度,由于加入ICvT模塊增大模型的計算量,使檢測速度下降,但仍然可以保證檢測的實時性。
實驗4為添加SPP+模塊進行檢測的實驗結果。進行改進后算法的mAP為89.72%,與原YOLOv4相比mAP提升了0.28%,FPS基本保持不變。該實驗結果表明,增加SPP+模塊能更好提高特征圖的感受野,更有效提高目標檢測精度;同時改進后的模塊計算量小,仍然可以有較快的檢測速度。
從實驗2到實驗4表明每項改進都能夠提高模型的檢測精度。實驗5在實驗2的基礎上添加ICvT模塊,實驗6在實驗5的基礎上添加SPP+模塊,兩個實驗的mAP值分別為91.51%和91.97%。這兩個實驗結果表明,與添加模塊前相比識別精度都有相應的提高,同時能夠滿足實時檢測。
本文目的旨在提升小目標的檢測率,KITTI數據集被調整為兩類目標,由于pedestrian類目標具有目標相對較小的特點,本文選用pedestrian類作為小目標檢測的代表。結果見表3,pedestrian類的AP由83.4%提升至87.01%,提高3.61%,提升結果較為顯著,驗證了本文算法可以有效的檢測小目標,降低小目標的漏檢率。

表3 KITTI數據集中小目標的AP比較
為了進一步驗證本文算法對小目標檢測的有效性,本文使用原YOLOv4算法和本文改進算法在KITTI數據集上進行檢測對比。圖7為檢測結果對比圖,每一列從上到下依次為原始圖像、原YOLOv4算法檢測圖像與本文算法檢測圖像。結果如圖7所示,第一列中原YOLOv4檢測算法將圖像左側的背景信息誤檢為車輛,遠距離小尺度行人和右下角車輛并未準確檢測出來。而本文改進算法不僅能夠準確檢測出小尺度目標,做到不誤檢不漏檢,同時使檢測框更加貼合目標對象,更為準確檢測出目標對象。第二列中,原YOLOv4算法漏檢遠距離小尺度車輛,而本文改進算法檢測出遠距離小尺度車輛,同時提高檢測的準確率。結果表明本文算法不僅能夠更好檢測與定位車輛和行人小目標,且對背景復雜、遮擋、密集等情況造成的漏檢也能精確檢測。

圖7 檢測結果對比
3.3.3 對比實驗
為了驗證本文算法檢測的有效性,還將與目前主流的目標檢測算法Faster R-CNN、SSD、YOLOv2、YOLOv3等進行比較。結果見表4,未改進的目標檢測算法中YOLOv4算法的檢測精度最高,可達89.44%,而本文改進算法與原YOLOv4算法相比在檢測精度上又有了進一步的提升,由此驗證改進后的算法有更好的檢測性能。

表4 不同算法檢測結果比較
針對道路小目標檢測中存在的問題,本文利用Transformer和空間金字塔模型對YOLOv4算法進行改進。首先,重新設計PANet網絡結構,將檢測尺度由原來的3種尺度預測增加至4種尺度,把主干網絡中的淺層特征信息充分利用起來,得到更多小尺度目標的特征信息。與此同時使用K-means聚類算法,獲得更為合適的Anchor Box。其次,在網絡結構中引入ICvT模塊,使算法能夠關注特征內部相關性,利用目標周圍的上下文信息,提高模型檢測能力。最后,改進SPP模塊并在主干網絡第二、三殘差塊后添加SPP+模塊,對局部和全局感受野進行融合,提高特征信息表達能力。實驗結果表明,本文算法比原YOLOv4算法的mAP提高2.53%,且對小目標檢測的準確率提升顯著。但是,由于ICvT模塊的引入使模型計算量增加,降低了檢測速度。在未來的工作中,將進一步優化網絡結構,減少信息冗余,提高目標檢測效率。