綦志剛, 李洋洋,李 冰,原 新
(哈爾濱工程大學 智能科學與工程學院,黑龍江 哈爾濱 150001)
隨著深度學習的發展,卷積神經網絡在目標檢測領域得到了越來越廣泛的應用[1]。就現階段而言,目標檢測算法主要分為2 大類,一類是基于區域提議(region proposal)[2]的檢測方法,這類方法先對待檢測圖像中可能出現目標物體的區域進行提議,之后再對提議的區域進行目標物體的檢測與分類,其檢測精度較高,但是檢測速度較慢,代表算法有R-CNN[3]、Faster R-CNN[4]等;另一類是基于回歸的檢測方法,這類方法采用端對端的檢測,省去了區域提議這一步驟,因此檢測速度較快,但是檢測精度有所下降,代表算法有YOLO[5-7]、SSD[8]等。
發展至今,以上算法雖然在目標檢測方面擁有較好的性能,但由于模型過于復雜,提升了對硬件性能的要求,難以在移動端或者性能不高的設備上使用[9]。為了滿足在低端機器上完成目標檢測任務的需求,Darknet 網站上提供了Tiny-YOLOv3 模型。該模型是YOLOv3 的輕量化版本,不需要占用大量的內存,從而減小了對硬件性能的需求[10]。但是該模型由于網絡層數不深,對輸入圖像特征無法充分地進行提取。另外,該模型雖然引進了anchors 機制[11],但是沒有充分加以利用,使得對圖像中小目標物體的檢測效果不佳。為了改善上述問題,本文提出了改進Tiny-YOLOv3算法,從而增強模型在特征提取和小目標檢測方面的性能。
Tiny-YOLOv3 模型為YOLOv3 的簡化版本,其主干網絡為6 層DBL 層與6 層池化層交替組成的特征提取網絡,池化層采用最大池化方式;嫁接網絡采用的是13×13、26×26 分辨率的輸出檢測網絡,結構如圖1所示。其中,DBL 層由卷積層、歸一化處理層、激活層3 部分組成,卷積層采用的是3×3 的卷積核,步長為1×1,激活層以LeakyReLU 為激活函數。

當2 種輸出檢測網絡都得到各自的預測結果之后,對它們進行非極大值抑制處理[12],之后便可得到最終檢測結果。由模型結構可以看出,該模型通過較少的網絡層數減小了模型體積,從而使該模型能夠在低端機器上運行。然而,在特征提取過程中,該模型采用了池化層減小輸出圖像的尺寸,由于模型本身參數有限,這將使得提取到的圖像特征大量丟失。此外,模型中雖然用到了多尺度融合[13]的方式去解決不同尺度的物體檢測問題,但是由于anchors 數量過少,特征圖的尺度跨度不足,依舊會產生大量中小尺寸目標的漏檢現象。

圖1 Tiny-YOLOv3 模型結構圖
在原有模型中,主干網絡的最后4 層特征圖的長寬均為13×13,所不同的僅僅在于通道數,甚至在倒數第2 層中,通道數也沒有發生改變,僅僅是通過最大池化選取相鄰區域中的最大像素點,這很容易使相鄰的2 個像素點均為同一個值,從而降低了對圖像特征的利用率。因此,本文對主干網絡的倒數第2 層進行了修改,使其特征圖為前一層網絡的一半,但是由于前一層網絡的長寬均為奇數,因此需要對輸入圖像尺寸進行調整。根據相關文獻研究[14],當輸出的特征圖為奇數時,檢測效果更好。因此,將輸入圖像尺寸修改為448×448。
由于池化僅僅是從4 個相鄰像素點間選取1 個像素點,這樣的做法浪費了3 個從前一層網絡提取到的特征,因此本模型采用卷積層替換池化層,且采用的卷積為3×3 的卷積核,但是每步的步長為2,在每次卷積之后,圖像的尺寸將會縮小為原來的一半,從而達到與池化相同的目的,但是相比于池化,這樣做可以使前一層提取到的特征都參與運算,從而減少了網絡傳遞過程中的特征丟失。
在原先的模型中,模型分別采用了13×13、26×26的2 種不同分辨率特征輸出圖去檢測圖像,這雖然在一定程度上減小了檢測過程中的漏檢概率,但是當目標物體的尺度相差較大時,檢測效果依舊不理想,因此,本文在原有模型的基礎上再添加一層7×7 分辨率的特征檢測網絡。通過這樣的設計,可以使前面大的特征圖識別淺層特征,完成對小目標的檢測,而后面小的特征圖識別深層次的特征,完成對大目標的檢測。另外,通過將不同尺度的特征圖進行融合,可以使淺層特征中也具備一定程度的深層語義理解能力,從而更好地完成小目標物體的識別任務。最終修改后的模型結構如圖2 所示。
本文的實驗環境為Ubuntu16.04,電腦配置為GPU(NVIDIA GTX-1060 6G 顯存),CPU(i7-6700),8 G內存。模型選取VOC2007 數據集作為訓練樣本,其中訓練集圖片為8 000 張,驗證集圖片為1 000 張,測試集圖片為963 張。模型整體采用Keras 框架搭建。設置訓練模型的初始學習率為0.001,最大迭代次數為40 000 次,每批次訓練16 個樣本。
為了檢測模型的性能好壞,在目標檢測領域有一些常見的評價指標,如精確率(precision)、召回率(recall)、mAP(mean average precision)等。在VOC數據集的評測指標中,如果IOU(預測邊框與真實邊框的交并比)>0.5,則被認為預測的物體與實際的物體為同一個物體,反之則被認為是不是同一個物體。在這種定義下,精確率和召回率的計算公式為:

其中:TP 代表物體被預測為正樣本,實際也為正樣本;FP 代表物體被預測為正樣本,實際為負樣本;FN 代表物體被預測為負樣本,實際為正樣本。
在有了精確率與召回率的計算公式后,便可以針對某一類目標,以召回率為橫坐標,精確率為縱坐標繪制出PR 曲線,該曲線所圍成的面積就被定義為AP。在將每一類的AP 值都計算出來以后,將其平均,就得到了mAP。通常來說,模型的mAP 值越高,則說明模型的性能越好。
圖3 和圖4 分別為模型改進前與改進后的各類物體AP 值,由圖中可以看出,相較于改進前,改進后的模型mAP 上升了3.79%,具體到每一類目標的AP值也都有一定的提升,說明使用卷積層替代池化層確實能夠保留更多的信息,從而提高模型的性能。通過觀察同一模型的不同類別目標的AP 值可以發現,AP值較高的類別往往是目標本身尺度較大的,一張圖像內所能包含目標較少的類別,如火車、飛機等;而對于目標本就比較小的,且可能在一張圖像內出現多個的物體,其AP 值則會相對較低,如瓶子。這說明了模型對尺度較大的目標有更強的包容能力,對于較小的目標,由于特征在向后傳遞的過程中更容易丟失,因而在檢測過程中難以被識別。

圖4 改進后模型各類別的AP 值
通過對圖3 和圖4 的進一步比較可以發現,AP 值絕對增長最少的是火車,僅為0.01,一方面是因為火車這一類別原本就已經達到了較高的識別精度,另一方面是因為火車占圖片的相對比例較大,不容易受到圖片尺寸縮放的影響;而AP 值絕對增長最多的是瓶子,為0.14,這說明了通過對增加特征融合層的數量確實能夠提高小目標物體的檢測精度。圖5 為模型改進前后部分檢測結果對比,從對比圖可以看出,改進后的模型不僅圖像漏檢現象減少了,而且將錯分為貓的圖像也正確識別了出來,說明改進后的模型能夠減少錯檢及漏檢的概率。但是由于模型網絡層數不深,當圖像中的目標受到遮擋時,依舊會產生漏檢現象。如圖6 所示,后面的車輛由于受到前排車輛的遮擋,未能被模型檢測出來。

圖5 模型改進前后的檢測結果對比圖

圖6 模型改進后的檢測結果圖
本文提出了一種基于Tiny-YOLOv3 的改進目標檢測算法。通過使用卷積層替代池化層,可以提高特征的利用率,同時避免小目標的特征在向后傳遞過程中丟失;對主干網絡進行修改使得神經網絡各層之間的銜接更為自然,對輸入圖像尺寸的調整則是為了保證輸出圖像的長寬均為奇數,從而使模型學習到有用的特征;通過額外添加一個7×7 分辨率的特征融合層擴大網絡的視野范圍,進而加強對小目標物體的檢測能力。實驗結果表明,改進之后的模型提高了檢測精度,降低了漏檢的概率。但是由于模型參數有限,因此當環境較為復雜(如遮擋、暗光等)時,模型的檢測精度依舊有待提高,在不大幅提升網絡模型復雜度的情況下提高模型的泛化能力將是后續的主要研究方向。