日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster

發(fā)布時(shí)間:2025/3/8 92 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

全文5500個(gè)字,22幅圖,學(xué)習(xí)時(shí)長預(yù)計(jì)20分鐘

目錄

  • 0?概述

  • 1?RCNN

    • 1.1 候選區(qū)Region Proposal

    • 1.2 特征提取

    • 1.3 SVM分類

    • 1.4 線性回歸

  • 2 SPP Net

  • 3 Fast RCNN

  • 4 Faster RCNN

  • 5 總結(jié)

0 概述

本文主要講一下深度網(wǎng)絡(luò)時(shí)代,目標(biāo)檢測系列的RCNN這個(gè)分支,這個(gè)分支就是常說的two-step,候選框 + 深度學(xué)習(xí)分類的模式:RCNN->SPP->Fast RCNN->Faster RCNN

另外一個(gè)分支是yolo v1-v4,這個(gè)分支是one-step的端到端的方式。不過這里主要是介紹RCNN那個(gè)體系的。

把下圖中的yolo忽略,剩下的四個(gè)就是RCNN體系的一個(gè)非常好的總結(jié)。

1 RCNN

RCNN既然是two-step,那么就從這里切入理解:

  • 第一步,生成候選區(qū)

  • 第二步,判斷每個(gè)候選區(qū)的類別 2.1 用CNN提取特征 2.2 用SVM分類 2.3 用線性回歸矯正候選框的位置

  • 1.1 候選區(qū)Region Proposal

    一個(gè)圖片中有多個(gè)待檢測的目標(biāo),我們怎么找到這個(gè)目標(biāo)的位置呢?Region Proposal就是給出目標(biāo)可能在的候選框中。如下圖,Region Proposal給出了大大小小的可能候選框:

    怎么給出可能的候選框呢?比較籠統(tǒng)的說法是:利用圖像中的紋理、邊緣、顏色等信息,先產(chǎn)生較小的相同紋理、相同顏色的候選框,然后小的候選框慢慢合并成大的紋理相似的候選框。

    【selective search 選擇性搜索】這個(gè)選擇性搜索就是給出候選框的算法的名字。用Selective Search方法可以對一張圖片生成大約1000~3000個(gè)候選框,具體的算法邏輯如下:

  • 使用一種過分割手段,將圖像分割成過小的區(qū)域;

  • 查看現(xiàn)有小區(qū)域,合并可能性最高的兩個(gè)區(qū)域,重復(fù)直到整張圖像合并成一個(gè)區(qū)域位置;;

  • 輸出所有曾經(jīng)存在過的區(qū)域,也就是從小合并到大的所有出現(xiàn)過的大大小小的候選框,即所謂候選區(qū)域。

  • 【合并遵守的原則】

  • 顏色(顏色直方圖)相近的;

  • 紋理(梯度直方圖)相近的;

  • 合并后總面積小的;

  • 1.2 特征提取

    之前選出來的大大小小的候選框,其實(shí)就是大大小小的圖片。這里把圖片都縮放成統(tǒng)一的227*227的大小,然后把統(tǒng)一大小的圖片輸入到CNN中,進(jìn)行特征提取。這里的特征網(wǎng)絡(luò)是一個(gè)比較簡單的網(wǎng)絡(luò)(當(dāng)年resnet啊googlenet啊都沒提出來,BN層也沒提出來,所以結(jié)構(gòu)如下)

    從上圖中的pool5之后的輸出的特征圖取出來,所以SVM的輸入特征。(這里需要提到的是,pool5在某些博客中被說成了第五個(gè)池化層,感覺不是很恰當(dāng),應(yīng)該是第三個(gè)池化層,只是接在了第5個(gè)卷積層后面。)

    1.3 SVM分類

    眾所周知,SVM只能分類二分類任務(wù)(這個(gè)不清楚的給我回去看之前的SVM推導(dǎo)去)。

    想要SVM處理多分類任務(wù),那么就有多種集成方式。我記得上課老師說的有兩種(我只記得兩種了):

    • one vs one:就是假設(shè)5個(gè)類別,那么兩兩類別之間訓(xùn)練一個(gè)SVM,總共訓(xùn)練10個(gè)SVM,然后把一個(gè)圖片放入這個(gè)10個(gè)SVN,然后對于結(jié)果進(jìn)行投票;

    • one vs all:這個(gè)5分類任務(wù),就訓(xùn)練5個(gè)SVM,然后每個(gè)SVM訓(xùn)練的正負(fù)樣本就是:是這個(gè)類別的和不是這個(gè)類別的。淦!語言說的不清楚。

    舉個(gè)例子:a,b,c三個(gè)類別。one vs one就是:a|b,a|c,b|c。one vs all就是a|bc,b|ac,c|ab。(值得注意的是,在目標(biāo)檢測中,會多一個(gè)類別,叫做背景

    回到RCNN,這里的SVM用的就是one vs all的方式。下圖可以比較好的理解什么是one vs all:

    1.4 線性回歸

    現(xiàn)在我們知道一個(gè)候選框的類別了(通過SVM),但是我們經(jīng)過一開始的拉伸,雖然讓所有圖片都變成了227的大小,但是也會造成圖像的扭曲。如下圖:

    所以這時(shí)候,訓(xùn)練一個(gè)線性回歸模型,來做一個(gè)邊框回歸,精細(xì)的調(diào)整候選框(x,y,w,h)四個(gè)參數(shù)。這里每一個(gè)類別就會訓(xùn)練一個(gè)線性回歸模型,根據(jù)SVM的結(jié)果,選擇相應(yīng)類別的線性回歸模型進(jìn)行候選框的矯正。

    整個(gè)RCNN的過程可以用下面這張圖來概括一下:

    整體四個(gè)步驟,精度達(dá)到了當(dāng)時(shí)水平的巔峰,但是每一張圖片都會有2000左右的候選框,再加上SVM和線性回歸的推理,一張圖片的推理時(shí)間需要47s。慢的雅痞。之后的三個(gè)模型,都是不斷改進(jìn)了RCNN的各種問題,做出了各種杰出的提升。

    2 SPP Net

    • SPP:Spatial Pyramid Pooling空間金字塔池化

    SPP-Net是出自2015年發(fā)表在IEEE上的論文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。

    眾所周知,CNN一般都含有卷積部分和全連接部分,其中,卷積層不需要固定尺寸的圖像,而全連接層是需要固定大小的輸入(SVM的輸入也是需要固定大小的輸入)。

    所以當(dāng)全連接層面對帶下不同的輸入數(shù)據(jù)的時(shí)候,就需要對數(shù)據(jù)做拉伸warp或者剪裁crop,就像是RCNN中把候選框拉伸到227尺寸大小。

    【crop與warp】

    兩者的效果看下面的圖就懂了吧。

    現(xiàn)在的問題是,warp還是crop都會讓圖像變形、物體不全,這樣勢必會對識別的精確度產(chǎn)生影響。


    【如何避免使用warp和crop】SPP net使用了SPP空間金字塔池化層,來實(shí)現(xiàn)了這個(gè)功能。先看和RCNN的模型結(jié)構(gòu)對比:

    RCNN中先通過warp講大小不同的候選框變成227統(tǒng)一大小輸入到conv layers;SPP中直接對大小不同的候選框做conv layers,所以我們得到了大小不同的特征圖。然后將大小不同的特征圖輸入到SPP空間金字塔池化層中,輸出變成大小相同的特征圖


    【SPP層如何實(shí)現(xiàn)尺寸輸入不同輸出相同的呢?】ROI pooling是空間金字塔池化層的更底層的結(jié)構(gòu)。準(zhǔn)確的說,是ROI池化層實(shí)現(xiàn)的輸入尺寸不同,輸出相同的功能。

    • ROI Pooling=Region of Interest Pooling感興趣區(qū)域池化層

    ROI池化層一般跟在卷積層后面,此時(shí)網(wǎng)絡(luò)的輸入可以是任意尺度的,ROI pooling的filter會根據(jù)輸入調(diào)整大小。一個(gè)簡單的例子,10*10的特征圖輸入到ROI pooling,我們設(shè)置要一個(gè)5*5的輸出,所以ROI pooling的filter大小自動計(jì)算出是2*2的。假如輸入時(shí)20*20的特征圖,計(jì)算出來的filter就是4*4大小的,輸出結(jié)果還是5*5。

    而SPP之所以稱之為金字塔(希望各位了解圖像金字塔的概念,不了解也沒事哈),是因?yàn)樗昧撕脦讉€(gè)ROI pooling,每一個(gè)ROI輸出的特征圖大小不同,有1*1的、2*2的、4*4的,然后把不同尺寸的特征圖的特征拉平,變成21個(gè)特征變量,就可以輸入到FC層或者SVM了。

    下圖正式重現(xiàn)了上面我說的情況,三個(gè)不同的ROI總共產(chǎn)生了21個(gè)特征進(jìn)行分類。(其中的256是通道數(shù),嚴(yán)格來說是21*256個(gè)特征進(jìn)行分類)


    【SPPnet比RCNN好在哪里?】

  • 通過使用SPP結(jié)構(gòu)(ROI池化層),避免了warp和crop的使用,避免了圖像失真;

  • RCNN的處理順序是:先把候選框的圖扣出來,再放到卷積層進(jìn)行訓(xùn)練得到特征圖;SPPNet是先把原圖通過卷積層得到特征圖,然后把候選框的大小映射到特征圖上再摳出來。哪個(gè)速度快不用我多說了吧。就好比,我通知個(gè)消息,我一個(gè)一個(gè)好友的轉(zhuǎn)發(fā),與我把好友拉到一個(gè)群里,我在群里發(fā)一樣(這是個(gè)不太恰當(dāng)?shù)睦涌赡?#xff09;。總之,這樣RCNN需要卷積2000個(gè)候選框,而SPPNet只需要卷積一次,速度提升了100倍。

  • (最后需要提的一點(diǎn)是,我并不清楚SPPNet最后的分類是用FC層還是依然使用RCNN的SVM分類,不知道SPPNet是否使用了線性回歸的方法做邊框回歸。因?yàn)槲抑皇前裇PPNet看成提出了ROI pooling的一個(gè)方法,是RCNN進(jìn)化史中的一個(gè)插曲。不過在意的朋友可以自行查找,然后方便的話告訴我哈哈哈,我懶得搞了。到這里已經(jīng)碼字3小時(shí)了)

    3 Fast RCNN

    SPP Net真是個(gè)好方法,R-CNN的進(jìn)階版Fast R-CNN就是在R-CNN的基礎(chǔ)上采納了SPP Net方法,對R-CNN作了改進(jìn),使得性能進(jìn)一步提高。

    【R-CNN vs Fast R-CNN】

  • 依舊使用selective search的方法來選取候選框bounding box。

  • **不再使用SVM+線性回歸的方法,而是全部通過神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)分類和邊框回歸的任務(wù)。**Fast-RCNN很重要的一個(gè)貢獻(xiàn)是成功的讓人們看到了Region Proposal + CNN這一框架的可行性,不再使用Region Proposal + CNN + SVM + LR的框架了。

  • 現(xiàn)在梳理一些Fast RCNN推理的流程。

  • 現(xiàn)在有一個(gè)原圖,先通過selective search得到候選框;

  • 將原圖放到CNN中進(jìn)行特征處理,得到特征圖,然后將候選框映射到特征圖上,得到大小不同的特征圖的候選框。

  • 把特征圖候選框放到ROI pooling層中(只有一個(gè),不是SPP的3個(gè)ROI結(jié)構(gòu)了),輸出7*7的特征圖,這時(shí)候有512個(gè)通道,所以在ROI輸出之后,把7*7*512個(gè)特征放到FC層中。

  • FC層后接入了兩個(gè)不同的FC層(分支結(jié)構(gòu)),分別輸出兩個(gè)不同的結(jié)果。第一個(gè)結(jié)果加上softmax變成候選框的類別概率,第二個(gè)結(jié)果就是候選框的4個(gè)參數(shù)的邊框回歸的值。

  • 整個(gè)流程可以看下面的圖:

    現(xiàn)在,目標(biāo)檢測一張圖片,只需要0.32秒鐘,之前的RCNN可是47秒。

    【Fast RCNN的貢獻(xiàn)】再說一下Fast RCNN的改進(jìn),其實(shí)主要改進(jìn)都是SPP Net的,用了ROI和先卷積再扣除候選框的方法(SPPNet的兩個(gè)優(yōu)點(diǎn)都用了),此外,還是用FC層直接代替了SVM和LR,這個(gè)Fast RCNN的最大貢獻(xiàn)。

    4 Faster RCNN

    之前Fast RCNN最消耗時(shí)間的地方,在于使用selective search來找候選框

    為了更快,使用神經(jīng)網(wǎng)絡(luò)來代替selective search,所以現(xiàn)在,Faster RCNN整體就是一個(gè)神經(jīng)網(wǎng)絡(luò)來搞,一個(gè)端對端的模型。(輸入圖片,輸出候選框,一個(gè)模型完成所有任務(wù)所以是端對端)。

    【區(qū)域候選網(wǎng)絡(luò)RPN】Faster RCNN最大的貢獻(xiàn)在一引入了Region Proposal Network(RPN)網(wǎng)絡(luò)來代替selective search。

    RPN網(wǎng)絡(luò)直接放在最后一個(gè)卷積層的后面,通過一個(gè)滑動窗口,在feature map上滑動。每一個(gè)滑動窗口會給出一個(gè)置信度,置信度低的可以理解為這個(gè)窗口是沒有目標(biāo)的,置信度高的再考慮不同類別的概率。

    【Archor box先驗(yàn)框】 這里還會有一個(gè)archor box的概念,因?yàn)榛瑒哟翱谝话闶钦叫蔚?#xff0c;但是實(shí)際的目標(biāo)檢測可能是長方形。也許比較近似正方形的長方形可以通過邊框回歸矯正,但是其他的長方形物體就非常難辦了。這里事先設(shè)置了幾種不同形狀大小的候選框,除了正方形之外,還有長方形,小正方形等,這樣雖然成倍的增加了計(jì)算量,但是可以提高準(zhǔn)確度。而且這樣增加候選框的計(jì)算量消耗依然是小于selective search的。

    下圖來理解之前講解的概念:圖中有四種不同的archor box,意味著滑動到某一個(gè)位置的時(shí)候,以那個(gè)點(diǎn)為中心,產(chǎn)生四個(gè)不同大小的候選框,然后預(yù)測得到 是否是目標(biāo)物體二分類結(jié)果 和 邊框回歸四分類結(jié)果。下圖會清晰的理解這個(gè)過程:

    總的來說,RPN做的事情是:? 在feature map上滑動窗口 ? 建一個(gè)神經(jīng)網(wǎng)絡(luò)用于物體分類+框位置的回歸 ? 滑動窗口的位置提供了物體的大體位置信息 ? 框的回歸提供了框更精確的位置

    整個(gè)網(wǎng)絡(luò)有四個(gè)損失函數(shù):

    • RPN的二分類損失函數(shù)

    • RPN的邊框回歸損失函數(shù)

    • FAST RCNN的多分類損失函數(shù)

    • Fast RCNN的邊框回歸損失函數(shù)

    然后看看速度比Fast RCNN更快了。Faster R-CNN的主要貢獻(xiàn)就是設(shè)計(jì)了提取候選區(qū)域的網(wǎng)絡(luò)RPN,代替了費(fèi)時(shí)的選擇性搜索Selective Search,使得檢測速度大幅提高。

    5 總結(jié)

    這里有個(gè)圖來總結(jié):

    項(xiàng)目

    R-CNN

    Fast R-CNN

    Faster R-CNN

    提取候選框

    Selective Search

    Selective Search

    RPN網(wǎng)絡(luò)

    提取特征

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)

    卷積神經(jīng)網(wǎng)絡(luò)+ROI池化

    特征分類

    SVM

    • R-CNN(Selective Search + CNN + SVM)

    • SPP-net(ROI Pooling)

    • Fast R-CNN(Selective Search + CNN + ROI)

    • Faster R-CNN(RPN + CNN + ROI)

    往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進(jìn)群: 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的【CV】通俗易懂的目标检测 | RCNN, SPPNet, Fast, Faster的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。