文章目錄
- Anchor-Based方法
- Two-stage目標檢測算法
- RCNN
- Fast RCNN
- Faster RCNN
- FPN(理解為Faster R-CNN中的一個關鍵組件或改進模塊)
- One-stage目標檢測算法
- YOLO
- SSD
- Anchor-Free方法
- CornerNet
- CenterNet
- FSAF
- FCOS
- SAPD
- 基于transformer的方法
- DETR
- 常用數據集
- Reference
目標檢測是計算機視覺的一個非常重要的核心方向,它的主要任務目標定位和目標分類。
基于深度學習的目標檢測方法大致可分為兩類:Anchor based方法(一階段,二階段)、Anchor free方法、基于transformer的方法。
無論是anchor還是anchor free,檢測任務無非就是這樣的思路:
-
表示:如何表示圖像上的物體,如bbox,conner,center,reppoints等;
-
分配:如何分配正負樣本:IOU、高斯熱圖、centerness等;
-
分類:分類任務計算物體類別損失,解決樣本不平衡的問題;
-
回歸:回歸任務計算物體尺度、offset等等,以進行一些修正。
Anchor-Based方法
基于CNNs的目標檢測算法主要有兩條技術發展路線:anchor-based和anchor-free方法,而anchor-based方法則包括一階段和二階段檢測算法(二階段目標檢測算法一般比一階段精度要高,但一階段檢測算法速度會更快)。
局限性:
- Anchor的大小,數量,長寬比對于檢測性能的影響很大(通過改變這些超參數Retinanet在COCO benchmark上面提升了4%的AP),因此Anchor based的檢測性能對于anchor的大小、數量和長寬比都非常敏感。
- 這些固定的Anchor極大地損害了檢測器的普適性,導致對于不同任務,其Anchor都必須重新設置大小和長寬比。
- 為了去匹配真實框,需要生成大量的Anchor,但是大部分的Anchor在訓練時標記為負樣本,所以就造成了樣本極度不均衡問題(沒有充分利用fore-ground)。
- 在訓練中,網絡需要計算所有Anchor與真實框的IOU,這樣就會消耗大量內存和時間。
Two-stage目標檢測算法
二階段檢測算法主要的兩個階段:
Stage1: 從圖像中生成region proposals
Stage2: 從region proposals生成最終物體框
相較于單階段目標檢測算法,雙階段目標檢測算法先根據圖像提取候選框,然后基于候選區域做二次修正得到檢測點結果,檢測精度較高,但檢測速度較慢。
這類算法的開山之作是RCNN,隨后Fast RCNN、Faster RCNN依次對其進行了改進。
由于優秀的性能,Faster RCNN至今仍然是目標檢測領域很有競爭力的算法。隨后,FPN、Mask RCNN等算法又針對Faster RCNN的不足提出了改進,這進一步豐富了Faster RCNN的組件,提升了它的性能。
RCNN
簡介:
CNN首先通過選擇性搜索算法Selective Search從一組對象候選框中選擇可能出現的對象框,然后將這些選擇出來的對象框中的圖像resize到某一固定尺寸的圖像,并喂入到CNN模型(經過在ImageNet數據集上訓練過的CNN模型,如AlexNet)提取特征,最后將提取出的特征送入到分類器來預測該對象框中的圖像是否存在待檢測目標,并進一步預測該檢測目標具體屬于哪一類。
不足:
重疊框(一張圖片大2000多個候選框)特征的冗余計算使得整個網絡的檢測速度變得很慢(使用GPU的情況下檢測一張圖片大約需要14S)。
Fast RCNN
簡介:
在RCNN中,每個候選區域都需要用CNN單獨提取特征。為了減少算法的計算時間,Fast-RCNN希望在每張圖片上只使用一次CNN,就能提取到所有關注區域的特征。
該網路使得我們可以在相同的網絡配置下同時訓練一個檢測器和邊框回歸器。該網絡首先輸入圖像,圖像被傳遞到CNN中提取特征,并返回感興趣的區域ROI,之后再ROI上運用ROI池化層以保證每個區域的尺寸相同,最后這些區域的特征被傳遞到全連接層的網絡中進行分類,并用Softmax和線性回歸層同時返回邊界框。
不足:
與RCNN相比,Fast RCNN計算一張圖片只需要2秒,速度有大幅提升,每張圖片的計算時間只有但仍不夠理想。因為它依然用到了選擇性搜索方法得到感興趣區域,而這一過程通常很慢。
Faster RCNN
簡介:
Faster RCNN針對感興趣區域的生成方式,對RCNN進行了優化,進一步提高了計算速度和準確率。具體來說,Faster RCNN使用Region Proposal Network(RPN) 生成感興趣區域:
該網絡首先輸入圖像到卷積網絡中,生成該圖像的特征映射。在特征映射上應用Region Proposal Network,返回object proposals和相應分數。應用Rol池化層,將所有proposals修正到同樣尺寸。最后,將proposals傳遞到完全連接層,生成目標物體的邊界框。
不足:
時至今日,依然是目標檢測領域的主流算法之一。
雖然Faster RCNN的精度更高,速度更快,也非常接近于實時性能,但它在后續的檢測階段中仍存在一些計算冗余;除此之外,如果IOU閾值設置的低,會引起噪聲檢測的問題,如果IOU設置的高,則會引起過擬合。
在R-CNN系列算法中,包括原始的R-CNN以及其后續改進版本Fast R-CNN和Faster R-CNN,卷積神經網絡(CNN)通常用作特征提取器(backbone)。這些算法的核心思想是使用深度學習來提取圖像特征,然后在此基礎上進行目標檢測任務。
在這些算法中,CNN backbone可以是不同的架構,如VGG-16、ResNet-50、ResNet-101等等。VGG-16是R-CNN原始論文中使用的backbone。
FPN(理解為Faster R-CNN中的一個關鍵組件或改進模塊)
簡介:
Faster R-CNN是利用單個高層特征圖(下采樣四倍的卷積層–Conv4)進行物體的分類和bounding box的回歸。這樣做對小物體的檢測不利,因為小物體本身具有的像素信息較少,在下采樣的過程中,這些信息很容易丟失,從而降低了算法的性能。
為了處理這種物體大小差異十分明顯的檢測問題,FPN提出了特征金字塔網絡結構,它引入了多尺度特征,在只增加少量計算量的情況下,提升小物體的檢測性能。
具體來說,Faster RCNN將最后一層特征輸入到了RPN中,最后一層的特征經過3x3卷積,得到256個channel的卷積層,再分別經過兩個1x1卷積得到類別得分和邊框回歸結果。
而FPN將P2、P3、P4、P5、P6這五個特征層的特征都輸入到了RPN中。每個特征層的下采樣倍數不同,這意味著它們具有不同的尺度信息分離,因此作者將322、642、1282、2562、5122這五種尺度的anchor,分別對應到P2、P3、P4、P5、P6這五個特征層上,這樣一來,每個特征層只需要專門處理單一的尺度信息即可。
此外,作者通過實驗發現,如果將這5個特征層后面的RPN參數共享,所得到的結果與不共享幾乎沒有差別。這說明不同下采樣倍數之間的特征有相似語義信息。
性能:
將FPN技術應用于Faster RCNN網絡之后,網絡的檢測精度得到了巨大提高,再次成為當前的SOTA檢測算法。此后FPN成為了各大網絡(分類,檢測與分割)提高精度最重要的技術之一。
在Faster R-CNN中,FPN通常被集成到基礎的卷積神經網絡中,用來改進區域建議網絡(RPN)和后續的檢測性能。FPN的引入顯著提高了Faster R-CNN對小目標的檢測能力,因為它能夠更有效地捕捉到多尺度的目標信息。
One-stage目標檢測算法
相較于雙階段目標檢測算法,單階段目標驗測算法直接對圖像進行計算生成檢測結果,檢測低速度快,但檢測精度低。
這類算法的開山之作是YOLO,隨后SSD、Retinanet依次對其進行了改進,提出YOLO的團隊將這些有助于提升性能的 trick融入到YOLO算法中,后續又提出了4個改進版本YOLOv2~YOLOv5。
盡管預測準確率不如雙階段目標檢測算法,由于較快的運行速度,YOLO成為了工業界的主流。
YOLO
簡介:
雙階段目標檢測需要預先設置大量先驗框,并且需要專門的神經網絡RPN對先驗框進行位置修正。這種設定使得雙階段目標檢測算法復雜且計算慢。
YOLO是單階段目標檢測的開山之作,它只需要用神經網絡處理一次圖片,就可以同時預測得到位置和類別,從而將目標檢測任務定義為端到端的回歸問題,提升了計算速度。YOLO的工作流程如下:
對于一張輸入圖片,首先將圖片縮放成統一的尺寸,并在圖片上劃分出若干表格。隨后使用卷積神經網絡提取圖片特征,并使用全連接層在每個網格上進行回歸預測,每個網格預測K個box,每個box預測五個回歸值。其中的四個回歸值代表box的位置,第五個回歸值代表box中含有物體的概率和位置的準確程度。
隨后對于含有物體的box,使用全連接層,回歸預測物體的在各個類別的條件概率。因而,卷積網絡共輸出的預測值個數為N×(K×5+C),其中N為網格數,K為每個網格生成box個數,C為類別數。
不足:
盡管單階段模型顯著提高了計算速度,YOLO劃分網格的方式較為粗糙,在小目標檢測任務上表現不佳,總體性能弱于Faster RCNN。
SSD
簡介:
針對YOLO的不足,SSD借鑒了雙階段目標檢測算法的一些trick,在YOLO的基礎上進行了一系列改進:
YOLO利用單個高層特征進行目標檢測,SSD則是將特征提取網絡中不同層的多個特征輸入到目標檢測模塊,以希望提升小物體檢測的精度。
YOLO在每個網格上預測多個邊界框,但這些預測都相對這個正方形網格本身,與真實目標多變的形狀差異較大,這使得YOLO需要在訓練過程中自適應目標的形狀。SSD借鑒了Faster R-CNN中先驗框理念,為每個網格設置不同尺度、長寬比的先驗框,這在一定程度上減少訓練難度。
SSD還使用卷積層絡替代全連接層,針對不同特征圖進行回歸預測,這樣一來,對于形狀為mxnxp的特征圖,只需要采用3x3xp這樣比較小的卷積核得到檢測值,進一步減少了模型的參數量,提高了計算速度。
總而言之,SSD算法的主要創新點是提出了Multi-reference和Multi-resolution的檢測技術。SSD算法和先前的一些檢測算法的區別在于:先前的一些檢測算法只是在網絡最深層的分支進行檢測,而SSD有多個不同的檢測分支,不同的檢測分支可以檢測多個尺度的目標,所以SSD在多尺度目標檢測的精度上有了很大的提高,對小目標檢測效果要好很多。
性能:
SSD的改進,使得單階段目標檢測算法的性能基本與當時的Faster-RCNN持平,不過后續又被Faster-RCNN類算法超越。
Anchor-Free方法
基于Anchor的物體檢測問題通常被建模成對一些候選區域進行分類和回歸的問題,在一階段檢測器中,這些候選區域就是通過滑窗方式產生Anchor box,而在二階段檢測器中,候選區域是RPN生成的Proposal,但是RPN本身仍然是對滑窗方式產生的Anchor進行分類和回歸。基于Anchor的檢測算法由于Anchor太多導致計算復雜,及其所帶來的大量超參數都會影響模型性能。近年的Anchor free技術則摒棄Anchor,通過確定關鍵點的方式來完成檢測,大大減少了網絡超參數的數量。
CornerNet
CenterNet
FSAF
FCOS
SAPD
基于transformer的方法
對于目標檢測任務而言,理論上講,各個目標之間的關系是有助于提升目標檢測效果的。盡管傳統目標檢測方法使用到了目標之間的關系,直到Transformer模型面世,無論是單階段還是雙階段目標檢測,都沒有很好地利用到注意力機制。
一個可能的原因是目標與目標之間的關系難以建模,因為目標的位置、尺度、類別、數量都會因圖像的不同而不同。而現代基于CNN的方法大多只有一個簡單、規則的網絡結構,對于上述復雜現象有些無能為力。
針對這種情況,Relation Net和DETR利用Transformer將注意力機制引入到目標檢測領域。Relation Net利用Transformer對不同目標之間的關系建模,在特征之中融入了關系信息,實現了特征增強。DETR則是基于Transformer提出了全新的目標檢測架構,開啟了目標檢測的新時代。
DETR
簡介:
DETR是首個用transformer完成目標檢測任務的代表性工作。
首先,DETR使用CNN提取圖片的特征,再加上NLP領域常用的位置編碼,最終生成了一批序列化數據。
在encoder階段,將序列化數據其送入encoder中,利用注意力機制提取數據中的特征。在decoder階段,輸入N個隨機初始化向量,每個object query關注圖片的不同位置。經過decoder的解碼,最終會生成N個向量,每個向量對應一個檢測到的目標。最后將這N個向量輸入到神經網絡中,得到每個目標的類別和位置。
相較于其它目標檢測算法,DETR生成的檢測框數量大幅減少,與真實的檢測框數量基本一致。DETR使用匈牙利算法,將預測框與真實框進行了匹配,隨后就可以計算出loss,完成對模型的訓練。
性能:
DETR取得了好于Faster RCNN的檢測效果,并且它不需要預先指定候選區域,不需要使用NMS去除重復的目標框,算法流程十分簡潔。
常用數據集
目標檢測使用最多的四大公共數據集:
Pascal VOC:
ILSVRC
MS-COCO
OID
Reference
https://zhuanlan.zhihu.com/p/393997909
https://zhuanlan.zhihu.com/p/485657298
https://zhuanlan.zhihu.com/p/94924987
https://blog.csdn.net/zhuquan945/article/details/79862522