經(jīng)典目標(biāo)檢測網(wǎng)絡(luò)學(xué)習(xí)

零、目標(biāo)檢測

目前目標(biāo)檢測的相關(guān)方法大致分為兩種,一種是one-stage,另一種是two-stage,后者是先生成候選框,然后對候選框進行分類,前者是不生成候選框,直接將目標(biāo)邊框定位轉(zhuǎn)化為回歸問題。前者的速度快,而后者的精度高。

一、RCNN

算法總共可分為四個階段,一是候選區(qū)域生成,即先將圖片分割成許多個小塊,在利用一些規(guī)則進行合并,最終可得到2k個左右的候選區(qū)域;二是CNN特征提取,由于需要固定尺寸的輸入,因此需要對候選區(qū)域進行裁剪填充,最終得到了一些特征向量;三是經(jīng)過SVM進行分類,得到目標(biāo)的bounding box;四是位置修正。

二、SPP

可忽略圖片的尺寸,生成同樣大小的特征向量,原理圖如下:


三、Faster RCNN

1. 網(wǎng)絡(luò)思想:

將目標(biāo)檢測分成了兩步,第一步是實現(xiàn)定位,第二步則是實現(xiàn)分類,網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

網(wǎng)絡(luò)結(jié)構(gòu)

2.網(wǎng)絡(luò)結(jié)構(gòu):

網(wǎng)絡(luò)共有四部分構(gòu)成:

1)卷積層:卷積層采用了VGG16的結(jié)構(gòu),值得注意的是,在卷積過程中,卷積操作并不改變特征圖大小,尺寸的減小由池化層來操作。

2)區(qū)域建議網(wǎng)絡(luò):區(qū)域建議網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

區(qū)域建議網(wǎng)絡(luò)

這一部分結(jié)構(gòu)即能夠完成定位。首先輸入經(jīng)過1\times 1卷積通道數(shù)變?yōu)?8,這是因為通常特征圖上一個點會生成9個anchor,這些box里面或許存在目標(biāo),或許沒有目標(biāo),因此總共會有18個類別,之后經(jīng)過softmax進行分類找到含有目標(biāo)的anchor,前后兩個reshape操作是為了便于分類。此時雖然已經(jīng)得到了一些anchor,但它們的位置并不準(zhǔn)確,因此需要做一定的修改。這里文章定義了四個變換,分別是:G_x^\prime  = {A_w} \cdot {d_x}(A) + {A_x}

G_y^\prime  = {A_h} \cdot {d_y}(A) + {A_y}

G_h^\prime  = {A_h} \cdot \exp ({d_h}(A))

G_w^\prime  = {A_w} \cdot \exp ({d_w}(A))

下面的支路需要學(xué)習(xí){d_x}(A),{d_y}(A),{d_w}(A),{d_h}(A)四個變換,因此生成了4*9=36個通道。之后,建議層利用生成的anchor與修正函數(shù),將坐標(biāo)映射到原圖上,利用非極大值抑制等操作丟棄掉一些不合適的box,至此,定位工作基本完成。

3)RoI pooling:之后需要將每個box里的目標(biāo)送進分類網(wǎng)絡(luò)中進行分類,但由于每個box大小不一,直接送進網(wǎng)絡(luò)中肯定不行,所以這里采用了如下的池化操作,這樣就可以送進網(wǎng)絡(luò)進行分類:

RoI池化

4)分類網(wǎng)絡(luò):這里只是使用網(wǎng)絡(luò)進行了分類,需要的注意的是這里又進行了一次回歸操作,來進一步修正坐標(biāo)值:

分類網(wǎng)絡(luò)

四、Yolo

1. 網(wǎng)絡(luò)思想:

與Faster RCNN不同,Yolo將目標(biāo)的檢測直接看成一個回歸問題,在回歸的過程中直接完成了定位與分類,因此速度要快一些。

2.網(wǎng)絡(luò)結(jié)構(gòu):

網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

網(wǎng)絡(luò)結(jié)構(gòu)

網(wǎng)絡(luò)借鑒了goolgnet網(wǎng)絡(luò)但并沒有使用inception模塊,而是主要使用了1*1卷積與3*3卷積的簡單替代,網(wǎng)絡(luò)完成回歸主要靠的是后面的全連接層。網(wǎng)絡(luò)檢測理論如下:

yolo理論

將圖片劃分成大小相同的格子,只要目標(biāo)落在格子中,格子就負(fù)責(zé)檢測那個目標(biāo),除此之外,每個格子還會生成一些bounding box,假設(shè)每個格子預(yù)測了C個類別概率,B個box,除了生成每個box的x,y,w,h外,還會生成一個分?jǐn)?shù),即sore=Pre*IOU,即每個格子有C+B*5個輸出。得到生成的bounding box之后,再設(shè)定閾值去掉sore較小的box,利用非極大值抑制得到最終的box。值得一提的是,為了更好的生成坐標(biāo),這里的x,y,h,w全部做了歸一化操作。

由于v1雖然速度夠快,但定位不夠準(zhǔn)確,因此v2對v1做了一些改進,如下:

1)使用了BN層,去除了dropout,這樣可以使得網(wǎng)絡(luò)更容易收斂,且可以防止過擬合。

2)采用了更高的分辨率分類器,先用高分辨率的Imagenet分類數(shù)據(jù)集圖片進行訓(xùn)練,再進行微調(diào)。

3)移除了全連接層,使用anchor來進行訓(xùn)練,每個預(yù)測框都有其對應(yīng)的類概率,而且anchor是通過k-means的方式生成。

YOLO9000是在YOLOv2的基礎(chǔ)上提出的,其可以檢測超過9000個類別的模型,其主要貢獻點在于提出了一種分類和檢測的聯(lián)合訓(xùn)練策略。

v3的改進是將特征提取器換成了殘差結(jié)構(gòu),并且采用了FPN的結(jié)構(gòu)來應(yīng)付多尺度問題,這里借鑒一下yolo系列之yolo v3【深度解析】_網(wǎng)絡(luò)_木盞-CSDN博客中的結(jié)構(gòu)圖用于展示:

五、SSD

1.網(wǎng)絡(luò)思想:

SSD與Yolo一樣,都是一次直接完成分類與定位,與Yolo相比其不同點是SSD是利用卷積做檢測,同時考慮了多尺度問題以及利用了先驗框,結(jié)構(gòu)如下所示:

SSD

2.網(wǎng)絡(luò)設(shè)計:

1)先驗框的生成:特征圖每個點生成四個先驗框,共有兩個正方形兩個矩形,如下所示:

每個特征圖對應(yīng)先驗框設(shè)置如下:{s_k} = {s_{\min }} + \frac{{{s_{\max }} - {s_{\min }}}}{{m - 1}}(k - 1),可見,隨著卷積層的增加,先驗框尺寸增大,這方便使用大尺寸的特征圖檢測小目標(biāo),小尺寸的特征圖檢測大目標(biāo)。

2)先驗框的使用:

如圖所示,卷積之后的結(jié)果,一路進行先驗框的分類,一路生成用于回歸的偏移量,一路生成先驗框的坐標(biāo)。

3)訓(xùn)練:在訓(xùn)練過程中,首先進行先驗框的匹配,即與ground truth的IOU較大的先驗框匹配,對于剩余的先驗框,若與ground truth的IOU大于某個閾值,也認(rèn)為匹配。

其他:

1、OHEM:

對于目標(biāo)檢測來說,其難度遠遠大于普通的目標(biāo)分類,因為無法確定一張圖片中目標(biāo)的數(shù)量。為了保證召回率,一般常常采取一種“寧可錯殺三千,不可放過一個”的思想,因此,常常會輸出許多無用的檢測框,這樣就會造成負(fù)類過多,而正類跟難負(fù)類較少,因此需要提出一種方法來減少這些負(fù)類,同時學(xué)會區(qū)分這些難負(fù)類。RCNN采取的方法是先用初始的正負(fù)樣本(為了樣本平衡,負(fù)樣本是整個負(fù)樣本的子集)來訓(xùn)練分類器,之后使用分類器對樣本進行分類,將分類錯誤的樣本放入負(fù)樣本中,再次進行訓(xùn)練,循環(huán)往復(fù),直到分類器性能不再提升,F(xiàn)AST RCNN則是通過隨機采樣,其中25%是正類,其余為負(fù)類進行訓(xùn)練。OHEM則是將對于難負(fù)類樣本的挖掘嵌入到了優(yōu)化中,通過損失來選取合適的區(qū)域進行訓(xùn)練,其使用了兩個RCNN網(wǎng)絡(luò)進行訓(xùn)練,其中一個只負(fù)責(zé)前向傳播,為網(wǎng)絡(luò)提供RoI區(qū)域的評分,另一個網(wǎng)絡(luò)根據(jù)這個評分選取難例進行訓(xùn)練,兩個網(wǎng)絡(luò)參數(shù)共享。

2、目標(biāo)檢測中的不平衡問題:

1)多任務(wù)損失優(yōu)化之間的不平衡:由于分類任務(wù)要對正負(fù)樣本進行分類,而回歸任務(wù)只需要對正樣本進行回歸,因此這里有一個不平衡的問題,可采用加權(quán)的方式解決。

2)空面不平衡:指的是不同正例對回歸損失的貢獻是不一致的,不同的IOU的貢獻也是不一致的。

3)尺度不平衡:即不同檢測框尺度上的不平衡,網(wǎng)絡(luò)很可能傾向于生成某一個尺度的檢測框,解決方法大多是金字塔方法。

4)類別不平衡:即分類類別的不平衡,或者是目標(biāo)與背景類的不平衡,解決方法是有偏采樣,或者是采用某些損失函數(shù),例如焦點損失函數(shù)。

3、不同檢測網(wǎng)絡(luò)對比:

FasterRCNN網(wǎng)絡(luò)特點是檢測較為精確,這主要得益于RPN網(wǎng)絡(luò),對特征圖上的每個特征點都生成一定數(shù)量的候選框,總共大約會生成20k個,經(jīng)過非極大值抑制會剩下大約300個,在這個過程中還要進行位置的修正,最終的結(jié)果較為精確,但代價就是速度慢。Yolo是one-stage的網(wǎng)絡(luò),將檢測問題轉(zhuǎn)換為了回歸問題,其將圖片暴力的劃分成了7*7的網(wǎng)格,每個格子同時輸出類別與位置坐標(biāo),結(jié)果不如FasterRCNN精確,但速度較快;SSD像是結(jié)合了FasterRCNN的優(yōu)點,其利用了多尺度的特征圖來檢測目標(biāo),借鑒了候選框的機制,但是使用了yolo的模式來生成候選框。

4、nms、softnms、softernms對比:

對于nms來說,當(dāng)兩個候選框交集大于閾值的時候,就會消去其中一個得分較低的框,但當(dāng)兩個目標(biāo)靠的非常近的時候可能就會出現(xiàn)漏檢;softnms可以減輕這種情況,當(dāng)出現(xiàn)閾值過小的時候,softnms不會粗暴的直接消去框,而是給出一個較低的得分,再通過對分?jǐn)?shù)設(shè)定閾值來決定保留的候選框,nms的公式可以如下表示:

{s_i} = \left\{ {\begin{array}{*{20}{c}}{{s_{i,}}}&{iou(M,{b_i}) < {N_t}}\\{0,}&{iou(M,{b_i}) \ge {N_t}}\end{array}} \right.

而softnms則是表示如下:

{s_i} = \left\{ {\begin{array}{*{20}{c}}{{s_{i,}}}&{iou(M,{b_i}) < {N_t}}\\{{s_i}(1 - iou(M,{b_i})),}&{iou(M,{b_i}) \ge {N_t}}\end{array}} \right.

由于以上形式不連續(xù),所以將關(guān)于iou的函數(shù)變?yōu)橐韵滦问剑?img class="math-inline" src="https://math.jianshu.com/math?formula=%7Bs_i%7D%20%3D%20%7Bs_i%7D%7Be%5E%7B%20-%20%5Cfrac%7B%7Biou%7B%7B(M%2C%7Bb_i%7D)%7D%5E2%7D%7D%7D%7B%5Csigma%20%7D%7D%7D" alt="{s_i} = {s_i}{e^{ - \frac{{iou{{(M,{b_i})}^2}}}{\sigma }}}" mathimg="1">

然后,以上兩種方法沒有考慮位置的準(zhǔn)確性,所以出現(xiàn)了softernms,其假設(shè)候選框服從高斯分布,真實位置服從狄拉克分布,通過kl散度來使得候選框盡可能準(zhǔn)確。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容