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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Faster-RCNN学习

發布時間:2024/9/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Faster-RCNN学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:RCNN的介紹(有些圖片沒有粘貼成功,推薦查看原文)

RCNN(Regions with CNN features)是將CNN方法應用到目標檢測問題上的一個里程碑,由年輕有為的RBG大神提出,借助CNN良好的特征提取和分類性能,通過RegionProposal方法實現目標檢測問題的轉化。

算法可以分為四步:

1)候選區域選擇

Region Proposal是一類傳統的區域提取方法,可以看作不同寬高的滑動窗口,通過窗口滑動獲得潛在的目標圖像,關于Proposal大家可以看下SelectiveSearch,一般Candidate選項為2k個即可,這里不再詳述;

根據Proposal提取的目標圖像進行歸一化,作為CNN的標準輸入。

2)CNN特征提取

標準CNN過程,根據輸入進行卷積/池化等操作,得到固定維度的輸出;

3)分類與邊界回歸

實際包含兩個子步驟,一是對上一步的輸出向量進行分類(需要根據特征訓練分類器);二是通過邊界回歸(bounding-box regression) 得到精確的目標區域,由于實際目標會產生多個子區域,旨在對完成分類的前景目標進行精確的定位與合并,避免多個檢出。

RCNN存在三個明顯的問題:

1)多個候選區域對應的圖像需要預先提取,占用較大的磁盤空間;

2)針對傳統CNN需要固定尺寸的輸入圖像,crop/warp(歸一化)產生物體截斷或拉伸,會導致輸入CNN的信息丟失;

3)每一個ProposalRegion都需要進入CNN網絡計算,上千個Region存在大量的范圍重疊,重復的特征提取帶來巨大的計算浪費。


??SPP-Net

智者善于提出疑問,既然CNN的特征提取過程如此耗時(大量的卷積計算),為什么要對每一個候選區域獨立計算,而不是提取整體特征,僅在分類之前做一次Region截取呢?智者提出疑問后會立即付諸實踐,于是SPP-Net誕生了。

SPP-Net在RCNN的基礎上做了實質性的改進:

1)取消了crop/warp圖像歸一化過程,解決圖像變形導致的信息丟失以及存儲問題;

2)采用空間金字塔池化(SpatialPyramid Pooling )替換了 全連接層之前的最后一個池化層(上圖top),翠平說這是一個新詞,我們先認識一下它。

為了適應不同分辨率的特征圖,定義一種可伸縮的池化層,不管輸入分辨率是多大,都可以劃分成m*n個部分。這是SPP-net的第一個顯著特征,它的輸入是conv5特征圖?以及特征圖候選框(原圖候選框 通過stride映射得到),輸出是固定尺寸(m*n)特征;

還有金字塔呢?通過多尺度增加所提取特征的魯棒性,這并不關鍵,在后面的Fast-RCNN改進中該特征已經被舍棄;

最關鍵的是SPP的位置,它放在所有的卷積層之后,有效解決了卷積層的重復計算問題(測試速度提高了24~102倍),這是論文的核心貢獻。


盡管SPP-Net貢獻很大,仍然存在很多問題:

1)和RCNN一樣,訓練過程仍然是隔離的,提取候選框 | 計算CNN特征| SVM分類 | Bounding Box回歸獨立訓練,大量的中間結果需要轉存,無法整體訓練參數;

2)SPP-Net在無法同時Tuning在SPP-Layer兩邊的卷積層和全連接層,很大程度上限制了深度CNN的效果;

3)在整個過程中,Proposal Region仍然很耗時。


??Fast-RCNN

問題很多,解決思路同樣也非常巧妙,ok,再次感謝 RBG 大神的貢獻,直接引用論文原圖(描述十分詳盡)。

Fast-RCNN主要貢獻在于對RCNN進行加速,快是我們一直追求的目標(來個山寨版的奧運口號- 更快、更準、更魯棒),問題在以下方面得到改進:

1)賣點1 - 借鑒SPP思路,提出簡化版的ROI池化層(注意,沒用金字塔),同時加入了候選框映射功能,使得網絡能夠反向傳播,解決了SPP的整體網絡訓練問題;

2)賣點2 - 多任務Loss層

A)SoftmaxLoss代替了SVM,證明了softmax比SVM更好的效果;

B)SmoothL1Loss取代Bouding box回歸。

將分類和邊框回歸進行合并(又一個開創性的思路),通過多任務Loss層進一步整合深度網絡,統一了訓練過程,從而提高了算法準確度。

3)全連接層通過SVD加速

這個大家可以自己看,有一定的提升但不是革命性的。

4)結合上面的改進,模型訓練時可對所有層進行更新,除了速度提升外(訓練速度是SPP的3倍,測試速度10倍),得到了更好的檢測效果(VOC07數據集mAP為70,注:mAP,mean Average Precision)。

接下來分別展開這里面的兩大賣點:

前面已經了解過可伸縮的池化層,那么在訓練中參數如何通過ROI Pooling層傳導的?根據鏈式求導法則,對于yj = max(xi) 傳統的max pooling的映射公式:

其中 為判別函數,為1時表示選中為最大值,0表示被丟棄,誤差不需要回傳,即對應 權值不需要更新。如下圖所示,對于輸入 xi 的擴展公式表示為:

(i,r,j)?表示 xi 在第 r 個框的第 j 個節點是否被選中為最大值(對應上圖 y0,8 和 y1,0),xi 參數在前向傳導時受后面梯度誤差之和的影響。

多任務Loss層(全連接層)是第二個核心思路,如上圖所示,其中cls_score用于判斷分類,bbox_reg計算邊框回歸,label為訓練樣本標記。

其中Lcls為分類誤差:

px?為對應Softmax分類概率,pl?即為label所對應概率(正確分類的概率),pl?= 1時,計算結果Loss為0, 越小,Loss值越大(0.01對應Loss為2)。

Lreg 為邊框回歸誤差:

即在正確分類的情況下,回歸框與Label框之間的誤差(Smooth L1), 對應描述邊框的4個參數(上下左右or平移縮放),g對應單個參數的差異,|x|>1 時,變換為線性以降低離群噪聲:

Ltotal為加權目標函數(背景不考慮回歸Loss):

細心的小伙伴可能發現了,我們提到的SPP的第三個問題還沒有解決,依然是耗時的候選框提取過程(忽略這個過程,Fast-RCNN幾乎達到了實時),那么有沒有簡化的方法呢?

必須有,搞學術一定要有這種勇氣。

??Faster-RCNN

對于提取候選框最常用的SelectiveSearch方法,提取一副圖像大概需要2s的時間,改進的EdgeBoxes算法將效率提高到了0.2s,但是這還不夠。

候選框提取不一定要在原圖上做,特征圖上同樣可以,低分辨率特征圖意味著更少的計算量,基于這個假設,MSRA的任少卿等人提出RPN(RegionProposal Network),完美解決了這個問題,我們先來看一下網絡拓撲。

通過添加額外的RPN分支網絡,將候選框提取合并到深度網絡中,這正是Faster-RCNN里程碑式的貢獻。

RPN網絡的特點在于通過滑動窗口的方式實現候選框的提取,每個滑動窗口位置生成9個候選窗口(不同尺度、不同寬高),提取對應9個候選窗口(anchor)的特征,用于目標分類和邊框回歸,與FastRCNN類似。

目標分類只需要區分候選框內特征為前景或者背景。

邊框回歸確定更精確的目標位置,基本網絡結構如下圖所示:

訓練過程中,涉及到的候選框選取,選取依據:

1)丟棄跨越邊界的anchor;

2)與樣本重疊區域大于0.7的anchor標記為前景,重疊區域小于0.3的標定為背景;

對于每一個位置,通過兩個全連接層(目標分類+邊框回歸)對每個候選框(anchor)進行判斷,并且結合概率值進行舍棄(僅保留約300個anchor),沒有顯式地提取任何候選窗口,完全使用網絡自身完成判斷和修正。

從模型訓練的角度來看,通過使用共享特征交替訓練的方式,達到接近實時的性能,交替訓練方式描述為:

1)根據現有網絡初始化權值w,訓練RPN;

2)用RPN提取訓練集上的候選區域,用候選區域訓練FastRCNN,更新權值w;

3)重復1、2,直到收斂。

因為Faster-RCNN,這種基于CNN的real-time 的目標檢測方法看到了希望,在這個方向上有了進一步的研究思路。至此,我們來看一下RCNN網絡的演進,如下圖所示:


Faster實現了端到端的檢測,并且幾乎達到了效果上的最優,速度方向的改進仍有余地,于是YOLO誕生了。

??YOLO

YOLO來自于“YouOnly Look Once”,你只需要看一次,不需要類似RPN的候選框提取,直接進行整圖回歸就可以了,簡單吧?

算法描述為:

1)將圖像劃分為固定的網格(比如7*7),如果某個樣本Object中心落在對應網格,該網格負責這個Object位置的回歸;

2)每個網格預測包含Object位置與置信度信息,這些信息編碼為一個向量;

3)網絡輸出層即為每個Grid的對應結果,由此實現端到端的訓練。

YOLO算法的問題有以下幾點:

1)7*7的網格回歸特征丟失比較嚴重,缺乏多尺度回歸依據;

2)Loss計算方式無法有效平衡(不管是加權或者均差),Loss收斂變差,導致模型不穩定。

Object(目標分類+回歸)<=等價于=>背景(目標分類)

導致Loss對目標分類+回歸的影響,與背景影響一致,部分殘差無法有效回傳;

整體上YOLO方法定位不夠精確,貢獻在于提出給目標檢測一個新的思路,讓我們看到了目標檢測在實際應用中真正的可能性。

這里備注一下,直接回歸可以認為最后一層即是對應7*7個網格的特征結果,每一個網格的對應向量代表了要回歸的參數(比如pred、cls、xmin、ymin、xmax、ymax),參數的含義在于Loss函數的設計。

??SSD

由于YOLO本身采用的SingleShot基于最后一個卷積層實現,對目標定位有一定偏差,也容易造成小目標的漏檢。

借鑒Faster-RCNN的Anchor機制,SSD(Single Shot MultiBox Detector)在一定程度上解決了這個問題,我們先來看下SSD的結構對比圖。


基于多尺度特征的Proposal,SSD達到了效率與效果的平衡,從運算速度上來看,能達到接近實時的表現,從效果上看,要比YOLO更好。

對于目標檢測網絡的探索仍在一個快速的過程中,有些基于Faster-RCNN的變種準確度已經刷到了87%以上,而在速度的改進上,YOLO2也似乎會給我們帶來一定的驚喜,“未來已來”,我們拭目以待!

總結

以上是生活随笔為你收集整理的Faster-RCNN学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。