王永生 姬嗣愚
(海軍航空大學 煙臺 264001)
目標檢測是計算機視覺的重要分支,主要任務是在給定的圖片中精確找到物體所在位置,并標注出物體的類別,即包含了目標定位與目標分類兩部分。在計算機視覺領域中的目標跟蹤、圖像分割、事件檢測、場景理解等的任務都以目標檢測作為基礎[1]。
早期的目標檢測算法大多是基于人工設計濾波器特征構建的。基本思路[2]如圖1 所示,通過滑動窗口的方法對待檢測圖片提取候選框,接著進行特征提取,然后利用分類器進行分類判定。通過非極大值抑制(NMS)可以對候選框進行合并,消去重疊或冗余的候選框,輸出最終結果。典型算法有2001年的V-J(Viola-Jones)檢測算法[3~4]、2006年誕生的HOG+SVM 檢測算法[5]和2008年誕生的DPM算法[6]等。然而,這種方法使得滑動窗口的計算量隨著圖像像素的增加呈指數增長,且手工設計的特征對于目標多樣性的變化并沒有很好的魯棒性,檢測效率和精度都不高。

圖1 傳統目標檢測方法基本流程
近年來,由于深度學習不斷發展,通過卷積神經網絡(CNN)自動提取高層特征[7]的方法逐漸成為主流,不僅可以更好地表征復雜特征,而且準確率和實時性有了大幅提升,目前廣泛應用于車輛檢測與識別[8~9]、行人檢測[10~11]以及飛機、艦船等各類目標的識別與檢測[12~14]領域。根據檢測過程中是否包含候選區域目標推薦這一過程,主要分為基于候選區域思想的Two-stage算法和基于回歸思想的one-stage 算法。Two-stage 算法的檢測過程包括:1)提取候選框特征信息;2)利用CNN 對候選框進行分類與位置回歸。典型算法有R-CNN系列[15~18]、R-FCN[19]、Mask-RCNN[20]等。One-stage 算法在檢測時直接產生目標的類別概率及位置坐標,不產生候選區域。典型算法有YOLO 系列[21~24]及SSD[25]、DSSD[26]、Retina Net[27]等。
本文對目前基于深度學習的主流的Two-stage目標檢測算法和One-stage目標檢測算法進行了綜述,分析了相關算法的優劣,最后對目標檢測算法做出了總結和展望。
基于候選區域的算法需要產生大量候選窗口再判斷類別,這類算法精度較高但速度相對較慢,R-CNN 系列算法是典型的基于候選區域的目標檢測算法。
R-CNN 算法采用基于AlexNet 網絡層結構,采用選擇性搜索(selective search)的方法替代滑動窗口生成候選區域,降低了信息的冗余度;然后統一將候選區域尺寸縮放(wrap)為227*227,利用CNN替代人工設計濾波器提取特征;最后用支持向量機(SVM)做分類和框回歸,用線性回歸模型修正候選框位置,完成目標檢測,提高了檢測精度與速度,其框架流程如圖2 所示。但不足之處在于生成的所有候選區域都要逐個輸入網絡進行特征提取,訓練速度慢,且縮放操作會改變圖片形狀,破壞原有信息,在后續操作中對精度產生不良影響。

圖2 R-CNN框架流程圖
針對R-CNN 由于縮放導致破壞細節的問題,何凱明等人提出了SPP-Net,引入空間金字塔池化(SPP)層,使得在網絡中輸入任意尺寸的圖片都會輸出固定大小的特征圖[28~29]。Fast R-CNN 結合了SPP 的思想對R-CNN 進行了改進,采用VGG 16 為主干網絡[30],引入多任務損失函數,同時將邊框回歸加入CNN 網絡進行訓練[31~33]。Fast R-CNN 在得到卷積特征圖后將所有候選區域輸入ROI 池化層固定特征尺寸,送入全連接層后進行分類和邊框回歸,其框架流程如圖3所示。但Fast R-CNN仍然采用選擇性搜索產生候選區域,生成速度慢,被認為是整個檢測過程的瓶頸。

圖3 Fast R-CNN 框架流程圖
Faster R-CNN 引進RPN 網絡代替選擇性搜索生成候選區域,提出anchor 的概念,用于檢測同一位置上的多目標。輸入圖片經RPN 處理后,候選區域壓縮到了大約300個,候選框數量大大降低[34]。Faster R-CNN 在RPN 層和全連接層均做過分類及候選框回歸,提升了檢測精度,其網絡結構如圖4所示。缺點在于ROI 池化層對網絡平移不變性造成了不良影響,定位精度有所下降,且細節信息容易丟失,對小目標檢測效果不好。

圖4 Faster R-CNN網絡結構圖
在R-CNN 系列目標檢測算法的基礎上,研究人員提出了許多其他的優化方案。文獻[19]提出了R-FCN 算法,在Faster R-CNN 的基礎上,采用ResNet 為主干網絡,提出全卷積化概念,提高網絡共享能力;同時增加了位置敏感分數網絡層,平衡平移可變性與平移不變性的矛盾。文獻[35]提出了Libra R-CNN算法,通過在IoU上均勻采樣,彌補了困難樣本在線挖掘(OHEM)算法[36]對噪聲數據十分敏感的缺陷,讓樣本更具有代表性;引入平衡特征金字塔,更有效地整合利用多尺度特征;改進損失函數,引導整體訓練更好地收斂。文獻[37]提出了Hyper Net算法,集合了多層的特征圖得到超特征,提升了小目標檢測能力。文獻[20]提出了Mask R-CNN 算法,將Faster R-CNN 中的ROI pooling 層換成了ROI align 層,使用雙線性插值方法保留精確的空間位置,同時增加了并行的mask 分支[38],對每個ROI生成一個像素級別的二進制掩碼,提升了精確度。
基于回歸思想的目標檢測直接產生目標的類別概率及位置坐標,相比于Two-stage,網絡結構更加簡潔,檢測速度快是其最大特點。
在YOLO 算法中,輸入圖片被劃分為S*S個網格,直接在每個網格中預測物體邊框和類別,每個物體邊框的預測都以整張圖的特征作為輸入,包含了充足的上下文信息,同時提升了檢測速度。YOLO V1 借鑒了Google Net 的網絡設計,不同的是,YOLO 采用1*1 卷積層和3*3 卷積層替代了inception module[39],其網絡結構如圖5 所示。其缺點在于設定一個網格只檢測兩個邊界框,對于同一網格存在多類目標的問題無法很好地解決,且小目標及密集群體目標的定位效果不好。

圖5 YOLO V1網絡結構圖
SSD 的基礎網絡為VGG16,采用多尺度特征圖檢測不同目標,靠前的卷積層生成大尺度特征圖,提取細節信息,用于檢測小目標,而靠后的卷積層用于檢測大目標;同時借鑒了anchor 思想,設置不同尺度與寬高比的先驗框作為最后輸出預測框的基準,減少模型訓練的難度。SSD 檢測精度和速度都有提高,但SSD用于檢測小目標的淺層卷積數目少,低層特征丟失多,且多尺度特征金字塔[40]將圖像劃分為不同尺度后再處理,增加了計算量。其網絡結構如圖6所示。

圖6 SSD網絡結構圖
針對YOLO V1 存在的不足,后續進行了許多改進。YOLO V2 采用DarkNet-19[41]網絡,通過在卷積層后加入歸一化指數層、對分類網絡進行預訓練、引入錨框機制和細粒度特征等方法,在保證速度的基礎上,提高了檢測精度。YOLO V3 采用DarkNet-53 網絡,借鑒了特征金字塔(FPN)思想,對不同尺度特征圖進行融合,在分類時利用Logistic loss代替Softmax loss,有效地提升了小目標的檢測精度[42]。
2020 年,YOLO V4 正式提出,其改進方法包括輸入端使用Mosaic數據增強方法、SAT 自對抗訓練法和交叉小批量標準化(CmBN)法,極大地豐富了圖像的上下文信息;同時采用更高效的CSPDarknet53 網絡,引入Mish 激活函數和Dropblock,對主干網絡進行改進;在頸部結構上,主要采用了SPP模塊、FPN+PAN 的方式,提高特征提取能力;應用遺傳算法時,選擇最優的超參數,解決網格敏感性問題等。相比之前,YOLO V4 不再需要使用昂貴的GPU進行訓練,大大降低了訓練門檻。
文獻[26]提出了DSSD 算法,采用ResNet 101作為主干網絡,提取更深層次的特征,同時提出基于top down 的網絡結構,用反卷積代替傳統的雙線性插值上采樣,在預測階段引入殘差單元,優化候選框回歸和分類任務輸入的特征圖。文獻[27]提出了RetinaNet 網絡架構,提出了Focal loss 損失函數,對樣本給予不同權重,改善了正負樣本不均衡的情況。文獻[43]提出了RefineNet,框架模擬了Faster R-CNN 與SSD 相互融合的思路,但特征圖不需要經過池化,而是直接通過中間模塊TCB進行傳遞,提高了檢測速度。文獻[44]提出了M2Det,引入了多層次特征金字塔的概念,將基礎網絡得到的多尺度特征疊加組合,得到新的多層次多尺度特征,以聚合淺層信息定位能力強、深層信息分類能力強的特點。文獻[45]提出了CornerNet,在預測目標物體時,通過左上角和右下角的兩個關鍵點就可以組合出目標框。
Two-stage 算法的優化手段主要歸結為:1)優化候選區域的生成,如引入RPN 網絡、特征金字塔等;2)更好地獲取ROI 特征,主要方法有引入SPP層、ROI池化層、對多層特征圖進行融合等;3)提高算法運行速度,主要通過提高候選區域的生成效率,整合網絡結構,使模型中更多模塊用作共享,不僅提高了檢測精度,而且壓縮了冗余空間。
One-stage 的優化手段主要歸結為:1)提高主干網絡效率,One-stage 采用不同的基礎網絡VGG16、DarkNet-19、CSPDarknet53 等,通過增加更多的層數和參數來增大感受野,增強目標檢測能力;2)提高獲取目標能力,通過提取多尺度特征信息、引入anchor思想等,降低背景誤判率,提高目標檢測精度;3)改進損失函數,用改進后的Logistic loss、Focal loss等損失函數,改善正負樣本不均衡問題,提升小目標的檢測精度。
表1 給出了典型的目標檢測網絡在VOC2007和COCO數據集的性能。

表1 典型目標檢測網絡性能對比
通過以上分析,對未來的目標檢測算法的研究方向提出幾點展望:
1)優化模型的頸部設計。目標檢測算法一般由在ImageNet 預訓練的骨架(backbone)和用來預測對象類別和邊界框的頭部(head)兩部分組成,頸部指在骨架和頭部之間插入的用來收集不同階段的特征圖的結構,如FPN、PAN 等。在今后的研究中,可以通過優化頸部結構設計,提高目標檢測效率。
2)開發更加高效的骨架或模型。近年,一些研究人員對新的骨架和模型研究取得了進展,提出了DetNet[46],DetNAS[47]等網絡結構,SpineNet[48],Hit-Detector[49]等模型,這些方法在不同程度上對目標檢測提供了積極影響。因此,開發新的基礎網絡或新模型也是未來目標檢測的研究方向。
3)模型輕量化,壓縮冗余空間。YOLO V4 可以適應于單GPU 訓練,大大提高了效率。此外,還有一些輕量化的網絡結構,如SqueezeNet[50]、MobileNet[51~52]、ShuffleNet[53~54]等。輕量化模型可以提高目標檢測實時性,降低計算機資源開銷,提高實際運用能力,將成為未來的重點研究方向之一。
目前,基于深度學習的目標檢測算法不斷興起,本文對目前主流的一些算法進行了綜述,首先簡單介紹了傳統目標檢測算法的流程與不足,接著對基于區域思想和基于回歸思想兩大類目標檢測算法分別進行了分析,最后對未來的目標檢測算法提出了展望,在深度學習理論的發展下,目標檢測一定會取得更大的進步。