目標檢測的幾種演算法的總結

2021-09-19 11:29:45 字數 3089 閱讀 3519

rcnn:

流程:1、找出中可能存在目標的候選區域

2、將大小調整到適應alexnet的227x227,然後用cnn提取若干個特徵向量,2000個候選區域就有2000個特徵向量。

3、將2000x4096維特徵與20個svm組成的權值矩陣4096x20相乘得到2000x20維矩陣。

4、分別對2000x20維矩陣中每一列即每一類進行nms剔除重疊的bbox,得到該列即該類中得分最高的bbox。

5、修正bbox,對bbox做回歸微調。

候選區域的選擇:選擇性搜尋(ss):使用k-means對畫素進行聚類得到2000個侯選框的可能區域。

crop+warp操作:由於候選區域的框大小不一致,所以需要將所有的候選框調整到合適的大小。

nms:現在20個類別中每乙個類別都有2000個框把它框住,我們需要選出最合適的那個框,那麼就對每乙個框進行打分,有2000個打分結果,就是說這2000個框屬於這個類別的概率,但是有可能2000個框都不屬於這個類別,因此就全》部去掉,然後將最終保留下來的框採用非極大抑制進行篩選。

ss演算法的缺點是得經過nms後還是可能框出錯誤的結果。因此誕生了spp-net。

spp-net:對rcnn的改進:

直接通過卷積得到特徵圖

通過ss演算法得到候選區域,就得到了兩個東西,特徵圖和候選區域。

將這兩個進行對映,就是將原圖中的候選區域跟特徵圖對映過去,就是將相應位置對映到特徵圖當中。

spp:

對映過去以後經過乙個spp層,它使用4x4,2x2,1x1的池化得到16+4+1=21個結果,它可以理解為21個**的概率,即每乙個特徵區域的21個概率,這21表示20個類別加上是否為背景。

spp-net的基本流程就是:先捲一次得到乙個特徵圖,將原圖的候選區域對映到特徵圖中,用4x4,2x2,1x1的池化後經過全鏈結層使用svm和回歸。

它的主要改進就是不是候選區域卷積,而是整個圖卷積,然後將侯選框對映到特徵圖上。這樣的好處是減少了所有卷積層的運算時間。

但是它還是沒有擺脫訓練步驟太多的問題,訓練依然緩慢。

fast-rcnn:

它的改進之處就是提出了poi pooling,整合整個模型,把cnn、spp、bbox回歸整合到一起來進行訓練,它的分類不使用svm而是使用softmax,並且採用多工損失。

它的主要流程依然是先進行一次卷積,在特徵層上獲取感興趣區域,然後用roi pooling,它的作用與spp層一樣只是不是多個池化,它提取乙個固定長度的特徵向量,每個特徵會輸入到一系列全鏈結層,得到roi特徵向量。

spp的好處是準確,而roipooling是省時間。

但是到fast-rcnn的時候依然沒有擺脫ss演算法,因此提出了faster-rcnn來改進這個缺點。

faster-rcnn:

它把ss一起拿過來訓練。它有兩個網路,乙個是區域生成網路,乙個是fast-rcnn網路。

只是候選區域不是ss演算法得到的,而是在特徵圖上來訓練乙個候選區域。它通過softmax來判斷anchors屬於前景還是背景,利用回歸來修正anchors獲得精確的proposals(候選區域),輸出top-n(預設300個)

它的重點就在於如何選取候選區域,也就是rpn原理,它分為兩步:

用nxn(預設3x3)的大小視窗去掃瞄特徵圖,每個滑窗位置對映到乙個低維的向量(預設256維),並為每個視窗位置考慮k種(9)可能的參考視窗(anchors)就是說每乙個畫素都用k個anchors(不同大小和長寬比)。比如乙個大小為30x30>的特徵圖,那麼就會得到30x30x9個anchors。由於候選區域是憑空根據尺度和長寬比得到的,肯定不準確,因此要先對這8100個候選區域進行海選和微調。

比如先選出2000個合適的,位置也微調一下。海選的過程依然是看這個anchors是否屬於這個類別,不是就去掉,用回歸進行微調。這樣得到的候選區域就比ss演算法得出的更準確。

優點:端到端的網路,兩個網路訓練。

缺點:anchors太多,訓練引數過大。

因此如果要改進的話可以把rpn的這些候選區域的anchors調整一下。

yolo:

由於一直到faster-rcnn一直都沒有擺脫候選區域,因此yolo演算法直接刪掉rpn,直接對proposal進行分類回歸,提高速度。

它直接經過卷積,然後最終輸出乙個7x7x30的結果。

也就是7x7的單元格,每個單元格都有兩個bbox框,這些bbox框經過nms去篩選。

因此它總共有49x2=78個侯選框,它不需要候選區域,而是直接用演算法**得到的結果。

這個30代表的是(4(座標資訊)+1(置信度(iou))+4(座標資訊)+1(置信度)+20(類別的概率結果))

它的損失就有三個,每乙個網格都有bbox(座標誤差)、置信度(iou誤差)、概率(類別誤差)

ssd:

它結合了faster-rcnn的準確和yolo的快,也就是結合了yolo的回歸i思想和faster-rcnn的anchor機制。

ssd每一步都會得到固定大小的特徵圖,它會在每一層的特徵圖上做乙個detector和classifier,也就是說它會把中間層利用起來,在每一層得到固定的anchors。

detector和classifier有三個部分:

default bbox(預設侯選框)(faster-rcnn)

locallization(4個位置的偏移)(yolo)

confidence(21個類別的置信度)(yolo)

roi pooling,這個網路層可以把不同大小的輸入對映到乙個固定尺度的特徵向量。

faster-rcnn提出了regionproposal這是一種新的提取框的演算法,比如提取出幾百個框然後讓這幾百個框一起去做分類,而不是乙個乙個的框去分類

roipooling可以將不同尺寸的變換到相同尺寸。

先卷積得到特徵

在特徵圖上的每乙個點產生k個框

對產生的k個框做roipooling使得每個框的大小相同

最後進行分類

基於區域的檢測器使用的卷積特徵對映,如快速rcnn,也可以用於生成區域提案。在這些卷積特徵的基礎上,我們通過增加幾個卷積層來構造乙個rpn,它同時在規則網格上的每個位置恢復區域邊界和客觀分數。因此,rpn是一種全卷積網路(fcn)[7],可以針對產生檢測方案的任務進行端到端的訓練。

使用不同的濾波器尺寸(如5×7和7×5)分別訓練不同長寬比的模型。如果使用這種方法來處理多個尺度,則可以將其視為「濾波器金字塔」

目標檢測總結

盡量選擇支援 voc 格式的資料集的演算法,目前仍然以兩階段為主,faster rcnn fpn 網路為 backubone 為主,以商湯 mmdetection 為代表。voc 與 coco 資料集區別,coco 格式資料集作為輸入會過濾掉沒有目標的,會造成負樣本大量減少。voc 格式資料集作為輸...

目標檢測 目標檢測通用框架總結

目標檢測框架個人總結 以下是筆記中包含的內容 目標檢測網路框架總結 yolov4中有圖 從最開始的神經網路到現在深度更深,模組更多的目標檢測深度學習神經網路,如今大致可以分為two stage detector 典型的為rcnn系列 和 one stage detector 典型為yolo系列 每個...

演算法競賽 目標檢測常用技巧總結

以數智重慶.全球產業賦能創新大賽為例,目標檢測的幾種常見的做題技巧如下 針對資料集進行資料提公升 a.需要對資料進行了解,比如有哪些分類,每個分類下各有什麼特點,每個分類下的尺寸是怎樣的,分布是怎樣的 長尾分布,類別不均衡 b.資料出現了什麼樣的問題,應該怎麼去解決這些問題。多樣性,長尾分布 小目標...