摘 要:
目標檢測是指在視頻或圖片序列中把感興趣的目標與背景區分,是在圖像中確定目標是否存在且確定目標位置的過程,是計算機視覺領域中的主要研究方向。目標檢測主要應用于人臉識別、無人駕駛、指控和安防等領域,起到人工智能賦能傳統應用的作用。目標檢測的核心是算法。目前,目標檢測算法主要分為兩大類,第一類是基于手工設計特征的傳統算法,第二類是基于深度學習的目標檢測算法。近年來,基于深度學習的目標檢測算法成為發展的主流,算法性能也遠超手工設計特征的傳統算法。該研究進展主要聚焦基于深度學習的主流目標檢測算法,分析基于錨點(Anchor?-based)類模型中的單階段、二階段等主流算法,闡述算法的主要特點和存在問題,介紹基于無錨點(Anchor?-free)類型中的關鍵點和密集預測類算法研究進展,并對基于深度學習的目標檢測算法進行了分析和展望。
0
引 言
目標檢測(Object Dection,OD)是一種從視頻或者圖片中找到感興趣的區域并標記出來的行為動作,可以通過算法提取特征來識別定位特定類別的對象。目標檢測主要應用在人臉識別、無人駕駛、指揮以及安防等領域。目標檢測功能的核心不在于硬件設備,而在于算法設計的優劣。不同算法性能的優劣將直接導致目標檢測在不同場景下的檢測效果。
自1998年美國工程師提出目標檢測概念以來,產生了大量基于手工設計特征的傳統算法。這些算法大多是借鑒窮舉的思想,在基于滑動窗口生成的候選框內提取特征,并將特征交給分類器去識別。常見方法包括Hear特征+Adaboost算法、Hog特征+SVM算法等。因為早期很多的目標檢測算法缺乏有效的特征表示,所以設計了許多復雜的特征表示和在有限資源情況下處理特征加速的技巧。然而,傳統的目標檢測算法仍存在問題:為生成足夠的候選區域,計算機的邏輯運算開銷巨大;在提取特征時由于特征較多,篩選過程過于緩慢,分類速度和精度達不到實際應用的標準。Girshick等率先提出了將具有卷積神經網絡的區域應用于目標檢測,從而打破了傳統目標檢測算法性能趨于飽和的僵局。
近15年來,基于深度學習的目標檢測算法研究有了長足的進步。基于深度學習的目標檢測算法主要分為基于錨點類模型和基于無錨點類模型兩種。基于錨點類模型又分為單階段方法和二階段方法。單階段方法只需要提取特征、分類和定位回歸即可。二階段方法比單階段方法多一個生成候選框的步驟,即提取特征后生成候選框再分類定位回歸。基于無錨點類模型主流算法分為基于關鍵點和密集預測兩類。因為基于深度學習的目標檢測算法各有優勢,所以本文綜合分析了各類算法的主要特點和存在的問題,以期能夠幫助讀者理解目標檢測算法的原理和內涵。
本文系統分析了基于深度學習的目標檢測算法,從單階段、二階段兩方面出發,對基于錨點類的目標檢測模型做出了深入分析,且總結了模型的主要特點和存在的問題,并從關鍵點和密集預測類模型來分析基于無錨點類模型的研究進展。
1
基于錨點的目標檢測算法
基于錨點的目標檢測算法是由預先定義的錨點生成候選框,然后使用候選框進行分類和定位。卷積神經網絡發展于2012年,近年來逐漸成熟。由于卷積神經網絡能夠對數字圖像有較好的特征表示,因此如何將卷積神經網絡應用于目標檢測是研究的重點。2014年,Girshick等首先提出了將這種網絡結構應用在目標檢測場景中,并命名為R?CNN算法。從那時起,目標檢測算法進入基于錨點的時代,同時迎來了快速發展。目標檢測開始進入單階段和二階段交替發展階段。目前,主流的基于錨點類算法按照出現時間和發展順序可分為二階段方法和單階段方法。二階段方法基于回歸,而單階段方法是在二階段方法的基礎上少一個生成候選框的步驟,相比于二階段方法檢測速度更快,更適合部署移動平臺。二階段方法檢測精度更高,更適合精準檢測的應用場景。圖1給出了近年來優秀的目標檢測算法。
圖1 2013年11月至2020年10月目標檢測算法總覽
1.1 二階段目標檢測
二階段目標檢測算法是基于回歸的算法,由兩個階段組成。先通過策略生成錨點框,后將錨點框通過處理后進行回歸定位。二階段的經典主流算法主要有R-?CNN、SPP-?Net、Fast R-?CNN、Faster R-?CNN、R-?FCN以及FPN等。
1.1.1 R-?CNN
R-?CNN是Girshick等提出的第一個工業級精度的二階段目標檢測算法,將PASCAL VOC 2007測試集的平均精度均值(mean Average Precision,mAP)從之前最好的35.1%提高到了66%。R-CNN的實現過程如圖2所示。R-?CNN算法首先通過選擇性搜索生成約2 000個建議框,將每個建議框調整為同一尺寸即227 pixel×227 pixel,后將其放入AlexNet中提取特征得到特征圖。SVM算法對提取的特征進行處理,然后每個類別都會形成一個對應向量,同時也會出現一個分值,最后使用非極大值抑制的技巧進行比對處理。同時,使用基于回歸的方法調整生成的矩形框,使之對目標的包圍更加精確。R-?CNN算法使目標檢測的精度得到了質的改變,是將深度學習應用到目標檢測領域的里程碑之作,也奠定了基于深度學習的二階段目標檢測算法的基礎。
R-?CNN的主要特點是將大規模的卷積神經網絡應用于候選框來提取特征,但也存在一些問題。第一,每個候選框需要單獨計算,且有的候選框重疊在一起,導致所需計算資源巨大;第二,訓練過程的4個步驟單獨完成,緩存數據獨立保存,導致訓練過程復雜;第三,前兩個缺點導致運行速度相對較慢,無法滿足實時性需求;第四,對圖像的輸入大小有約束,要求圖像的尺寸為227 pixel×227 pixel,對圖像要進行縮放操作會破壞圖像的信息,降低檢測器的檢測精度。
圖2 R-?CNN算法實現流程
1.1.2 SPP-?Net
針對卷積神經網絡的候選框的重復計算和縮放圖像造成的信息損失問題,He等基于卷積神經網絡于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等繼承R-?CNN的同時吸收了SPP-?Net的特點,提出Fast R-?CNN算法,將感興趣區域池化層(ROI Pooling Layer)放在倒數第一個卷積層后,用來將ROI特征生成固定比例的特征圖,并將其與全連接層連接。同時,Fast R?CNN網絡具有雙層分支輸出——第一個輸出通過SoftMax函數來計算類別上的概率分布,第二個輸出矩形框的精準調校信息。具體實現流程如圖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等提出了Faster R-?CNN算法。在Fast R-?CNN的基礎上添加區域建議網絡,替代了傳統的特征提取方法,提高了網絡的訓練速度。通過神經網絡的權值共享實現了端到端的訓練。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方法,引入了位置敏感分數圖,以解決在圖像分類中圖片自身的變化不會更改圖片屬性的矛盾問題,從而達到將幾乎所有的計算權值都在整幅圖像上共享的目的。位置敏感分數圖使用感興趣區域池化層來完成信息采樣,融合分類與位置信息。R-?FCN在PASCAL VOC 2007數據集上取得了mAP值為83.6%的成績。具體實現方式如圖6所示。
圖6 R-FCN算法實現流程
R-?FCN提出了位置敏感分數圖,提高了CNN的建模幾何變換能力,但缺乏對候選區域全局信息和語義信息的利用。
1.1.6 FPN
2017年,Lin等在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是一個靈活的模型,可應用于檢測、分割以及識別等多種任務。之后大量的二階段方法在網絡結構的改進方面都圍繞著R-?CNN框架,而MR?CNN、HyperNe、CRAFT等方法都是在圍繞R?CNN的特征層和分類器做調整。A-?Fast ?R-CNN加入對抗學習,增加識別的泛化能力。Light ?Head R-?CNN針對檢測速度慢設計了一種全新的結構。針對小目標檢測問題,SNIP利用金字塔結構在訓練期間減少尺寸差異。Cao通過引入注意力機制來解決高分辨率下的特征圖與感受野的平衡問題。TridentNet提出了參數共享策略。之前大量的研究都是改進網絡結構,Peng提出了一種大的mini?batch的目標檢測模型MegDet,提高了精度。此外,為了平衡質量與數量的關系,加入級聯檢測提出了Cascade R-?CNN。
1.2 單階段目標檢測
二階段單階段目標檢測算法是直接進行定位回歸的算法,比二階段方法減少了分階段步驟,所以檢測速度更快。基于深度學習技術的單階段目標檢測主流算法主要包括REDMON等提出的YOLO算法及其系列和Liu等提出的SSD算法及其系列。兩種算法系列均是對原始圖像直接進行特征提取,計算出目標物體的類別概率和位置坐標值。
1.2.1 YOLOv1算法
2015年,Redmon等提出了YOLO方法,最大特點提升檢測速度達到45張/秒,開始了端到端的目標檢測技術的發展。YOLOv1先對圖像進行預處理,將圖片調整為指定大小,然后類似于回歸處理來進行卷積提取檢測。具體網絡結構如圖8所示。YOLOv1相對于Faster R-CNN,犧牲了檢測準度和定位精度,但是檢測速度提高了近7倍。
圖8 YOLOv1結構
1.2.2 SSD算法
針對YOLOv1算法精度差的問題,Liu等提出了結合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針對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%。
圖10 YOLOv2主干網絡結構
1.2.4 YOLOv3算法
在YOLOv2的基礎上,在2018年提出了更快、更好的YOLOv3方法。YOLOv3在整體結構上有較大改動,在基礎網絡上使用DarkNet?53,其網絡結構如圖11所示。它的模型有106層網絡,精度與ResNet101相同速度下更快。YOLOv3使用類似FPN的方法進行多尺度預測,在網絡中3個不同位置的3種不同尺度的特征圖上進行檢測任務,使小目標檢測精度有明顯提升。對同一邊界框進行多個類別的預測,使用多個獨立的邏輯分類器代替softmax函數。這些改變使得YOLOv3在MS COCO數據集上的準確率提高到了33.0%。
圖11 YOLOv3主干網絡結構
1.2.5 YOLOv4算法
2020年,Bochkovskiy等人提出了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算法。該算法采用一種新的損失函數focal loss來替代交叉熵損失函數。RetinaNet算法可以使單階段方法的精度媲美一部分二階段方法,在MS COCO數據集中mAP值可以達到40.8%。雖然檢測速度仍比單階段方法慢,但仍然超過部分二階段方法。
1.2.7 單階段方法的相關改進工作
YOLO系列和SSD系列是單階段目標檢測算法的中流砥柱,幾乎奠定了目標檢測算法的發展模型。R-SSD、DSOD是基于SSD的改進,解決小目標信息缺失的問題。RON更加關注負例樣本。STDN 、PFPNet解決了檢測速度與精度平衡的問題。M2Det采用多層金字塔結構,使得精度更高。
2
基于錨點的目標檢測算法
基于錨點的模型是指在原圖上鋪設好大小一定的矩形包圍框。然而,基于錨點的模型仍存在問題:預先設定的錨點框數量太多,當目標較少時會浪費大量資源;預設的錨點框大多為負樣本,訓練時會造成正、負樣本失衡;預設的錨點框大多是憑人為經驗設計的,其尺寸對數據集敏感,可能會影響檢測精度;對于不同的場景,需要修改大量的超參數。為了解決上述問題,提出了基于無錨點的檢測模型。以下從基于關鍵點和基于密集預測類模型兩個方面來梳理基于無錨點的主流目標檢測算法。
2.1 基于關鍵點的目標檢測算法
在2018年,Law等人提出了CornerNet算法,通過角點來檢測邊界框。在此基礎上,Zhou等人提出了ExtremeNet算法,是一種新的目標檢測方向。它選取上下左右4個極值和1個中心點作為關鍵點。Duan等人發現CornerNet只使用角點會出現精度不準的問題。為了解決這個問題,提出了CenterNet算法。它添加了中間結構,不僅能夠檢測物體的角點,也可以使物體的中心點進行檢測匹配。
2.2 基于密集預測的目標檢測算法
Tian等人提出了基于單階段的全部由卷積層構成的FCOS算法,沒有錨點計算,同時增加多種結構來預測多尺度圖像。為了特征層與圖像進行自適應匹配,FSAF算法不設置錨點來實現基于無錨點的模型。FASF解決了基于錨點的兩種限制問題:一是特征的選擇問題;二是錨點的采樣問題。
3
不同目標檢測算法的性能比較
在目標檢測領域中,在業界承認的ImageNet、COCO等公開數據集進行算法性能驗證是檢測模型的最好方法。本文采用所有類別平均準確率(mean Average Precision,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 不同目標檢測算法的性能
4
目標檢測算法的主要挑戰
現在仍然有以下問題有待突破。第一,小目標問題。由于小目標尺寸小,僅占整個圖像的部分區域,包含的特征信息較少,難以消除復雜特征背景的干擾。目前,很多目標檢測算法通過融合多尺度的特征信息感知目標的上下文信息,以解決小目標的特征信息少的問題,但是仍然會造成誤檢和漏檢等問題。第二,光照問題。可見光的目標檢測已經趨于成熟,在逆光條件下甚至是在黑夜場景中對目標進行檢測識別存在一定挑戰。第三,傳輸時的惡劣信道問題。當數據圖像經過網絡傳輸造成損傷丟幀時,需要目標檢測算法仍然可以識別。未來,在復雜的背景環境中要消除復雜特征的干擾,提升對目標檢測的準確性和實時性。
5
結 語
過去的10年中,基于深度學習的目標檢測在算法識別精度和檢測速度上取得了顯著成就。本文深入系統地分析了基于錨點的目標檢測算法,從基于關鍵點和基于密集預測類模型兩個方面梳理了基于無錨點的目標檢測算法。結合目標檢測的評價指標討論模型的主要特點、存在的問題以及進一步擴展和改進這些目標檢測模型的相關工作。本文的分析結果能夠幫助讀者理解主流的目標檢測算法,了解目標檢測算法對傳統應用的支撐作用。