Feature Pyramid Networks for Object Detection 總結

最近在閱讀FPN for object detection,看了網上的很多資料,有些認識是有問題的,當然有些很有價值。下面我自己總結了一下,以供參考。

1. FPN解決了什么問題?

答: 在以往的faster rcnn進行目標檢測時,無論是rpn還是fast rcnn,roi 都作用在最后一層,這在大目標的檢測沒有問題,但是對于小目標的檢測就有些問題。因為對于小目標來說,當進行卷積池化到最后一層,實際上語義信息已經沒有了,因為我們都知道對于一個roi映射到某個feature map的方法就是將底層坐標直接除以stride,顯然越后,映射過去后就越小,甚至可能就沒有了。 所以為了解決多尺度檢測的問題,引入了特征金字塔網絡。

下面我們介紹一下特征金字塔網絡。如下引用[1]



  • 圖(a)是相當常見的一種多尺度方法,稱為featurized image pyramid,這種方法在較早的人工設計特征(DPM)時被廣泛使用,在CNN中也有人使用過。就是對input iamge進行multi scale,通過設置不同的縮放比例實現。這種可以解決多尺度,但是相當于訓練了多個模型(假設要求輸入大小固定),即便允許輸入大小不固定,但是也增加了存儲不同scale圖像的內存空間。

  • 圖(b)就是CNN了,cnn相比人工設計特征,能夠自己學習到更高級的語義特征,同時CNN對尺度變化魯棒,因此如圖,從單個尺度的輸入計算的特征也能用來識別,但是遇到明顯的多尺度目標檢測時,還是需要金字塔結構來進一步提升準確率。
    從現在在imageNet和COCO數據集上領先的的一些方法來看,在測試的時候都用到了featurized image pyramid方法,即結合(a),(b)。 說明了特征化圖像金字塔的每一級的好處在于,產生了多尺度的特征表示,每一級的特征都有很強的語義(因為都用cnn生成的特征),包括高分辨率的一級(最大尺度的輸入圖像)。
    但是這種模式有明顯的弊端,相比于原來方法,時間增長了4倍,很難在實時應用中使用,同樣,也增大了存儲代價,這就是為什么只是在測試階段使用image pyramid。但是如果只在測試階段使用,那么訓練和測試在推斷的時候會不一致。所以,最近的一些方法干脆舍棄了image pyramid。

但是image pyramid不是計算多尺度特征表示的唯一方法。deepCNN能夠層次化的特征,而且因為池化的作用,會產生金字塔形的特征,具有一種內在的多尺度。但是問題在于,高分辨率的map(淺層)具有low-level的特征,所以淺層的目標識別性能較弱。這也是不同level融合的目的。

  • 如圖(c),SSD較早嘗試了使用CNN金字塔形的層級特征。理想情況下,SSD風格的金字塔 重利用了前向過程計算出的來自多層的多尺度特征圖,因此這種形式是不消耗額外的資源的。但是SSD為了避免使用low-level的特征,放棄了淺層的feature map,而是從conv4_3開始建立金字塔,而且加入了一些新的層。因此SSD放棄了重利用更高分辨率的feature map,但是這些feature map對檢測小目標非常重要。這就是SSD與FPN的區別。

  • 圖(4)是FPN的結構,FPN是為了自然地利用CNN層級特征的金字塔形式,同時生成在所有尺度上都具有強語義信息的特征金字塔。所以FPN的結構設計了top-down結構和橫向連接,以此融合具有高分辨率的淺層layer和具有豐富語義信息的深層layer。這樣就實現了從單尺度的單張輸入圖像,快速構建在所有尺度上都具有強語義信息的特征金字塔,同時不產生明顯的代價。

下面我們再來看一下相似的網絡:


這里寫圖片描述

上面一個帶有skip connection的網絡結構在預測的時候是在finest level(自頂向下的最后一層)進行的,簡單講就 是經過多次上采樣并融合特征到最后一步,拿最后一步生成的特征做預測。而FPN網絡結構和上面的類似,區別在于 預測是在每一層中獨立進行的。后面的實驗證明finest level的效果不如FPN好,原因在于FPN網絡是一個窗口大小固定的滑動窗口檢測器,因此在金字塔的不同層滑動可以增加其對尺度變化的魯棒性。另外雖然finest level有更多的anchor,但仍然效果不如FPN好,說明增加anchor的數量并不能有效提高準確率。

自下而上的路徑

CNN的前饋計算就是自下而上的路徑,特征圖經過卷積核計算,通常是越變越小的,也有一些特征層的輸出和原來大小一樣,稱為“相同網絡階段”(same network stage )。對于本文的特征金字塔,作者為每個階段定義一個金字塔級別, 然后選擇每個階段的最后一層的輸出作為特征圖的參考集。 這種選擇是很自然的,因為每個階段的最深層應該具有最強的特征。具體來說,對于ResNets,作者使用了每個階段的最后一個殘差結構的特征激活輸出。將這些殘差模塊輸出表示為{C2, C3, C4, C5},對應于conv2,conv3,conv4和conv5的輸出,并且注意它們相對于輸入圖像具有{4, 8, 16, 32}像素的步長。考慮到內存占用,沒有將conv1包含在金字塔中。

自上而下的路徑和橫向連接

自上而下的路徑(the top-down pathway )是如何去結合低層高分辨率的特征呢?方法就是,把更抽象,語義更強的高層特征圖進行上取樣,然后把該特征橫向連接(lateral connections )至前一層特征,因此高層特征得到加強。值得注意的是,橫向連接的兩層特征在空間尺寸上要相同。這樣做應該主要是為了利用底層的定位細節信息。

下圖顯示連接細節。把高層特征做2倍上采樣(最鄰近上采樣法,可以參考反卷積),然后將其和對應的前一層特征結合(前一層要經過1 * 1的卷積核才能用,目的是改變channels,應該是要和后一層的channels相同),結合方式就是做像素間的加法。重復迭代該過程,直至生成最精細的特征圖。迭代開始階段,作者在C5層后面加了一個1 * 1的卷積核來產生最粗略的特征圖,最后,作者用3 * 3的卷積核去處理已經融合的特征圖(為了消除上采樣的混疊效應),以生成最后需要的特征圖。為了后面的應用能夠在所有層級共享分類層,這里坐著固定了3*3卷積后的輸出通道為d,這里設為256.因此所有額外的卷積層(比如P2)具有256通道輸出。這些額外層沒有用非線性。

{C2, C3, C4, C5}層對應的融合特征層為{P2, P3, P4, P5},對應的層空間尺寸是相通的。


這里寫圖片描述

2. 應用

Faster R-CNN+Resnet-101

本部分來源自:http://www.voidcn.com/article/p-xtjooucw-dx.html
要想明白FPN如何應用在RPN和Fast R-CNN(合起來就是Faster R-CNN),首先要明白Faster R-CNN+Resnet-101的結構,這部分在是論文中沒有的,博主試著用自己的理解說一下。

直接理解就是把Faster-RCNN中原有的VGG網絡換成ResNet-101,ResNet-101結構如下圖:


這里寫圖片描述

Faster-RCNN利用conv1到conv4-x的91層為共享卷積層,然后從conv4-x的輸出開始分叉,一路經過RPN網絡進行區域選擇,另一路直接連一個ROI Pooling層,把RPN的結果輸入ROI Pooling層,映射成7 * 7的特征。然后所有輸出經過conv5-x的計算,這里conv5-x起到原來全連接層(fc)的作用。最后再經分類器和邊框回歸得到最終結果。整體框架用下圖表示:

這里寫圖片描述

RPN中的特征金字塔網絡

本部分來源自:http://www.voidcn.com/article/p-xtjooucw-dx.html

RPN是Faster R-CNN中用于區域選擇的子網絡,RPN是在一個13 * 13 * 256的特征圖上應用9種不同尺度的anchor,本篇論文另辟蹊徑,把特征圖弄成多尺度的,然后固定每種特征圖對應的anchor尺寸,很有意思。也就是說,作者在每一個金字塔層級應用了單尺度的anchor,{P2, P3, P4, P5, P6}分別對應的anchor尺度為{32^2, 64^2, 128^2, 256^2, 512^2 },當然目標不可能都是正方形,本文仍然使用三種比例{1:2, 1:1, 2:1},所以金字塔結構中共有15種anchors。這里,博主嘗試畫一下修改后的RPN結構:


這里寫圖片描述

從圖上看出各階層共享后面的分類網絡。這也是強調為什么各階層輸出的channel必須一致的原因,這樣才能使用相同的參數,達到共享的目的。

注意上面的p6,根據論文中所指添加:

這里寫圖片描述

正負樣本的界定和Faster RCNN差不多:如果某個anchor和一個給定的ground truth有最高的IOU或者和任意一個Ground truth的IOU都大于0.7,則是正樣本。如果一個anchor和任意一個ground truth的IOU都小于0.3,則為負樣本。

Fast R-CNN 中的特征金字塔網絡

Fast R-CNN 中很重要的是ROI Pooling層,需要對不同層級的金字塔制定不同尺度的ROI。
ROI Pooling層使用region proposal的結果和中間的某一特征圖作為輸入,得到的結果經過分解后分別用于分類結果和邊框回歸。
然后作者想的是,不同尺度的ROI使用不同特征層作為ROI pooling層的輸入,大尺度ROI就用后面一些的金字塔層,比如P5;小尺度ROI就用前面一點的特征層,比如P4。那怎么判斷ROI改用那個層的輸出呢?這里作者定義了一個系數Pk,其定義為:
這里寫圖片描述

224是ImageNet的標準輸入,k0是基準值,設置為5,代表P5層的輸出(原圖大小就用P5層),w和h是ROI區域的長和寬,假設ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味著該ROI應該使用P4的特征層。k值應該會做取整處理,防止結果不是整數。
然后,因為作者把conv5也作為了金字塔結構的一部分,那么從前全連接層的那個作用怎么辦呢?這里采取的方法是增加兩個1024維的輕量級全連接層,然后再跟上分類器和邊框回歸,認為這樣還能使速度更快一些。

最后,博主根據自己的理解畫了一張草圖,猜想整個網絡經FPN修改后的樣子,也就是Faster R-CNN with FPN。


這里寫圖片描述

總結

作者提出的FPN(Feature Pyramid Network)算法同時利用低層特征高分辨率和高層特征的高語義信息,通過融合這些不同層的特征達到預測的效果。并且預測是在每個融合后的特征層上單獨進行的,這和常規的特征融合方式不同。

目前官方開源代碼尚未公布,網上有一部分開源代碼,如unsky/FPN-caffe:Feature Pyramid Network on caffe

參考文獻

  1. FPN-Feature Pyramid Networks for Object Detection [重點推薦]
  2. Feature Pyramid Networks for Object Detection論文筆記 [重點推薦]
  3. Feature Pyramid Networks for Object Detection 論文筆記
  4. 特征金字塔特征用于目標檢測:Feature Pyramid Networks for Object Detection [重點推薦]
  5. FPN(feature pyramid networks)算法講解
  6. 目標檢測–Feature Pyramid Networks for Object Detection
  7. unsky/FPN-caffe:Feature Pyramid Network on caffe
  8. FPN(Feature Pyramid Networks for Object Detection)安裝與訓練

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258601.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最近工作

最近的工作忙且亂,以至于,我第天早晨早早起來到晚上11點多才能回到家。今天早晨寫代碼的時候腰突然猛疼,疼的我直叫喚。躺在床上半天起不來。 最近每天的工作要計劃一下了,不能客戶說干嘛就干嘛,這樣累壞了自己&#x…

LeetCode OJ - Candy

題目: There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy.Children with a higher rating get mor…

那些 IT 界的神翻譯,原來我學不好編程的原因就在這

近日博主 ruanyf 在網上發布了一條關于套接字“socket”的解釋,引發了網友對于那些 IT 界的神翻譯的討論: 突然想到,socket就是插座。服務器的socket,就是服務器提供插座,等著客戶端的插頭插進來。一旦插入完成&#x…

navicat 結構同步會加鎖嗎_被柜員怠慢的張小波,真的會永久地轉走幾個億的結構性存款嗎?...

4月7日下午,北京鳳凰聯動文化傳媒有限公司總裁張小波發布微博稱,前幾天去安貞附近一銀行,想把借記卡的轉帳額度從每天五百萬上調一下,沒有想到,在其問到“最高可調到多少”時,柜員回答一個億并“鄙夷地看了…

Mask RCNN筆記

mask rcnn簡介 mask rcnn是何凱明基于以往的faster rcnn架構提出的新的卷積網絡,一舉完成了object instance segmentation. 該方法在有效地目標的同時完成了高質量的語義分割。 文章的主要思路就是把原有的Faster-RCNN進行擴展,添加一個分支使用現有的檢…

IOS開發之----常用函數和常數--秀清

介紹一下Objective-c常用的函數,常數變量 算術函數 【算術函數】函數名說明int rand()隨機數生成。(例)srand(time(nil)); //隨機數初期化int val rand()P; //0~49之間的隨機數int abs(int a)整數的絕對值(例&#…

網頁設計中常用的19個Web安全字體

來自http://www.jb51.net 在Web編碼中,CSS默認應用的Web字體是有限的,雖然在新版本的CSS3,我們可以通過新增的font-face屬性來引入特殊的瀏覽器加載字體。但多數情況下,考慮各個因素的影響我們還是在盡量充分利用這些默認調用的字…

python slice是共享內存嗎_python共享內存實現進程通信

1.概述共享內存可以說是最有用的進程間通信方式.兩個不同的進程共享內存的意思是:同一塊物理內存被映射到兩個進程的各自的進程地址空間.一個進程可以及時看到另一個進程對共享內存的更新,反之亦然.采用共享內存通信的一個顯而易見的好處效率高,因為進程可以直接讀寫內存,而不需…

FCN-數據篇

從本篇開始,我們來記錄一下全卷積網絡用來做語義分割的全過程。 代碼:https://github.com/shelhamer/fcn.berkeleyvision.org 下面我們將描述三方面的內容: 1. 官方提供的公開數據集 2. 自己的數據集如何準備,主要是如何標注…

深圳本地網店代運營公司

◆★◆深圳本地網店代運營,淘寶代運營多少錢,微博運營公司,代運營平臺,天貓京東代運營,網站代運營圖 片, 北京京東代運營,網店代運營協議,京東店鋪代運營,網站代運營服務…

搜索專題題解

題目鏈接: codeforces 277A - Learning Languages 題目描述: 一個團體有n個人,每個人都掌握了一些語言,每個人學一門語言有1個花費,兩個人之間可以通過其他人的翻譯,問最少花費多少使得這個團體的任意兩個人…

Facebook 開源的快速文本分類器 FastTex

FastText是Facebook開發的一款快速文本分類器,提供簡單而高效的文本分類和表征學習的方法,性能比肩深度學習而且速度更快。 fastText 原理fastText 方法包含三部分:模型架構、層次 Softmax 和 N-gram 特征。下面我們一一介紹。 1.1 模型架構 …

FCN-加載訓練與測試數據

當我們生成了數據后,我們來看看FCN是如何加載數據的。 FCN 代碼預覽 其中: - data : 訓練測試數據 - ilsvrc-nets:存放預訓練的模型 - 剩下的框:不同數據集的訓練測試prototxt - voc_layers,siftflow_layers等&am…

怎么撤銷定時說說_已注冊商標遇到撤三申請怎么辦

很多企業的商標都遇到過商標撤三的情況,撤三簡單的說就是,注冊商標沒有正當理由連續三年不使用的,任何單位或者個人可以向商標局申請撤銷該注冊商標。所以說,無論您的企業多大,商標持有的再多,也要做好商標…

windows下架設SVN服務器并設置開機啟動

1、安裝SVN服務器,到http://subversion.apache.org/packages.html上下載windows版的SVN,并安裝,在命令行下運行svn命令,如下所以,則svn服務器安裝成功。 C:\Documents and Settings\Administrator>svn 使用“svn …

Spartan-6 FPGA SelectIO Resources User Guide 筆記2 SelectIO Attributes/Constraints

1.Location Constraint 用于分配I/O端口 NET <I/O_NAME> LOC "<EXTERNAL_PORT_IDENTIFIER>"; Example: NET MY_IO LOCR7; 2.IOSTANDARD Attribute 用于選擇IO標準如LVCMOS25&#xff0c;LVDS_25等 NET <I/O_NAME> IOSTANDARD”<IOSTANDARD V…

python合并pdf 加書簽_Python生成pdf目錄書簽的實例方法

有時候我們用的一些pdf資料是沒有目錄的&#xff0c;這樣找尋我們想到的東西比較麻煩。本篇文章就為大家帶來python來生成pdf目錄書簽的方法。首先&#xff0c;我們需要下載一個軟件FreePic2Pdf,利用它我們可以將我們的pdf文件導入書簽工具下載&#xff1a;https://www.jb51.ne…

正則表達式及其在python上的應用

今天學習了一早上正則表達式。如下內容部分轉載自《讀懂正則表達式就這么簡單》 一、什么是正則表達式 正則表達式是一種特殊的字符串模式&#xff0c;用于匹配一組字符串&#xff0c;就好比用模具做產品&#xff0c;而正則就是這個模具&#xff0c;定義一種規則去匹配符合規…

安全專家在硬盤固件中發現NSA的網絡間諜程序

本周安全專家在硬盤固件中發現了美國國家安全局&#xff08;NSA&#xff09;的網絡間諜程序&#xff0c;這些程序非常難以被檢測或者刪除。來自卡巴斯基的研究者公布了該惡意程序用來“Phone Home”的URL地址&#xff0c;NSA利用這些隨機、凌亂的地址來收集硬盤上的敏感數據。 …

SVN 分支/合并/切換

本文無條理性&#xff0c;僅作自我參考。 花費了兩個半下午&#xff0c;走馬觀花的看了一下說明文檔&#xff0c;SVN設計的太復雜&#xff0c;對我這樣的&#xff0c;不在一個集體的的業余開發者&#xff0c;要理解起來真是太難了。。。。 分支 Make branches as often as yo…