【導讀】近日,發布一篇文章,總結了近年來目標檢測的各種方法。目標檢測可謂是近年來計算機視覺領域熱門的研究領域,也具有廣闊的應用前景,如自動駕駛等。本文首先系統解釋了圖像分類和目標檢測概念,然后介紹了七種最經典的目標檢測方法。其中包括傳統的基于特征的目標檢測方法,更多的是基于深度學習的目標檢測模型,包括近年來目標檢測領域中最炙手可熱的 R-CNN,YOLO,SSD等各種算法。本文向初學者一步步從淺到深介紹各種模型,通過閱讀本文,相信你會對目標檢測有系統的理解。
Zero to Hero: Guide to using Deep : R-CNN,YOLO,SSD
從零到多:使用深度學習的目標檢測指南: R-CNN,YOLO,SSD
在這篇文章中,我將解釋目標檢測和 R-CNN,YOLO,SSD等各種算法。 我們將從初學者的層面入手,一直到最新的目標檢測算法,了解每種算法的思想,方法和閃光點。
▌什么是圖像分類?
圖像分類是輸入一張圖像并預測圖像中的目標。例如,當我們建立一個貓狗分類器時,我們輸入貓或狗的圖像,并預測它們的類別:
如果貓和狗都出現在圖像中,你會怎么做?
我們的模型會預測什么?為了解決這個問題,我們可以訓練一個多標簽分類器來預測這兩個類(狗和貓)。但是,我們仍然不知道貓或狗的位置。在圖像中識別目標(給定類)位置的問題稱為定位。但是,如果目標類不確定,我們不僅要確定位置,還要預測每個目標的類別。
類別與目標的位置一起預測稱為目標檢測。代替從圖像中預測目標的類別,我們現在必須預測類別以及包含該目標的矩形(稱為 box)。它需要4個變量來唯一標識一個矩形。因此,對于圖像中每個目標的實例,我們應該預測以下變量:
,(類別)
,(左上方x軸坐標)
,(左上方y軸坐標)
,( box的寬度)
,( box的高度)
就像多標簽圖像分類問題一樣,我們可以進行多分類目標檢測問題,即在一個圖像中檢測多種類別物體:
在下面的章節中,我將介紹所有業界流行的目標檢測方法。從Viola和Jones于2001年提出的Haar 開始,有很多方法來進行目標檢測。但是,我們將聚焦在研究使用神經網絡和深度學習這些最先進的方法上。
目標檢測被建模成一個分類問題,其中我們從輸入圖像中獲取固定大小的窗口,平滑窗口在所有可能的位置將這些窗口進行圖像分類。
每個窗口作為一個樣本,使用分類器進行預測,該分類器預測窗口中的目標的類別(如果什么都沒有則為背景)。因此,我們知道圖像中的目標的類別和位置。 聽起來很簡單! 那么還有一些問題。你怎么知道窗口的大小,以便它總是包含圖像? 看例子:
正如你所看到的,目標大小可以不同。解決這個問題,可以通過縮放圖像來創建圖像金字塔。想法是我們在多個尺度上調整圖像的尺寸,并且我們依靠這樣一個事實:我們選擇的窗口大小完全包含了某個調整過尺寸的圖像中的目標。最常見的情況是,圖像被下采樣(縮小),直到某些通常條件達到最小尺寸。 在這些圖像上,運行固定大小的窗口檢測器。 在這樣的金字塔上有多達64層也是很常見的。 現在,所有這些窗口被送到分類器以檢測感興趣的目標。這將幫助我們解決大小和位置的問題。
還有一個問題,縱橫比。許多物體可以以不同的形狀呈現,如坐在一起的人將具有與站立的人或睡覺的人不同的縱橫比。 我們稍后會在這篇文章中介紹。 RCNN,-RCNN,SSD等目標檢測有多種方法,為什么有這么多的方法,每個方法的顯著特點是什么? 我們來看一下:
在計算機視覺史上的一篇開創性論文中,和Bill 在2005年介紹了面向梯度的直方圖( ofsvm cnn 行人檢測 比較,HOG)特征。方向梯度直方圖特征在計算上是省時的,并且適用于許多現實中的問題。 在金字塔上運行滑動窗口獲得的每個窗口上,我們計算提供給SVM(支持向量機)的Hog特征以創建分類器。我們能夠在視頻上實時運行,以進行行人檢測,人臉檢測以及其他許多目標檢測。
由于我們已經將目標檢測建模為分類問題,成功取決于分類的準確性。深度學習的興起之后,顯而易見的想法是用更準確的基于卷積神經網絡的分類器代替基于HOG分類器。但是,有一個問題。CNN太慢,計算上非常昂貴。在滑動窗口檢測器產生的很多patch上運行CNN是不可能的。R-CNN通過使用稱為選擇性搜索的目標提議算法( )來解決這個問題,該算法減少了送給分類器的邊界框的數量,每次差不多接近2000個建議區域。選擇性搜索使用局部關鍵特征,如紋理,強度,顏色和/或內部度量等來生成目標的所有可能的位置。現在,我們可以把這些產生的區域喂給我們的基于CNN的分類器。請記住,CNN的全連接部分需要一個固定大小的輸入,所以我們調整(不保留寬高比)所有生成的框到一個固定的大小(224×224的VGG),并饋送到CNN部分。因此,R-CNN有三個重要部分:
1.運行 (選擇性搜索)來生成可能的目標。
2.將1中得到的這些patch提供給CNN,然后用SVM預測每個patch的類別。
3.通過分別訓練 box回歸來優化patch。
然而,RCNN非常緩慢,因為通過 得到的2000個目標區域在進入CNN網絡中運算需要大量的時間。SPP-Net試圖解決這個問題。使用SPP-net,我們只計算一次整個圖像的CNN表示,并且可以使用它來計算由 生成的每個patch的CNN表示。這可以通過僅僅在對應于該區域最后一個卷積層的特征映射上執行池化操作來完成。對應的區域卷積層的矩形截面可以通過考慮中間層的下采樣進行卷積層區域映射計算得到(在VGG的情況下簡單地將坐標除以16)。
還有一個挑戰:我們需要為CNN的全連接層產生固定大小的輸入,所以SPP使用了更多的技巧。它在最后的卷積層之后使用空間金字塔( ),而不是傳統上使用的最大池化(max-)。SPP層將任意大小的區域劃分為恒定數量的bins,并且在每個bin上執行最大池化(max-)。由于bins的數量保持不變,所以如下圖所示產生恒定的尺寸矢量。
然而,SPP網絡有一個很大的缺點,通過空間金字塔層進行反向傳播是微不足道的。 因此,網絡只調整了網絡的全連接部分。我們將在后面看到SPP-Net為更流行的Fast RCNN鋪平了道路。
Fast R-CNN使用了SPP-net和RCNN的思想,并解決了SPP-net中的關鍵問題,即它們可以進行端到端訓練。為了通過空間池化來傳播梯度,它使用了一個簡單的反向傳播計算,與最大池化(max-)梯度計算非常相似,區別在于池化區域重疊,因此一個單元可以從多個區域抽取梯度。
Fast RCNN還做了一件事,它在神經網絡訓練本身中加入了 box回歸。所以現在網絡上有兩個輸出,即分類輸出和 box 回歸輸出。多任務目標函數是Fast-rcnn的一個顯著特點,它不再需要分別訓練網絡進行分類和定位。 由于CNN的端到端學習,這兩個改變減少了整體訓練時間,并且相對于SPP網絡提高了準確性。
R-CNN有什么改進?它是如何實現更快的?Fast RCNN中最慢的部分是 或Edge boxes。 RCNN用稱為區域建議網絡RPN(k)一個非常小的卷積網絡來替代 來生成興趣區域。
為了應對長寬比和物體尺寸的變化, R-CNN引入了錨框( boxes)的思想。在每個位置,原始論文使用,256×256和512×512比例的三種錨框。同樣,對于寬高比,它使用三種寬高比:1:1,2:1和1:2。所以,在每個位置我們有總共9個boxes,RPN預測這9個boxes是背景或前景的概率。我們應用 box回歸來改進每個位置的錨框。因此,RPN給出了各種大小的 boxes和其相應每個類的概率。像Fast-RCNN一樣,可以通過應用空間池化來進一步傳遞不同大小的邊界框。 剩下的網絡與Fast-RCNN相似。 . -RCNN比Fast-RCNN快10倍,在VOC-2007數據集上準確率一樣。 這就是為什么-RCNN一直是最精確的目標檢測算法之一。 這是RCNN各種版本之間的速度比較。
到目前為止,所有討論的方法都是通過建立一個管道()產生很多建議區域,然后將這些得到的建議區域進行分類/回歸操作,將檢測作為分類問題來處理。但是,有幾種方法是將檢測作為回歸問題。其中兩個最流行的是YOLO和SSD。 這些檢測方法也被稱為 shot檢測方法(一步法)。我們來看看它們:
對于YOLO來說,檢測是一個簡單的回歸問題,它需要輸入圖像并學習類概率和 box坐標。聽起來很簡單?
YOLO將每個圖像劃分為S×S的網格,預測每個網格的N個邊界框和置信度。置信度反映了邊界框的準確性以及邊界框是否包含一個目標(不管是什么類)。YOLO還預測訓練中所有類的每個框的分類分數。你可以通過結合兩個類的方法來計算每個類出現在預測框中的概率。
預測出了SxSxN個boxes。然而,這些框中的大部分都具有低置信度分數。如果我們設置一個閾值(如30%的置信度)可以刪除其中的大部分,如下面的例子所示
注意,在運行時,我們只在CNN上運行一次圖像。 因此,YOLO速度超快,可以實時運行。 另一個關鍵的區別是,YOLO一次看到完整的圖像,而不是以前方法中只查看生成的建議區域。所以,這種上下文信息有助于避免錯誤。 然而,YOLO的一個限制是它在一個網格中只能預測一種類別,因此不適用于預測小的目標。
Shot 在速度和準確度之間取得了良好的平衡。SSD僅在輸入圖像上運行一個卷積網絡并計算特征映射。現在,我們在這個特征映射上運行一個3×3大小的卷積核來預測邊界框和分類概率。SSD也使用類似于-RCNN的各種寬高比的 boxes,并學習偏移而不是學習box。為了處理這個尺度,SSD在多個卷積層之后預測邊界框。 由于每個卷積層以不同的比例操作,因此能夠檢測各種比例的目標。
這有很多算法。你應該使用哪一個?目前,如果您對準確率很狂熱,則選擇 RCNN。 但是,如果你計算資源緊缺(可能在 上運行),SSD是一個更好的建議。 最后,如果精度不是太高,但是想要超快速度,YOLO將會是一個很好的選擇。下圖是對速度與精度之間平衡的一個示意圖:
SSD似乎是一個不錯的選擇,因為我們可以在視頻上運行它,而且精度的折衷很少。但是,可能并不那么簡單,請查看此圖表,它比較了SSD,YOLO和-RCNN在各種大小物體上的性能。 在大尺寸下,SSD似乎與-RCNN類似。 但是,當物體尺寸較小時,我們以精度來衡量,其差距就會擴大。
選擇正確的目標檢測方法是至關重要的,取決于你正試圖解決的問題和設置。目標檢測是計算機視覺許多實際應用的基礎svm cnn 行人檢測 比較,例如自動駕駛汽車,安防和監控以及許多工業應用。希望這篇文章給你一些思路,幫助你理解每個流行的目標檢測算法背后的原理。
參考鏈接:
-END-
專 · 知
人工智能領域主題知識資料查看獲取:
同時歡迎各位用戶進行專知投稿,詳情請點擊: