目標檢測是計算機視覺的一個非常重要的核心方向,它的主要任務目標定位和目標分類。
在深度學習介入該領域之前,傳統的目標檢測思路包括區域選擇、手動特征提取、分類器分類。由于手動提取特征的方法往往很難滿足目標的多樣化特征,傳統方法始終沒能很好的解決目標檢測問題。
深度學習興起之后,神經網絡可以從大量數據中自動學出強大的特征提取和擬合能力,因而涌現出很多性能優良的目標檢測算法。
基于深度學習的目標檢測方法大致可分為三類——雙階段目標檢測、單階段目標檢測、基于transformer的目標檢測,本文將分別介紹這三類方法。
常用數據集
VOC數據集
VOC數據集[1]是目標檢測領域的常用數據集,共有約10,000張帶有邊界框的圖片用于訓練和驗證,每張圖片有像素級別的分割標注、邊界框標注以及目標類別標注,其中包含車輛、家具、動物、人4個大類,20個小類。
該數據集被廣泛用作目標檢測、語義分割、分類任務的基準數據集。
COCO數據集
COCO[2]的全稱是Microsoft Common Objects in Context,它是微軟于2014年出資標注的數據集,與ImageNet競賽一樣,COCO目標檢測競賽也被視為是計算機視覺領域最受關注和最權威的比賽之一。
相比于規模較小的VOC數據集,COCO是一個大型、豐富的物體檢測、分割數據集。這個數據集以scene understanding為目標,主要從復雜的日常場景中截取,并通過精確的segmentation進行目標位置的標定。
圖像包括91類目標,328,000影像和2,500,000個label。提供的類別有80 類,有超過33 萬張圖片,其中20 萬張有標注,整個數據集中個體的數目超過150 萬個。
雙階段目標檢測算法
相較于單階段目標檢測算法,雙階段目標檢測算法先根據圖像提取候選框,然后基于候選區域做二次修正得到檢測點結果,檢測精度較高,但檢測速度較慢。
這類算法的開山之作是RCNN[3],隨后Fast RCNN[4]、Faster RCNN[5]依次對其進行了改進。
由于優秀的性能,Faster RCNN至今仍然是目標檢測領域很有競爭力的算法。隨后,FPN[6]、Mask RCNN[7]等算法又針對Faster RCNN的不足提出了改進,這進一步豐富了Faster RCNN的組件,提升了它的性能。
RCNN
RCNN是首個將深度學習應用到目標檢測領域的工作,它的算法的思想較為簡單:對于每張圖片,RCNN首先采用選擇性搜索算法[1]生成大約2000個候選區域。隨后將每個候選區域的尺寸轉換為固定大小,并用CNN提取候選區域的特征。隨后使用SVM分類器判斷候選區域的類別,使用線性回歸模型,為每個物體生成更精確的邊界框。
盡管RCNN取得了很大進展,它仍然有很多缺點:首先,整個目標檢測階段涉及到三個模型,用于特征提取的CNN、用于分辨目標物體類別的SVM分類器、用于調整邊界框的線性回歸模型。RCNN無法做到端到端訓練,只能分別訓練這三個模型,這增大了訓練難度與訓練時間。
其次,每張圖片要提取2000個訓練區域,隨后又要用CNN分別提取每個區域的特征,特征的數量將非常大,這降低了模型的推理速度。通常每張圖片需要45秒進行預測,基本無法處理大型數據集。
圖1:RCNN算法流程
Fast RCNN
在RCNN中,每個候選區域都需要用CNN單獨提取特征。為了減少算法的計算時間,Fast-RCNN希望在每張圖片上只使用一次CNN,就能提取到所有關注區域的特征。為此,RCNN設計了如下步驟的目標檢測算法:
首先對圖片使用啟發式算法,得到大量候選區域。隨后將圖片輸入到卷積神經網絡中,得到圖片的特征,與候選區域的相對位置結合,就可以得到候選區域的特征。隨后使用ROI池化層將候選區域調整至相同尺寸,并將調整后的結構輸入到全連接神經網絡中。最后在全連接神經網絡后面添加softmax層,預測目標的列別;并以相同的方式添加線性回歸層。
與RCNN相比,Fast RCNN計算一張圖片只需要2秒,速度有大幅提升,每張圖片的計算時間只有但仍不夠理想。因為它依然用到了選擇性搜索方法得到感興趣區域,而這一過程通常很慢。
圖2:Fast RCNN網絡結構
Faster RCNN
Faster RCNN針對感興趣區域的生成方式,對RCNN進行了優化,進一步提高了計算速度和準確率。具體來說,Faster RCNN使用Reigion Proposal Network(RPN)生成感興趣區域:
首先,將圖片輸入到CNN中得到高層特征映射,隨后將其傳遞到RPN中。
RPN會在特征映射上使用一個滑動窗口,并在每個窗口設置K個不同大小、不同長寬比的先驗框。
對于每個先驗框,RPN會分別預測該框包含目標物體的概率,以及對該框的調整回歸量。最終得到不同形狀、尺寸的邊界框,調增尺寸后將其傳遞到完全連接層,得到目標類別以及最終的先驗框。
Faster RCNN進一步提高了計算速度,并獲得了較高的準確率。時至今日,依然是目標檢測領域的主流算法之一。
圖3:RPN的網絡結構
FPN
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的必要組成部件。
圖4:FPN的網絡結構
Mask RCNN
相較于Faster RCNN,Mask RCNN采用了全新的、性能更強的ResNeXt-101+FPN的組合作為backbone提取輸入圖片的特征。并在網絡最后額外添加了一個分支,進行mask預測任務,這將有助于提升特征提取網絡和RPN的性能。
此外,Mask RCNN還提出了一個改進,將原先的ROI池化層改進成ROIAlign層。在Faster RCNN中,有兩次整數化的操作:(1)RPN輸出的邊界框回歸值通常是小數,為了方便操作,會直接通過四舍五入把其整數化。(2)在ROI池化層中,整數化后的邊界區域被平均分割成了K×K個單元,因此需要對這些單元的邊界進一步整數化。
Mask RCNN的作者指出,經過這兩次整數化后的候選框,已經和最開始RPN輸出的候選框有了一定的位置偏差,這將影響模型的準確度。為此,作者提出了ROI Align方法,它沒有采用整數化操作,而是使用雙線性插值方法,獲得浮點數坐標的像素值。
圖5:Mask RCNN的網絡結構
單階段目標檢測算法
相較于雙階段目標檢測算法,單階段目標驗測算法直接對圖像進行計算生成檢測結果,檢測低速度快,但檢測精度低。
這類算法的開山之作是YOLO[8],隨后SSD [9]、Retinanet[10]依次對其進行了改進,提出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。
圖6:YOLO的檢測流程
SSD
針對YOLO的不足,SSD借鑒了雙階段目標檢測算法的一些trick,在YOLO的基礎上進行了一系列改進:
YOLO利用單個高層特征進行目標檢測,SSD則是將特征提取網絡中不同層的多個特征輸入到目標檢測模塊,以希望提升小物體檢測的精度。
YOLO在每個網格上預測多個邊界框,但這些預測都相對這個正方形網格本身,與真實目標多變的形狀差異較大,這使得YOLO需要在訓練過程中自適應目標的形狀。SSD借鑒了Faster R-CNN中先驗框理念,為每個網格設置不同尺度、長寬比的先驗框,這在一定程度上減少訓練難度。
SSD還使用卷積層絡替代全連接層,針對不同特征圖進行回歸預測,這樣一來,對于形狀為mxnxp的特征圖,只需要采用3x3xp這樣比較小的卷積核得到檢測值,進一步減少了模型的參數量,提高了計算速度。
SSD的改進,使得單階段目標檢測算法的性能基本與當時的Faster-RCNN持平,不過后續又被Faster-RCNN類算法超越。
圖7:SSD的網絡結構
Retinanet
相較于SSD,RetinaNet并沒有模型層面的創新,模型的性能提升主要源自于Focal Loss,它進一步解決了目標檢測中的類別不平衡問題。
單階段目標檢測模型常常會面臨嚴重的正負樣本不平衡問題,由于算法會在圖片的每個位置密集抽樣,而圖片中的樣本數量有限,因此候選區域中的物體數量會顯著小于背景數量。
對于兩階段目標檢測模型,正負樣本不平衡問題得到了一定的緩解。因為第一階段的RPN可以避免生成很大一部分負樣本,最終第二階段的檢測模塊只需要處理少量候選框。
針對正負樣本不均衡問題,SSD算法采用了hard mining,從大量的負樣本中選出loss最大的topk個負樣本以保證正負樣本比例為1:3。
相較于SSD的抽樣方法,Focal Loss從損失函數的視角來解決樣本不平衡問題,它根據置信度動態調整交叉熵損失函數,當預測正確的置信度增加時,loss的權重系數會逐漸衰減至0,這使得模型訓練的loss更關注難例,而大量容易的例子loss貢獻很低。
YOLO的后續版本
YOLO的團隊借鑒了其它有助于提升性能的 trick融入到YOLO算法中,后續又提出了4個改進版本YOLOv2~YOLOv5。
YOLOv2使用了很多trick,包括:Batch Normalization、高分辨率圖像分類器、使用先驗框、聚類提取先驗框的尺度信息、約束預測邊框的位置、在passthrough層檢測細粒度特征、分層分類等。
YOLOv3借鑒了SSD的思想,使用了多尺度特征進行目標檢測,與SSD不同的是,YOLOv3采用上采樣+特征融合的方式,對多尺度特征進行了一定的融合。
后續版本采用了Retinanet提出的Facol loss,緩解了正負樣本不均衡問題,進一步提升了模型表現。
基于transformer
的方法
對于目標檢測任務而言,理論上講,各個目標之間的關系是有助于提升目標檢測效果的。盡管傳統目標檢測方法使用到了目標之間的關系,直到Transformer[11]模型面世,無論是單階段還是雙階段目標檢測,都沒有很好地利用到注意力機制。
一個可能的原因是目標與目標之間的關系難以建模,因為目標的位置、尺度、類別、數量都會因圖像的不同而不同。而現代基于CNN的方法大多只有一個簡單、規則的網絡結構,對于上述復雜現象有些無能為力。
針對這種情況,Relation Net[12]和DETR[13]利用Transformer將注意力機制引入到目標檢測領域。Relation Net利用Transformer對不同目標之間的關系建模,在特征之中融入了關系信息,實現了特征增強。DETR則是基于Transformer提出了全新的目標檢測架構,開啟了目標檢測的新時代。
Relation Net
盡管用到了Transformer,Relation Net仍然是基于Faster RCNN的改進工作。Faster RCNN會通過RPN網絡生成一系列感興趣區域,隨后將感興趣區域輸入到神經網絡中預測目標的位置和類別。
Relation Net并沒有直接將感興趣區域輸入到最終的預測網絡中,而是先將這些感興趣區域輸入到transformer中,利用注意力機制,融合不同感興趣區域的關系信息,進而實現特征增強。隨后,再將transformer的輸出送入到最終的預測網絡中,預測目標的位置和類別。
此外,作者還用transformer模塊取代了非極大值抑制模塊(NMS),真正實現了端到端訓練。
圖8:Relation module的結構
DETR
DETR是首個用transformer完成目標檢測任務的代表性工作。
首先,DETR使用CNN提取圖片的特征,再加上NLP領域常用的位置編碼,最終生成了一批序列化數據。
在encoder階段,將序列化數據其送入encoder中,利用注意力機制提取數據中的特征。在decoder階段,輸入N個隨機初始化向量,每個object query關注圖片的不同位置。經過decoder的解碼,最終會生成N個向量,每個向量對應一個檢測到的目標。最后將這N個向量輸入到神經網絡中,得到每個目標的類別和位置。
相較于其它目標檢測算法,DETR生成的檢測框數量大幅減少,與真實的檢測框數量基本一致。DETR使用匈牙利算法,將預測框與真實框進行了匹配,隨后就可以計算出loss,完成對模型的訓練。
DETR取得了好于Faster RCNN的檢測效果,并且它不需要預先指定候選區域,不需要使用NMS去除重復的目標框,算法流程十分簡潔。
圖9:DETR的算法流程
總結
憑借著強大的特征提取能力,深度學習幫助目標檢測算法取得了長足的發展。
從RCNN開始,相關科研人員不斷引入新的機制、新的trick,以提高這類算法的精度。最終,以Faster RCNN為代表的雙階段目標檢測算法取得了很高的預測準確率。
相較于Faster RCNN,以YOLO為代表的單階段目標檢測算法在保證較高預測精度的同時取得了很高的計算速度,憑借其優秀的實時性,在工業界取得了廣泛應用。
去年提出的以DETR為代表的視覺Transformer算法將注意力機制引入到目標檢測領域。DETR憑借其簡潔優雅的結構、超過Faster RCNN的準確率,吸引了越來越多的目標檢測從業者開展視覺transformer的研究。從目前的發展態勢來看,視覺transformer必將進一步推動目標檢測的快速進展。
原文標題:目標檢測 - 主流算法介紹 - 從RCNN到DETR
文章出處:【微信公眾號:機器視覺智能檢測】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
計算機
+關注
關注
19文章
7488瀏覽量
87852 -
目標檢測
+關注
關注
0文章
209瀏覽量
15605 -
深度學習
+關注
關注
73文章
5500瀏覽量
121112
原文標題:目標檢測 - 主流算法介紹 - 從RCNN到DETR
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論