劉 陽,謝永強,李忠博,齊 錦,李少南
(軍事科學院系統工程研究院,北京 100071)
目標檢測(Object Dection,OD)是一種從視頻或者圖片中找到感興趣的區域并標記出來的行為動作,可以通過算法提取特征來識別定位特定類別的對象。目標檢測主要應用在人臉識別、無人駕駛、指揮以及安防等領域。目標檢測功能的核心不在于硬件設備,而在于算法設計的優劣。不同算法性能的優劣將直接導致目標檢測在不同場景下的檢測效果。
自1998 年美國工程師提出目標檢測概念以來,產生了大量基于手工設計特征的傳統算法。這些算法大多是借鑒窮舉的思想,在基于滑動窗口生成的候選框內提取特征,并將特征交給分類器去識別。常見方法包括Hear 特征+Adaboost 算法[1-2]、Hog 特征+SVM 算法[3]等。因為早期很多的目標檢測算法缺乏有效的特征表示,所以設計了許多復雜的特征表示和在有限資源情況下處理特征加速的技巧。然而,傳統的目標檢測算法仍存在問題:為生成足夠的候選區域,計算機的邏輯運算開銷巨大;在提取特征時由于特征較多,篩選過程過于緩慢,分類速度和精度達不到實際應用的標準。Girshick 等[4]率先提出了將具有卷積神經網絡的區域應用于目標檢測,從而打破了傳統目標檢測算法性能趨于飽和的僵局。
近15 年來,基于深度學習的目標檢測算法研究有了長足的進步。基于深度學習的目標檢測算法主要分為基于錨點類模型和基于無錨點類模型兩種。基于錨點類模型又分為單階段方法和二階段方法。單階段方法只需要提取特征、分類和定位回歸即可。二階段方法比單階段方法多一個生成候選框的步驟,即提取特征后生成候選框再分類定位回歸。基于無錨點類模型主流算法分為基于關鍵點和密集預測兩類。因為基于深度學習的目標檢測算法各有優勢,所以本文綜合分析了各類算法的主要特點和存在的問題,以期能夠幫助讀者理解目標檢測算法的原理和內涵。
本文系統分析了基于深度學習的目標檢測算法,從單階段、二階段兩方面出發,對基于錨點類的目標檢測模型做出了深入分析,且總結了模型的主要特點和存在的問題,并從關鍵點和密集預測[5]類模型來分析基于無錨點類模型的研究進展。
基于錨點的目標檢測算法是由預先定義的錨點生成候選框,然后使用候選框進行分類和定位。卷積神經網絡發展于2012 年,近年來逐漸成熟。由于卷積神經網絡能夠對數字圖像有較好的特征表示,因此如何將卷積神經網絡應用于目標檢測是研究的重點。2014 年,Girshick 等首先提出了將這種網絡結構應用在目標檢測場景中,并命名為R CNN算法。從那時起,目標檢測算法進入基于錨點的時代,同時迎來了快速發展,開始進入單階段和二階段交替發展階段。目前,主流的基于錨點類算法按照出現時間和發展順序可分為二階段方法和單階段方法。二階段方法基于回歸,而單階段方法是在二階段方法的基礎上少一個生成候選框的步驟,相比于二階段方法檢測速度更快,更適合部署移動平臺。二階段方法檢測精度更高,更適合精準檢測的應用場景。圖1 給出了近年來優秀的目標檢測算法。

圖1 2013 年11 月至2020 年10 月目標檢測算法總覽
二階段目標檢測算法是基于回歸的算法,由兩個階段組成。先通過策略生成錨點框,后將錨點框通過處理后進行回歸定位。二階段的經典主流算法主要有R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN 以及FPN 等。
1.1.1 R-CNN
R-CNN 是Girshick 等[4]提出的第一個工業級精度的二階段目標檢測算法,將PASCAL VOC 2007測試集的平均精度均值(mean Average Precision,mAP)從之前最好的35.1%提高到了66%。R-CNN的實現過程如圖2 所示。R-CNN 算法首先通過選擇性搜索[6]生成約2 000 個建議框,將每個建議框調整為同一尺寸即227 pixel×227 pixel,后將其放入AlexNet 中提取特征得到特征圖。SVM 算法對提取的特征進行處理,然后每個類別都會形成一個對應向量,同時也會出現一個分值,最后使用非極大值抑制的技巧進行比對處理。同時,使用基于回歸的方法調整生成的矩形框,使之對目標的包圍更加精確。R-CNN 算法使目標檢測的精度得到了質的改變,是將深度學習應用到目標檢測領域的里程碑之作,也奠定了基于深度學習的二階段目標檢測算法的基礎[7]。

圖2 R-CNN 算法實現流程
R-CNN 的主要特點是將大規模的卷積神經網絡應用于候選框來提取特征,但也存在一些問題。第一,每個候選框需要單獨計算,且有的候選框重疊在一起,導致所需計算資源巨大;第二,訓練過程的4個步驟單獨完成,緩存數據獨立保存,導致訓練過程復雜;第三,前兩個缺點導致運行速度相對較慢,無法滿足實時性需求;第四,對圖像的輸入大小有約束,要求圖像的尺寸為227 pixel×227 pixel,對圖像要進行縮放操作會破壞圖像的信息,降低檢測器的檢測精度。
1.1.2 SPP-Net
針對卷積神經網絡的候選框的重復計算和縮放圖像造成的信息損失問題,He 等[8]基于卷積神經網絡于2015 年提出SPP-Net 算法。SPP-Net 在R-CNN 的基礎上去掉了在輸入圖像上生成候選框并將其統一成同一尺寸的操作。將SPP 層放入全連接層和倒數第一個卷積層之間,將獲得特征向量的方式設置在卷積操作之后,減少了操作,降低了復雜度。SPP-Net 具體實現流程如圖3 所示。

圖3 空間金字塔池化層結構
SPP-Net 創新使用了空間金字塔結構,只提取一次特征,大大減少了計算量,相對提高了運行速率。但是,SPP-Net 也存在一些問題。第一,它仍然保留了R-CNN 的生成候選框、提取特征、SVM分類和定位回歸4 個步驟,中間數據依舊保存,時間消耗仍然巨大;第二,分類網絡的初始參數被直接接入骨干網,沒有針對具體的檢測問題做調整;第三,由于輸入圖像不需要縮放成統一尺寸,增加了感興趣區域的感受野,導致權重不能及時更新;第四,SPP 的調整只能調節全連接層,當網絡足夠深的時候無法起作用。
1.1.3 Fast R-CNN
針在2015 年Girshick 等[9]繼承R-CNN 的同時吸收了SPP-Net 的特點,提出Fast R-CNN 算法,將感興趣區域池化層(ROI Pooling Layer)放在倒數第一個卷積層后,用來將ROI 特征生成固定比例的特征圖,并將其與全連接層連接。同時,Fast R CNN 網絡具有雙層分支輸出——第一個輸出通過Soft max 函數來計算類別上的概率分布,第二個輸出矩形框的精準調校信息。具體實現流程如圖4 所示。

圖4 Fast R-CNN 算法實現流程
Fast R-CNN 使用了和金字塔池化層類似的感興趣區域池化層,但是感興趣區域池化層更簡單,可以直接將導數結果傳回骨干網絡。此外,Fast R-CNN 將提取特征后的分類步驟和邊界框回歸步驟添加到深度網絡中進行同步訓練,其中訓練速度和測試速度較R-CNN 有較大提升。Fast R-CNN 存在兩個問題:一是生成候選框仍然是使用選擇性搜索,雖然速度較R-CNN 有較大提升,但仍然無法滿足實時性需求;二是仍然保留了SPP-Net 的各模塊單獨運算,計算量仍然巨大。
1.1.4 Faster R-CNN
針對SPP-Net 和Fast R-CNN 都使用了選擇性搜索的算法模塊,造成計算量巨大的問題。為了解決這個問題,Ren 等[10]提出了Faster R-CNN 算法。在Fast R-CNN 的基礎上添加區域建議網絡[11],替代了傳統的特征提取方法,提高了網絡的訓練速度,通過神經網絡的權值共享實現了端到端的訓練。Faster R-CNN 的具體實現方式如圖5 所示。

圖5 Faster R-CNN 算法實現流程
R-CNN、Fast R-CNN、Faster R-CNN 屬于同一體系的不斷優化。表1 列出了3 個模型的使用方法、缺點和改進程度。

表1 R-CNN、Fast R-CNN、Faster R-CNN 對比
1.1.5 R-FCN
針對Faster R-CNN 對每個ROI 進行大量的重復計算問題,2016 年Dai 等提出R-FCN[12]方法,引入了位置敏感分數圖,以解決在圖像分類中圖片自身的變化不會更改圖片屬性的矛盾問題,從而達到將幾乎所有的計算權值都在整幅圖像上共享的目的。位置敏感分數圖使用感興趣區域池化層來完成信息采樣,融合分類與位置信息。R-FCN在PASCAL VOC 2007 數據集上取得了mAP 值為83.6%的成績。具體實現方式如圖6 所示。

圖6 R-FCN 算法實現流程
FCN 提出了位置敏感分數圖,提高了CNN 的建模幾何變換能力,但缺乏對候選區域全局信息和語義信息的利用。
1.1.6 FPN
2017 年,Lin 等[13]在Faster R-CNN 的RPN 層的基礎上進一步提出了特征金字塔網絡(Feature Pyramid Net works,FPN)算法。該設計結構可以使不同分辨率的信息特征融合,使得特征圖具有較強的語義。FPN 的網絡結構如圖7 所示。

圖7 FPN 算法實現流程
FPN 采用自頂向下的結構,在過程中通過最近鄰插值的上采樣方法進行特征圖放大,可以最大程度地保留特征圖的語義信息,但是內存占用巨大,導致速度執行過慢。
1.1.7 二階段方法的相關改進工作
R-CNN 解決了不用卷積神經網絡進行分類的問題,但是需要進行邊界框定位回歸且利用SVM 分類器分類。Fast R-CNN 解決了邊界框和標簽不能共同輸出的問題,但是生成候選框仍是采用選擇性搜索方法,消耗時間過長。Faster R-CNN 解決了選擇性搜索問題。Mask R-CNN[14]是一個靈活的模型,可應用于檢測、分割以及識別等多種任務。之后大量的二階段方法在網絡結構的改進方面都圍繞著R-CNN框架,而MR CNN[15]、HyperNet[16]、CRAFT[17]等方法都是在圍繞R CNN 的特征層和分類器做調整。A-Fast R-CNN[18]加入對抗學習,增加了識別的泛化能力。Light Head R-CNN[19]針對檢測速度慢設計了一種全新的結構。針對小目標檢測問題,SNIP[20]利用金字塔結構在訓練期間減少尺寸差異。Cao[21]通過引入注意力機制來解決高分辨率下的特征圖與感受野的平衡問題。TridentNet[22]提出了參數共享策略。之前大量的研究都是改進網絡結構,Peng[23]提出了一種大的mini batch的目標檢測模型MegDet,提高了精度。此外,為了平衡質量與數量的關系,加入級聯檢測提出了Cascade R-CNN[24]。
二階段單階段目標檢測算法是直接進行定位回歸的算法,比二階段方法減少了分階段步驟,所以檢測速度更快。基于深度學習技術的單階段目標檢測主流算法主要包括REDMON[25]等提出的YOLO算法及其系列和Liu[26]等提出的SSD 算法及其系列。兩種算法系列均是對原始圖像直接進行特征提取,計算出目標物體的類別概率和位置坐標值[7]。
1.2.1 YOLOv1 算法
2015 年,Redmon[25]等提出了YOLO 方法,最大特點提升檢測速度達到45 張/秒,開始了端到端的目標檢測技術的發展。YOLOv1 先對圖像進行預處理,將圖片調整為指定大小,然后類似于回歸處理來進行卷積提取檢測。具體網絡結構如圖8 所示。YOLOv1 相對于Faster R-CNN,犧牲了檢測準度和定位精度,但是檢測速度提高了近7 倍。

圖8 YOLOv1 結構
1.2.2 SSD 算法
針對YOLOv1 算法精度差的問題,Liu[26]等提出了結合YOLO V1 和Faster R-CNN 的算法SSD。如圖9 所示,SSD 算法使用VGG16 作為基礎網絡。由于不同卷積層所包含特征的尺寸不同,SSD 使用了特征金字塔預測的方式,通過多層模型參考模式來實現不同大小的檢測。在PASCAL VOC 2007 數據集測試300 pixel×300 pixel 的圖像,實時速率達到59 張/秒,mAP 值達到76.8%。

圖9 SSD 結構
SSD 使用多層預測來替代單層預測,但還存在一些問題。第一,采用多層遞進,使最后一層的感受野接收信息量增多,導致對小目標物體檢測精度不夠。第二,存在回歸模型的通病,即可能無法收斂。
1.2.3 YOLOv2 算法
Redmon[27]針對YOLOv1 的不足和存在的問題提出了一種進階結構YOLOv2。YOLOv2 在所有的卷積層上都添加了批標準化操作,省略了dropout操作,使得mAP 有了2% 的提升。YOLOv1 預測矩形框的位置可通過全連接來實現,而Faster R-CNN 中通過計算邊界框相對于錨點的偏移量,并非直接預測邊界框的坐標。于是,YOLOv2 引入了錨點框的概念來預測邊界框,并去掉了全連接層。YOLOv2 的基礎網絡也進行了調整,使用了DarkNet19 分類網絡。該網絡有19 個卷積層和5 個最大池化層。YOLOv2 具體的網絡結構,如圖10 所示。YOLOv2 在PASCAL VOC 2007 數據集上的檢測精度從66.4%提升到78.6%[7]。

圖10 YOLOv2 主干網絡結構
1.2.4 YOLOv3 算法
在YOLOv2 的基礎上,在2018 年提出了更快、更好的YOLOv3[28]方法。YOLOv3 在整體結構上有較大改動,在基礎網絡上使用DarkNet 53,其網絡結構如圖11 所示。它的模型有106 層網絡,精度與ResNet101 相同速度下更快。YOLOv3 使用類似FPN 的方法進行多尺度預測,在網絡中3 個不同位置的3 種不同尺度的特征圖上進行檢測任務,使小目標檢測精度有明顯提升。對同一邊界框進行多個類別的預測,使用多個獨立的邏輯分類器代替Softmax 函數。這些改變使得YOLOv3 在MS COCO數據集上的準確率提高到了33.0%。

圖11 YOLOv3 主干網絡結構
1.2.5 YOLOv4 算法
2020 年,Bochkovskiy[29]等人提出了YOLOv4。該模型是集所有優秀的目標檢測算法的調參技巧于一體的目標檢測模型。它結合了加權殘差連接、跨階段部分連接、跨小批量規范化、自對抗訓練、Mish 激活函數、CIoU 損失函數和DropBlock 規范化等方法。主干網絡為CSPDarknet53,添加特征金字塔模塊來增加感受野,使用PANet 來替代FPN 做特征融合。在MSCOCO數據集上,它達到43.5%的平均精度(Average Precision,AP),同時在TeslaV100 上達到實時速度65 張/秒的最新成果。YOLOv4 網絡結構,見圖12。

圖12 YOLOv4 結構
1.2.6 RetinaNet 算法
針對樣本類別不均衡的問題,Lin 等提出了RetinaNet[30]算法。該算法采用一種新的損失函數focal loss 來替代交叉熵損失函數。RetinaNet 算法可以使單階段方法的精度媲美一部分二階段方法,在MS COCO 數據集中mAP 值可以達到40.8%。雖然檢測速度仍比單階段方法慢,但仍然超過部分二階段方法。
1.2.7 單階段方法的相關改進工作
YOLO 系列和SSD 系列是單階段目標檢測算法的中流砥柱,幾乎奠定了目標檢測算法的發展模型。R-SSD[31]、DSOD[32]是基于SSD 的改進,解決小目標信息缺失的問題。RON[33]更加關注負例樣本。STDN[34、PFPNet[35]解決了檢測速度與精度平衡的問題。M2Det[36]采用多層金字塔結構,使得精度更高。
基于錨點的模型是指在原圖上鋪設好大小一定的矩形包圍框。然而,基于錨點的模型仍存在問題:預先設定的錨點框數量太多,當目標較少時會浪費大量資源;預設的錨點框大多為負樣本,訓練時會造成正、負樣本失衡;預設的錨點框大多是憑人為經驗設計的,其尺寸對數據集敏感,可能會影響檢測精度;對于不同的場景,需要修改大量的超參數。為了解決上述問題,提出了基于無錨點的檢測模型。以下從基于關鍵點和基于密集預測類模型兩個方面來梳理基于無錨點的主流目標檢測算法。
在2018 年,Law[37]等人提出了CornerNet 算法,通過角點來檢測邊界框。在此基礎上,Zhou[38]等人提出了ExtremeNet 算法,是一種新的目標檢測方向。它選取上下左右4 個極值和1 個中心點作為關鍵點。Duan[39]等人發現CornerNet 只使用角點會出現精度不準的問題。為了解決這個問題,提出了CenterNet算法。它添加了中間結構,不僅能夠檢測物體的角點,還可以使物體的中心點進行檢測匹配。
Tian 等人[40]提出了基于單階段的全部由卷積層構成的FCOS 算法,沒有錨點計算,同時增加多種結構來預測多尺度圖像。為了特征層與圖像進行自適應匹配,FSAF[41]算法不設置錨點來實現基于無錨點的模型。FASF 解決了基于錨點的兩種限制問題:一是特征的選擇問題;二是錨點的采樣問題。
在目標檢測領域中,在業界承認的ImageNet、COCO 等公開數據集進行算法性能驗證是檢測模型的最好方法。本文采用所有類別平均準確率(mPA)做為評價模型準確率性能的優劣,用每秒內可以處理的圖片數量即幀率做為評價模型檢測速度性能的優劣。相同環境下,幀率越大,檢測速度越快。表2 是對基于錨點類模型和基于無錨點類模型中的主流算法進行性能指標參數的比較。可以看出,Faster R-CNN 在VOC 2007 數據集的mAP 值有73.2%,檢測速度有7 幀/s。但因為Faster R-CNN可修改性很強,所以修改后的Faster R-CNN 算法可廣泛應用于工業檢測。總體來說,二階段方法更適用于具有對生產的安全性、高效性、完整性要求高的自動化生產的工業場景。YOLOv4 在MS COCO 數據集的mAP 值為43.5%,對小目標物體有較強的泛化能力,檢測速度達到了23 幀/s。最新的單階段目標檢測算法的檢測精度已達到工業應用標準,且檢測速度達到了近實時水平,適用于對實時性有較高要求的應用場景。而CenterNet 在MS COCO 數據集上,雖然mAP 值達到了47%,但是檢測速度只有7.8 幀/s。總體來說,單階段方法比無錨點類算法更適合有實時檢測需求的應用場景。隨著算法結構的復雜設計,未來一定是在精度提升的同時保證較快的檢測速度,且部署量級需足 夠小。

表2 不同目標檢測算法的性能
現在仍然有以下問題有待突破。第一,小目標問題。由于小目標尺寸小,僅占整個圖像的部分區域,包含的特征信息較少,難以消除復雜特征背景的干擾。目前,很多目標檢測算法通過融合多尺度的特征信息感知目標的上下文信息,以解決小目標的特征信息少的問題,但是仍然會造成誤檢和漏檢等問題。第二,光照問題。可見光的目標檢測已經趨于成熟,在逆光條件下甚至是在黑夜場景中對目標進行檢測識別存在一定挑戰。第三,傳輸時的惡劣信道問題。當數據圖像經過網絡傳輸造成損傷丟幀時,需要目標檢測算法仍然可以識別。未來,在復雜的背景環境中要消除復雜特征的干擾,提升對目標檢測的準確性和實時性。
過去的10 年中,基于深度學習的目標檢測在算法識別精度和檢測速度上取得了顯著成就。本文深入系統地分析了基于錨點的目標檢測算法,從基于關鍵點和基于密集預測類模型兩個方面梳理了基于無錨點的目標檢測算法。結合目標檢測的評價指標討論模型的主要特點、存在的問題以及進一步擴展和改進這些目標檢測模型的相關工作。本文的分析結果能夠幫助讀者理解主流的目標檢測算法,了解目標檢測算法對傳統應用的支撐作用。