日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

目标检测之RCNN,SPP-NET,Fast-RCNN,Faster-RCNN

發(fā)布時間:2025/3/16 目标检测 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测之RCNN,SPP-NET,Fast-RCNN,Faster-RCNN 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自http://lanbing510.info/2017/08/24/RCNN-FastRCNN-FasterRCNN.html

寫在前面


在深度學(xué)習(xí)出現(xiàn)之前,傳統(tǒng)的目標檢測方法大概分為區(qū)域選擇(滑窗)、特征提取(SIFT、HOG等)、分類器(SVM、Adaboost等)三個部分,其主要問題有兩方面:一方面滑窗選擇策略沒有針對性、時間復(fù)雜度高,窗口冗余;另一方面手工設(shè)計的特征魯棒性較差。自深度學(xué)習(xí)出現(xiàn)之后,目標檢測取得了巨大的突破,最矚目的兩個方向有:1 以RCNN為代表的基于Region Proposal的深度學(xué)習(xí)目標檢測算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN等);2 以YOLO為代表的基于回歸方法的深度學(xué)習(xí)目標檢測算法(YOLO,SSD等)。本篇對基于Region Proposal的深度學(xué)習(xí)目標檢測算法進行介紹,后續(xù)再對基于回歸方法的深度學(xué)習(xí)目標檢測方法進行介紹。

RCNN


流程框圖


算法特點


1 使用Selective Search提取Proposes,然后利用CNN等識別技術(shù)進行分類。

2 使用識別庫進行預(yù)訓(xùn)練,而后用檢測庫調(diào)優(yōu)參數(shù)。

3 使用SVM代替了CNN網(wǎng)絡(luò)中最后的Softmax,同時用CNN輸出的4096維向量進行Bounding Box回歸。

4 流程前兩個步驟(候選區(qū)域提取+特征提取)與待檢測類別無關(guān),可以在不同類之間共用;同時檢測多類時,需要倍增的只有后兩步驟(判別+精修),都是簡單的線性運算,速度很快。

存在問題


1 訓(xùn)練分為多個階段,步驟繁瑣: 微調(diào)網(wǎng)絡(luò)+訓(xùn)練SVM+訓(xùn)練邊框回歸器。

2 訓(xùn)練耗時,占用磁盤空間大:5000張圖像產(chǎn)生幾百G的特征文件。

3 速度慢: 使用GPU, VGG16模型處理一張圖像需要47s。

SPP-NET


流程框圖


算法特點


1 通過Spatial Pyramid Pooling解決了深度網(wǎng)絡(luò)固定輸入層尺寸的這個限制,使得網(wǎng)絡(luò)可以享受不限制輸入尺寸帶來的好處。

2 解決了RCNN速度慢的問題,不需要對每個Proposal(2000個左右)進行Wrap或Crop輸入CNN提取Feature Map,只需要對整圖提一次Feature Map,然后將Proposal區(qū)域映射到卷積特征層得到全鏈接層的輸入特征。

幾個要點


一、ROI的在特征圖上的對應(yīng)的特征區(qū)域的維度不滿足全連接層的輸入要求怎么辦?

作者使用Spatial Pyramid Pooling解決了該問題。如下圖所示,假設(shè)原圖輸入是224x224,對于conv5出來后的輸出是13x13x256的,可以理解成有256個這樣的Filter,每個Filter對應(yīng)一張13x13的Reponse Map。如果像上圖那樣將Reponse Map分成1x1(金字塔底座),2x2(金字塔中間),4x4(金字塔頂座)三張子圖,分別做Max Pooling后,出來的特征就是(16+4+1)x256 維度。如果原圖的輸入不是224x224,出來的特征依然是(16+4+1)x256維度。這樣就實現(xiàn)了不管圖像尺寸如何池化n的輸出永遠是 (16+4+1)x256 維度。

二、原始圖像的ROI如何映射到特征圖(一系列卷積層的最后輸出)

要搞定這個問題,需要首先清楚感受野等概念和計算方法。下面從感受野、感受野上面的坐標映射及原始圖像的ROI如何映射三方面闡述。

1 感受野

① 概念

在卷積神經(jīng)網(wǎng)絡(luò)中,感受野的定義是卷積神經(jīng)網(wǎng)絡(luò)每一層輸出的特征圖(Feature Map)上的像素點在原始圖像上映射的區(qū)域大小。

② 如何計算

output field size = ( input field size - kernel size + 2*padding ) / stride + 1

其中output field size 是卷積層的輸出,input field size 是卷積層的輸入,反過來卷積層的輸入(也即前一層的感受野) = ?答案必然是:

input field size = (output field size - 1)* stride - 2*padding + kernel size

計算卷積層輸出大小和感受野大小的Python代碼

運行結(jié)果如下。從運行結(jié)果可以看出論文中ZF-5網(wǎng)絡(luò)感受野大小為139是什么得到的了。

2 感受野上的坐標映射

① 計算公式
pi=si?pi+1+[(ki?1)/2?padding]p_i = s_i*p_{i+1} + [(k_i - 1) / 2 - padding]pi?=si??pi+1?+[(ki??1)/2?padding]

對于Neuronlayer(ReLU/Sigmoid/…):
pi=pi+1p_i = p_i + 1pi?=pi?+1

其中pip_ipi?為第i 層感受野上的坐標,sis_isi?為Stride的大小,kik_iki?為感受野的大小。

② 例子

上面是計算任意一個Layer輸入輸出的坐標映射關(guān)系,如果是計算任意Feature Map之間的關(guān)系,只需要用簡單的組合就可以得到,下圖是一個簡單的例子:

③ 簡化版本

何凱明在SPP-NET中使用的是簡化版本,將2小節(jié)公式中的Padding都設(shè)為?ki/2?,公式可進一步簡化為:pi=si?pi+1p_i = s_i * p_{i+1}pi?=si??pi+1?

3 原始圖像的ROI如何映射

SPP-NET是把原始ROI的左上角和右下角 映射到Feature Map上的兩個對應(yīng)點。 有了Feature Map上的兩隊角點就確定了對應(yīng)的Feature Map 區(qū)域(下圖中橙色)。

左上角取x′=?x/S?+1,y′=?y/S?+1x'=\lfloor x/S \rfloor+1, y'= \lfloor y/S \rfloor+1x=?x/S?+1,y=?y/S?+1;右下角的點取x′=?x/S?+1,y′=?y/S?+1x'=\lceil x/S \rceil+1, y'=\lceil y/S \rceil+1x=?x/S?+1,y=?y/S?+1。其中S為坐標映射的簡化計算版本,即$ s_i = \prod_0^i{s_i}$。

Fast-RCNN


流程框圖


算法特點


1 Fast-RCNN直接使用Softmax替代了RCNN中SVM進行分類,同時在網(wǎng)絡(luò)中加入了多任務(wù)函數(shù)邊框回歸,實現(xiàn)了端到端的訓(xùn)練(除SS Region Proposal階段)。

2 借鑒SPP-NET,提出了一個ROI層。ROI Pooling Layer實際上是SPP-NET的一個精簡版,SPP-NET對每個Proposal使用了不同大小的金字塔映射,而ROI Pooling Layer只需要下采樣到一個7x7的特征圖。對于VGG16網(wǎng)絡(luò)conv5_3有512個特征圖,這樣所有Region Proposal對應(yīng)了一個77512維度的特征向量作為全連接層的輸入。

3 使用了不同于SPP-NET的訓(xùn)練方式,訓(xùn)練時,把同張圖片的Prososals作為一批進行學(xué)習(xí),而Proposals的坐標直接映射到conv5層上,這樣相當于一張圖片的所有訓(xùn)練樣本只卷積了一次。

4 論文在回歸問題上并沒有用很常見的2范數(shù)作為回歸,而是使用所謂的魯棒L1范數(shù)作為損失函數(shù)。

5 論文將比較大的全鏈接層用SVD分解了一下使得檢測的時候更加迅速。

幾個要點


一、聯(lián)合訓(xùn)練

聯(lián)合訓(xùn)練(Joint Training)指如何將分類和邊框回歸聯(lián)合到一起在CNN階段訓(xùn)練,主要難點是損失函數(shù)的設(shè)計。Fast-RCNN中,有兩個輸出層:第一個是針對每個ROI區(qū)域的分類概率預(yù)測,p=(p0,p1,p2,…,pk)p = (p_0, p_1, p_2, \ldots, p_k)p=(p0?,p1?,p2?,,pk?);第二個則是針對每個ROI區(qū)域坐標的偏移優(yōu)化,tk=(txk,tyk,twk,thk),0&lt;k&lt;Kt^k=(t^k_x,t^k_y,t^k_w,t^k_h), 0&lt;k&lt;Ktk=(txk?,tyk?,twk?,thk?),0<k<K是多類檢測的類別序號。每個訓(xùn)練ROI都對應(yīng)著真實類別uuu和邊框回歸目標v=(vx,vy,vw,vh)v=(v_x,v_y,v_w,v_h)v=(vx?,vy?,vw?,vh?),對于類別uuu預(yù)測邊框為tu=(txu,tyu,twu,thu)t^u=(t^u_x,t^u_y,t^u_w,t^u_h)tu=(txu?,tyu?,twu?,thu?),使用多任務(wù)損失LLL來定義ROI上分類和邊框回歸的損失:

L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)L(p,u,t^u,v)=L_{cls}(p,u)+λ[u≥1]L_{loc}(t^u,v)L(p,u,tu,v)=Lcls?(p,u)+λ[u1]Lloc?(tu,v)
其中Lcls(p,u)=?log?puL_{cls}(p,u)=?\log{p_u}Lcls?(p,u)=?logpu?表示真實類別的log?\loglog損失,當u≥1u≥1u1時,[u≥1][u≥1][u1]的值為1,否則為0。下面將重點介紹多任務(wù)損失中的邊框回歸部分(對應(yīng)坐標偏移優(yōu)化部分)。

二、邊框回歸

假設(shè)對于類別uuu,在圖片中標注的真實坐標和對應(yīng)的預(yù)測值理論上兩者越接近越好,相應(yīng)的損失函數(shù)為:

Lloc(tu,v)=∑i∈x,y,w,hsmoothL1(tiu?vi)L_{loc}(t^u, v)=∑_{i∈x,y,w,h}smooth_{L1}(t^u_i?v_i)Lloc?(tu,v)=ix,y,w,h?smoothL1?(tiu??vi?)

其中

smoothL1(x)={∣x∣?0.5otherwise0.5?x2∣x∣≤1smooth_{L1}(x)=\lbrace{^{0.5*x^2 |x|≤1} _{|x|?0.5 otherwise}}smoothL1?(x)={x?0.5otherwise0.5?x2x1?
Fast-RCNN在上面用到的魯棒$L_1< math $之間為二次函數(shù),其他區(qū)域為線性函數(shù),函數(shù)直觀圖如下圖所示。

存在問題


使用Selective Search提取Region Proposals,沒有實現(xiàn)真正意義上的端對端,操作也十分耗時。

Faster-RCNN


流程框圖


算法特點


1 提出了Region Proposal Network(RPN),將Proposal階段和CNN分類融到了一起,實現(xiàn)了一個完全的End-To-End的CNN目標檢測模型。RPN可以快速提取高質(zhì)量的Proposal,不僅加快了目標檢測速度,還提高了目標檢測性能。

2 將Fast-RCNN和RPN放在同一個網(wǎng)絡(luò)結(jié)構(gòu)中訓(xùn)練,共享網(wǎng)絡(luò)參數(shù)。

幾個要點


一、Region Proposal Network

Region Proposal Network(RPN)的核心思想是使用卷積神經(jīng)網(wǎng)絡(luò)直接產(chǎn)生Region Proposal,使用的方法本質(zhì)上就是滑動窗口。RPN的設(shè)計比較巧妙,RPN只需在最后的卷積層上滑動一遍,借助Anchor機制和邊框回歸可以得到多尺度多長寬比的Region Proposal。下圖是RPN的網(wǎng)絡(luò)結(jié)構(gòu)圖。

在ZF網(wǎng)絡(luò)模型下,給定輸入圖像(假設(shè)分辨率為6001000),經(jīng)過卷積操作得到最后一層的卷積特征圖(大小約為4060)。在這個特征圖上使用33的卷積核(滑動窗口)與特征圖進行卷積,最后一層卷積層共有256個Feature Map,那么這個33的區(qū)域卷積后可以獲得一個256維的特征向量,后邊接Cls Layer和Reg Layer分別用于分類和邊框回歸(跟Fast RCNN類似,只不過這里的類別只有目標和背景兩個類別)。33滑窗對應(yīng)的每個特征區(qū)域同時預(yù)測輸入圖像3種尺度(128,256,512),3種長寬比(1:1,1:2,2:1)的Region Proposal,這種映射的機制稱為Anchor。所以對于這個4060的Feature Map,總共有約20000(40609)個Anchor,也就是預(yù)測20000個Region Proposal。下圖是51*39個Anchor中心,以及9種Anchor示例。

這樣設(shè)計的好處是什么?雖然現(xiàn)在也是用的滑動窗口策略,但是,滑動窗口操作是在卷積層特征圖上進行的,維度較原始圖像降低了16*16倍(16如何得到的可參見前文);多尺度采用了9種Anchor,對應(yīng)了三種尺度和三種長寬比,加上后邊接了邊框回歸,所以即便是這9種Anchor外的窗口也能得到一個跟目標比較接近的Region Proposal。

二、RPN的損失函數(shù)

損失函數(shù)定義為:

$L(p_it_i)=\frac{1}{N_{cls}}∑_i{L_{cls}(p_i,p?_i)}+λ_1N_{reg}∑_ip?_iL_{reg}(t_i,t^?_i) < math $

其中iii表示一次Mini-Batch中Anchor的索引,pip _ipi?是Anchor?iii是否是一個物體,LregL_{reg}Lreg?即為上面提到的smoothL1(x)smoothL_1(x)smoothL1?(x)函數(shù),NclsN_{cls}Ncls?NregN_{reg}Nreg?是兩個歸一化項,分別表示Mini-Batch的大小和Anchor位置的數(shù)目。

三、網(wǎng)絡(luò)的訓(xùn)練

如果是分別訓(xùn)練兩種不同任務(wù)的網(wǎng)絡(luò)模型,即使它們的結(jié)構(gòu)、參數(shù)完全一致,但各自的卷積層內(nèi)的卷積核也會向著不同的方向改變,導(dǎo)致無法共享網(wǎng)絡(luò)權(quán)重,Faster-RCNN提出了三種可能的方式:

1 Alternating Training:此方法其實就是一個不斷迭代的訓(xùn)練過程,既然分別訓(xùn)練RPN和Fast-RCNN可能讓網(wǎng)絡(luò)朝不同的方向收斂,那么我們可以先獨立訓(xùn)練RPN,然后用這個RPN的網(wǎng)絡(luò)權(quán)重對Fast-RCNN網(wǎng)絡(luò)進行初始化,并且用之前RPN輸出Proposal作為此時Fast-RCNN的輸入,之后不斷迭代這個過程,即循環(huán)訓(xùn)練RPN、Fast-RCNN。

2 Approximate Joint Training:這里與前一種方法不同,不再是串行訓(xùn)練RPN和Fast-RCNN,而是嘗試把二者融入到一個網(wǎng)絡(luò)內(nèi),具體融合的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,可以看到,Proposals是由中間的RPN層輸出的,而不是從網(wǎng)絡(luò)外部得到。需要注意的一點,名字中的"Approximate"是因為“This solution ignores the derivative w.r.t. the proposal boxes’ coordinates that are also network responses”,也就是說,反向傳播階段RPN產(chǎn)生的Cls Score能夠獲得梯度用以更新參數(shù),但是Proposal的坐標預(yù)測則直接把梯度舍棄了,這個設(shè)置可以使Backward時該網(wǎng)絡(luò)層能得到一個解析解(Closed Results),并且相對于Alternating Traing減少了25-50%的訓(xùn)練時間。

3 Non-approximate Training:上面的Approximate Joint Training把Proposal的坐標預(yù)測梯度直接舍棄,所以被稱作Approximate,那么理論上如果不舍棄是不是能更好的提升RPN部分網(wǎng)絡(luò)的性能呢?作者把這種訓(xùn)練方式稱為“ Non-approximate Joint Training”,但是此方法只是一筆帶過,表示“This is a nontrivial problem and a solution can be given by an “RoI warping” layer as developed in [15], which is beyond the scope of this paper”。

作者沒有用上面提到的三種可能方法,而是使用了4-Step Alternating Training,具體步驟如下。

1 用ImageNet模型初始化,獨立訓(xùn)練一個RPN網(wǎng)絡(luò);

2 仍然用ImageNet模型初始化,但是使用上一步RPN網(wǎng)絡(luò)產(chǎn)生的Proposal作為輸入,訓(xùn)練一個Fast-RCNN網(wǎng)絡(luò),至此,兩個網(wǎng)絡(luò)每一層的參數(shù)完全不共享;

3 使用第二步的Fast-RCNN網(wǎng)絡(luò)參數(shù)初始化一個新的RPN網(wǎng)絡(luò),但是把RPN、Fast-RCNN共享的那些卷積層的Learning Rate設(shè)置為0,也就是不更新,僅僅更新RPN特有的那些網(wǎng)絡(luò)層,重新訓(xùn)練,此時,兩個網(wǎng)絡(luò)已經(jīng)共享了所有公共的卷積層;

4 仍然固定共享的那些網(wǎng)絡(luò)層,把Fast-RCNN特有的網(wǎng)絡(luò)層也加入進來,形成一個Unified Network,繼續(xù)訓(xùn)練,Fine Tune Fast-RCNN特有的網(wǎng)絡(luò)層,此時,該網(wǎng)絡(luò)已經(jīng)實現(xiàn)我們設(shè)想的目標,即網(wǎng)絡(luò)內(nèi)部預(yù)測Proposal并實現(xiàn)檢測的功能。

上述步驟圖示如下。

小結(jié)


至此,介紹完了以RCNN為代表的基于Region Proposal的深度學(xué)習(xí)目標檢測算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN),主要介紹了算法的核心思想和要點難點,代碼可以從GitHub得到,更多實現(xiàn)細節(jié)可以閱讀原論文和代碼。接下來會寫另一篇文章來介紹以YOLO為代表的基于回歸方法的深度學(xué)習(xí)目標檢測算法(YOLO,SSD)。

參考文獻


[1] RCNN:“Rich feature hierarchies for accurate object detection and semantic segmentation”

[2] SPP-NET:“Spatial pyramid pooling in deep convolutional networks for visual recognition”

[3] Fast-RCNN:“Fast R-CNN”

[4] Faster-RCNN:“Faster R-CNN: Towards real-time object detection with region proposal networks”

[5]?RCNN, Fast-RCNN, Faster-RCNN的一些事

[6]?卷積神經(jīng)網(wǎng)絡(luò)物體檢測之感受野大小計算

[7]?原始圖片中的ROI如何映射到到Feature Map

[8]?Fast R-CNN

[9]?通過代碼理解Faster-RCNN中的RPN

[10]?Faster R-CNN

[11]?基于深度學(xué)習(xí)的目標檢測研究進展

總結(jié)

以上是生活随笔為你收集整理的目标检测之RCNN,SPP-NET,Fast-RCNN,Faster-RCNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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