基於深度學習的2D圖像目標檢測

參見第一部分網址1,第二部分網址2

目前學術和工業界出現的目標檢測算法分成3類:(參見一文讀懂目標檢測:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

1. 傳統的目標檢測算法:Cascade + HOG/DPM + Haar/SVM以及上述方法的諸多改進、優化;

2. 候選區域/框 + 深度學習分類:通過提取候選區域,並對相應區域進行以深度學習方法爲主的分類的方案,如:

R-CNN(Selective Search + CNN + SVM)、SPP-net(ROI Pooling)、Fast R-CNN(Selective Search + CNN + ROI)、Faster R-CNN(RPN + CNN + ROI)、R-FCN等系列方法;

3. 基於深度學習的迴歸方法:YOLO/SSD/DenseBox 等方法;以及最近出現的結合RNN算法的RRC detection;結合DPM的Deformable CNN等

(上圖總結這裏

傳統目標檢測流程:

1)區域選擇(窮舉策略:採用滑動窗口,且設置不同的大小,不同的長寬比對圖像進行遍歷,時間複雜度高)

2)特徵提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特徵魯棒性差)

3)分類器分類(主要有SVM、Adaboost等)

一、如何計算一個圖像的HOG特徵維數呢?


        Dalal提出的Hog特徵提取的過程:把樣本圖像分割爲若干個像素的單元(cell),把梯度方向平均劃分爲9個區間(bin),在每個單元裏面對所有像素的梯度方向在各個方向區間進行直方圖統計,得到一個9維的特徵向量,每相鄰的4個單元構成一個塊(block),把一個塊內的特徵向量聯起來得到36維的特徵向量,用塊對樣本圖像進行掃描,掃描步長爲一個單元。最後將所有塊的特徵串聯起來,就得到了人體的特徵。例如,對於64*128的圖像而言,每16*16的像素組成一個cell,每2*2個cell組成一個塊,因爲每個cell有9個特徵,所以每個塊內有4*9=36個特徵,以8個像素爲步長,那麼,水平方向將有7個掃描窗口,垂直方向將有15個掃描窗口。也就是說,64*128的圖片,總共有36*7*15=3780個特徵。

 

二、SVM

  1. 從零開始實現簡單的SVM分類器
  2. 書本—SVM分類器

三、DPM

DPM目標檢測算法

四、Selective Search

參見 

Selective Search原理及實現   

目標檢測之選擇性搜索-Selective Search

在目標檢測時,爲了定位到目標的具體位置,通常會把圖像分成許多子塊,然後把子塊作爲輸入,送到目標識別的模型中。分子塊的最直接方法叫滑動窗口法。滑動窗口的方法就是按照子塊的大小在整幅圖像上窮舉所有子圖像塊。這種方法產生的數據量想想都頭大。和滑動窗口法相對的是另外一類基於區域(region proposal)的方法。selective search就是其中之一!

首先通過簡單的區域劃分算法,將圖片劃分成很多小區域,再通過相似度和區域大小(小的區域先聚合,這樣是防止大的區域不斷的聚合小區域,導致層次關係不完全)不斷的聚合相鄰小區域,類似於聚類的思路。這樣就能解決object層次問題。

最後對於計算速度來說,只能說這個思路在相對窮舉,大大減少了後期分類過程中的計算量。
 

selective search首先, 過分割後基於顏色紋理等相似度合併,

然後,過分割、分層合併、建議區域排序

step0:生成區域集R,具體參見論文《Efficient Graph-Based Image Segmentation》
step1:計算區域集R裏每個相鄰區域的相似度S={s1,s2,…}
step2:找出相似度最高的兩個區域,將其合併爲新集,添加進R
step3:從S中移除所有與step2中有關的子集
step4:計算新集與所有子集的相似度
step5:跳至step2,直至S爲空

爲了保證能夠劃分的完全,對於相似度,作者提出了可以多樣化的思路,不但使用多樣的顏色空間(RGB,Lab,HSV等等),還有很多不同的相似度計算方法。

通過上述的步驟我們能夠得到很多很多的區域,但是顯然不是每個區域作爲目標的可能性都是相同的,因此我們需要衡量這個可能性,這樣就可以根據我們的需要篩選區域建議個數啦。

這篇文章做法是,給予最先合併的圖片塊較大的權重,比如最後一塊完整圖像權重爲1,倒數第二次合併的區域權重爲2以此類推。但是當我們策略很多,多樣性很多的時候呢,這個權重就會有太多的重合了,排序不好搞啊。文章做法是給他們乘以一個隨機數,畢竟3分看運氣嘛,然後對於相同的區域多次出現的也疊加下權重,畢竟多個方法都說你是目標,也是有理由的嘛。這樣我就得到了所有區域的目標分數,也就可以根據自己的需要選擇需要多少個區域了。
 

基於Selective Search + DPM/HoG + SVM的物體識別

 

五、bounding-box regression 框迴歸

  1. 邊框迴歸(Bounding Box Regression)詳解
  2. 一文看懂——檢測模型中的邊框迴歸(Bounding Box Regression)

 

線性迴歸就是給定輸入的特徵向量 X, 學習一組參數 W, 使得經過線性迴歸後的值跟真實值 Y(Ground Truth)非常接近. 即Y≈WXY≈WX 。 那麼 Bounding-box 中我們的輸入以及輸出分別是什麼呢?

Input:
RegionProposal→P=(Px,Py,Pw,Ph)RegionProposal→P=(Px,Py,Pw,Ph),這個是什麼? 輸入就是這四個數值嗎?其實真正的輸入是這個窗口對應的 CNN 特徵,也就是 R-CNN 中的 Pool5 feature(特徵向量)。 (注:訓練階段輸入還包括 Ground Truth, 也就是下邊提到的t∗=(tx,ty,tw,th)t∗=(tx,ty,tw,th))

Output:
需要進行的平移變換和尺度縮放 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P), 或者說是Δx,Δy,Sw,ShΔx,Δy,Sw,Sh 。 我們的最終輸出不應該是 Ground Truth 嗎? 是的, 但是有了這四個變換我們就可以直接得到 Ground Truth, 這裏還有個問題, 根據(1)~(4)我們可以知道, P 經過 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P) 得到的並不是真實值 G, 而是預測值G^G^。 的確, 這四個值應該是經過 Ground Truth 和 Proposal 計算得到的真正需要的平移量(tx,ty)(tx,ty) 和尺度縮放(tw,th)(tw,th) 。
 

六、R-CNN

  1. 裏最詳細說明
  2. R-CNN 論文解讀
  3. R-CNN文章詳細解讀
  4. R-CNN算法解析

  5. R-CNN 訓練

R-CNN的本質, 用深度CNN網絡取代了HoG/DPM的特徵提取

借鑑了滑動窗口思想,R-CNN 採用對區域進行識別的方案。

具體是:

  1. 給定一張輸入圖片,從圖片中提取 2000 個類別獨立的候選區域。
  2. 對於每個區域利用 CNN 抽取一個固定長度的特徵向量。
  3. 再對每個區域利用 SVM 進行目標分類。

R-CNN 系統分爲 3 個階段,反應到架構上由 3 個模塊完成。

  1. 生產類別獨立的候選區域,這些候選區域其中包含了 R-CNN 最終定位的結果。
  2. 神經網絡去針對每個候選區域提取固定長度的特徵向量。
  3. 一系列的 SVM 分類器。

Intersection over Union(IoU)

R-CNN優點:

  1. 效果比DPM方法大幅度提高

  2. 開啓了CNN網絡的目標檢測應用

  3. 引入了BBR和分類結合的思想

  4. 定義了RoI, 基於推薦區域的思想

 

R-CNN問題:

  1. 不是端到端的模型,依賴SS和SVM!

  2. 計算速度相當慢!

  3. 對於過大過小的東西,效果很不好。

  4.  

七、Overfeat的改進

LeCun的Overfeat是個端到端的模型,直接拋棄了SVM,並且把BBR整合一起使用FCN(Fully-Connected Net)搞定, 解決了後面一端的問題(取代了SVM和BBR)。 

三大優化:   第一, 先進行CNN再滑動窗口, 而不是先滑動窗口再進行CNN計算。 把窗口滑動放到CNN之後進行。 避免重複的特徵計算。 

 

 

 

第二, 多類別並行計算框架, 進一步減少CNN特徵計算因爲沒有找到特定類別而浪費。

 

第三, 把FCN直接用CNN網絡取代, 計算量大大減少。怎麼做到的呢? 結合上面兩點, 利用每個類別實現一個0-1的CNN網絡, 然後所有類別並行處理。

八、SPPNet的改進

R-CNN和Overfeat都存在部分多尺度,重疊效果的問題。  某種意義上, 應對了HoG特徵, 這樣對於物體來說類似BoW模型, 我們知道DPM裏面,是帶有組件空間分佈的彈性得分的, 另外也有HoG Pyramid的思想。 如何把Pyramid思想和空間限制得分加入改善多尺度和重疊的效果呢? MR-CNN裏面嘗試了區域增強, Overfeat裏面嘗試了多尺度輸入。 但是效果都一般。  這裏我們介紹另外一個技術Spatial Pyramid Matching, SPM。把空間和Pyramid結合的思想。 

SPM考慮空間信息,將圖像分成若干塊(sub-regions),分別統計每一子塊的特徵,最後將所有塊的特徵拼接起來,形成完整的特徵,這就是SPM中的Spatial。在分塊的細節上,採用了一種多尺度的分塊方法,即分塊的粒度越大越細(increasingly fine),呈現出一種層次金字塔的結構,這就是SPM中的Pyramid。
 

1. SPM

把BoW修改金字塔Pyramid方式進行空間限制,做特徵提取。 

 

2.  SPM用在CNN特徵之後,R-CNN裏面 SVM分類之前。 

 

 

3. 基於CNN的Pooling技術來實現SPM, 通過不同尺度的Pooling技術很容易就實現了CNN特徵的SPM特徵。 

 

4. 先特徵後區域的處理, 某種意義上取代了多尺度輸入,或者特徵增強。

和R-CNN相比做到了先特徵後區域, 和Overfeat相比自帶Multi-Scale。 

 

於是SPPNet(Spatial Pyramid Pooling Net)很空出世!

上圖spp layer分成1x1(塔底),2x2(塔中),4x4(塔頂)三張子圖,對每個子圖的每個區域作max pooling(論文使用的),出來的特徵再連接到一起,就是(16+4+1)x256的特徵向量。

無論輸入圖像大小如何,出來的特徵固定是(16+4+1)x256維度。這樣就實現了不管圖像尺寸如何,SPP層的輸出永遠是(16+4+1)x256特徵向量。
 

SPPNet優點:

  1. 提取SPP的概念, 把CNN的Pooling用的出神入化, 取代了HoG Pyramid的改進。 對於大小尺度的物體識別有改進。 

  2. 進一步強調了CNN特徵計算前移, 區域處理後移的思想, 極大節省計算量。 

 

SPPNet缺點:

   1. 依然不是端到端的模型

   2. 過於注重CNN特徵的分離, CNN特徵提取沒有聯動調參數!

 

九、Fast R-CNN的改進

 

Fast R-CNN 基本和SPPNet類似, 全部打通區域推薦之後到目標識別後一端!而且效果較好!

 

 

基於SPPNet, Fast R-CNN做了兩大改進: 

一, 簡化SPP成爲RoI Pooling, 只用了最細分的SPPNet。  把RoI區域變成了RoI Pooling, 這就是RoI Pooling的思想的來源。 Pyramid上層更粗的特徵, 可以依賴FCN進行整合學習。 

 

 

二, CNN特徵網絡聯動調參數!

 

這樣, Softmax分類誤差和線性迴歸誤差疊加的誤差, 可以反傳通過FCN, ROI Pooling和ConvNet層。 

 

 

ROI池化層

    爲了說清楚爲什麼ROI池化層能夠把任意大小的卷積特徵轉換成固定長度的向量,不妨設卷積層輸出的寬度爲w,高度爲h,通道爲c。不管輸入的圖像尺寸是多少,卷積層的通道數都不會變,也就是說c是一個常數。而w、h會隨着輸入圖像尺寸的變化而變化,可以看作是兩個變量。以上圖中的ROI池化層爲例,它首先把卷積層劃分爲4x4的網格(利用SPM分塊形成固定長度的特徵向量),每個網格的寬是w/4、高是h/4、通道數爲c。當不能整除時,需要取整。接着,對每個網格中的每個通道,都取出其最大值,換句話說,就是對每個網格內的特徵做最大值池化(Max Pooling )。這個4x4的網格最終就形成了16c維的特徵。接着,再把網絡劃分成2x2的網格,用同樣的方法提取特徵,提取的特徵的長度爲4c。再把網絡劃分爲1x1的網格,提取的特徵的長度就是c,最後的1x1的劃分實際是取出卷積中每個通道的最大值。最後,將得到的特徵拼接起來,得到的特徵是16c+4c+c = 21c維的特徵。很顯然,這個輸出特徵的長度與w, h兩個值是無關的,因此ROI池化層可以把任意寬度、高度的卷積特徵轉換爲固定長度的向量。

 

    應該怎麼把ROI池化層用到目標檢測中來呢,其實,可以這樣考慮該問題:網絡的輸入是一張圖像,中間經過若干卷積形成了卷積特徵,這個卷積特徵實際上和原始圖像在位置上是有一定對應關係的。原始圖像的目標會使得卷積特徵在同樣位置產生激活。因此,原始圖像中的候選框,實際上也可以對應到卷積特徵中相同位置的框。由於候選框的大小千變萬化,對應到卷積特徵的區域形狀也各有不同,但是不用擔心利用ROI池化層可以把卷積特徵中的不同形狀的區域對應到同樣長度的向量特徵。綜合上述步驟,就可以將原始圖像中的不同長寬的區域都對應到一個固定長度的向量特徵,這就完成了各個區域的特徵提取工作。

    在R-CNN中,對於原始圖像的各種候選區域框,必須把框中的圖像縮放到統一大小,再對每一張縮放後的圖片提取特徵。使用ROI池化層後,就可以先對圖像進行一遍卷積計算,得到整個圖像的卷積特徵;接着,對於原始圖像中的各種候選框,只需要在卷積特徵中找到對應的位置框,再使用ROI池化層對位置框中的卷積提取特徵,就可以完成特徵提取工作。

RoI層是個啥
RoI層的作用和SPPNet中的SPP層作用類似:承上啓下。

承上: 接收在每個候選區域在feature map上投影出的特徵patch,輸出長度固定的特徵向量。
啓下: 特徵向量的長度固定的原因爲了對付FC層的特殊要求。
說白了就是如何把不同尺寸的侯選區域提取特徵變換成爲固定大小的特徵向量。

RoI層是特殊的SPP層,RoI層是使用單個尺度的SPP層(爲什麼不用多個尺度的原因是多個尺度準確率提升不高,但是計算量成倍的翻)

RoI層的Forward
引用shenxiaolu1984.

RoI層將候選區域分爲H×WH×W塊。對每個小塊做max-pooling.將候選區的局部特徵映射轉變爲大小統一的數據,送入下一層。


 

 

Fast R-CNN優點:

  1. 吸收了SPPNet和R-CNN的精華,極大的打通並且改進了從區域推薦到目標檢測一端。 

  2. RoI Pooling技術橫空出世, 極大的發揮了區域計算後移的優勢, 加快了訓練速度。

  3. Log 損失和Smooth L1的損失下的FCN、RoI Pooling、ConvNet三層聯動調參數成熟, 並且帶來效果上的提升。  

  4. 並且應用VGG16,取代AlexNet作爲CNN網絡模型

Fast R-CNN缺點:

  1. 依然沒有實現端到端的模型,對SS區域推薦依賴嚴重。 

 

 

 

十、Faster R-CNN的改進

  1. Faster R-CNN論文筆記——FR

SPPNet和Fast R-CNN都面臨着並非端到端模型的困惑, 那麼RBG、何凱明和孫劍, 微軟的3位牛人合作開啓了端到端模型的開發。 

提出RPN(Region Proposal Net)取代了SS區域推薦。 RPN有點類似Overfeat的ConvNet的滑動窗口, 但是加入了Anchor Box的設計。 

 RPN還是需要先使用一個CNN網絡對原始圖片提取特徵。爲了方便讀者理解,不妨設這個前置的CNN提取的特徵爲51 x39x256,即高爲51、寬39、通道數爲256。對這個卷積特徵再進行一次卷積計算,保持寬、高、通道不變,再次得到一個51x39x256的特徵。爲了方便敘述,先來定義一個“位置”的概念:對於一個51x39x256的卷積特徵,稱它一共有51x39個“位置”。讓新的卷積特徵的每一個“位置”都“負責”原圖中對應位置9種尺寸的框的檢測,檢測的目標是判斷框中是否存在一個物體,因此共有51x39x9個“框”。在Faster R-CNN的原論文中,將這些框都統一稱爲“anchor"

ancho:的9種尺寸,它們的面積分別128*128, 256*256, 512*512。每種面積又分爲3種長寬比,分別是2:1, 1:2, 1:1。 anchor的尺寸實際是屬於可調的參數,不同任務可以選擇不同的尺寸。

    對於這51x39個位置和51x39x9個anchor,下圖展示了接下來每個位置的計算步驟。設k爲單個位置對應的ancho:的個數,此時k=9。首先使用一個3x3的滑動窗口,將每個位置轉換爲一個統一的256維的特徵,這個特徵對應了兩部分的輸出。一部分表示該位置的anchor爲物體的概率,這部分的總輸出長度爲2xk(一個anchor對應兩個輸出:是物體的概率+不是物體的概率)。另一部分爲框迴歸,框迴歸的含義與Fast R-CNN中一樣。一個anchor對應4個框迴歸參數,因此框迴歸部分的總輸出的長度爲4xk。
 

上圖中可以看到,在feature map上會有一個sliding window,這個sliding window會遍歷feature map上的每一個點,並且在每個點上配置k個anchor boxes。

在Overfeat的ConvNet上的滑動窗口, 加上Multi-Scale的圖像輸入設計, 編程了帶Anchor Box推薦的區域Pyramid。 這種機制, 某種意義上是帶了先驗的Attention機制。 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

這樣 RPN的Anchor和Pyramid和定位都可以是參數學習, 例如:9 anchors x 2 scores x width x height。 

如果在考慮ROI Pooling對推薦區域的修正作爲新的RPN,就會帶來ROI Pooling的迭代:

 

Anchors  (RPN介紹)


在每一個滑動窗口的位置,我們同時預測k個推薦區域,故迴歸層有4k個輸出(每個侯選區域是一個元素個數爲4的元組(2個座標))。分類層輸出2k個得分(即對每個推薦區域是目標/非目標的估計概率)

k個推薦區域對應着k個參考框的參數形式,我們稱之爲anchors.每個anchor以當前滑動窗口的中心爲中心,並與尺度和長寬比相關。默認地我們使用3種尺度和3種長寬比,對於每個滑動位置就有k=9個anchor。對於大小爲W×H(例如2,400)的卷積特徵映射,總共有WHk個anchor。

特徵可以看做一個尺度51*39的256通道圖像,對於該圖像的每一個位置,考慮9個可能的候選窗口:三種面積{128^2,256^2,512^2}× 三種長寬比例{1:1,1:2,2:1} 下圖示出51*39個anchor中心,以及9種anchor示例。

分類層(cls_score)輸出每一個位置上,9個anchor屬於前景和背景的概率;窗口迴歸層(bbox_pred)輸出每一個位置上,9個anchor對應窗口應該平移縮放的參數。
對於每一個位置來說,分類層從256維特徵中輸出屬於前景和背景的概率;窗口迴歸層從256維特徵中輸出4個平移縮放參數。

就局部來說,這兩層是全連接網絡;就全局來說,由於網絡在所有位置(共51*39個)的參數相同,所以實際用尺寸爲1×1的卷積網絡實現。

需要注意的是:並沒有顯式地提取任何候選窗口,完全使用網絡自身完成判斷和修正。

侯選區域生成網絡的訓練

訓練數據

對每個anchor給定標籤選項,認定兩種anchors爲正樣本:

anchor/anchors與ground-truth box有着最高的IoU記爲正樣本
剩下的anchor/anchors與任何ground-truth box的IoU大於0.7記爲正樣本,IoU小於0.3,記爲負樣本
剩下的anchor/anchors記爲非正樣本,對訓練沒有貢獻,不使用
同一個ground-truth可以確定多個anchors.
 

所以最初,  RPN的損失是單獨計算進行參數學習的。 

 

但是後來, RPN的誤差也全部整合處理了, 一個端到端的模型誕生,並且具有較好的區域推薦、特徵Pyramid,和Box迴歸的效果保證。 

 

Faster R-CNN優點:

  1. 和Overfeat一樣是一個端到端的模型, 但是集成了以前圖像處理裏面的思想: 區域推薦RPN, 特徵Pyramid和Box迴歸。

  2. 較好的ConvNet特徵共享, 效率更高

  3. 提出了RPN網絡,並且整合後的效果和Fast R-CNN一樣

Faster R-CNN缺點:

  1. 依然難以做到實時高效

  2. 功能上沒有進入實例分割階段。 

 

小結

最後總結一下各大算法的步驟:

RCNN

1.在圖像中確定約1000-2000個候選框 (使用選擇性搜索Selective Search)

2.每個候選框內圖像塊縮放至相同大小,並輸入到CNN內進行特徵提取

3.對候選框中提取出的特徵,使用分類器判別是否屬於一個特定類

4.對於屬於某一類別的候選框,用迴歸器進一步調整其位置

Fast R-CNN

1.在圖像中確定約1000-2000個候選框 (使用選擇性搜索)

2.對整張圖片輸進CNN,得到feature map

3.找到每個候選框在feature map上的映射patch,將此patch作爲每個候選框的卷積特徵輸入到SPP layer和之後的層

4.對候選框中提取出的特徵,使用分類器判別是否屬於一個特定類

5.對於屬於某一類別的候選框,用迴歸器進一步調整其位置

Faster R-CNN

1.對整張圖片輸進CNN,得到feature map

2.卷積特徵輸入到RPN,得到候選框的特徵信息

3.對候選框中提取出的特徵,使用分類器判別是否屬於一個特定類

4.對於屬於某一類別的候選框,用迴歸器進一步調整其位置

簡言之,即如本文開頭所列

R-CNN(Selective Search + CNN + SVM)

SPP-net(ROI Pooling)

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

Faster R-CNN(RPN + CNN + ROI)

總的來說,從R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走來,基於深度學習目標檢測的流程變得越來越精簡,精度越來越高,速度也越來越快。可以說基於region proposal的R-CNN系列目標檢測方法是當前目標檢測技術領域最主要的一個分支。

 

我們發現, 單純的端到端ConvNet模型的Overfeat很難達到較好的效果。 如何融合圖像處理經典思想裏面的區域推薦, 特徵金字塔, 和框迴歸,還是非常有必要。 而Faster R-CNN做到了這些。  這個過程中一直伴隨着性能的提升, 其中重要一步就是如何讓特徵計算不要重複,做到一次計算。 如何進一步提高速度, 和增強功能, 是後續網絡的要改進的地方。 例如, 我們發現ConvNet的計算在Faster R-CNN已經達到很高的共享, 但是ROI之後依然有ConvNet的計算, 如何進一步共享這部分計算呢? 請看下期。 

 

在如何讓檢測更快? 主要有兩種思路:

1. 把好的方法改進的更快!

前面我們提到了從R-CNN到Faster R-CNN主要的技術思想就是避免特徵計算浪費。 所以要把ConvNet特徵計算前移,只做一次計算。 而把區域操作後移。 我們也提到Faster R-CNN在RoI之後還有部分ConvNet的計算。 有沒有可能把ROI之上的計算進一步前移? R-FCN(Region-based Fully Convolutional Networks) 基於這個思路,做到了,所以更快, 某種意義上,是Fatest R-CNN。

R-FCN

2. 把快的方法,改進的更好!

前面我們談到overfeat的效果一般, 但是overfeat基於滑動窗口和迴歸思想的速度很快。 從效果上來說, overfeat 的效果一般, 對於重疊情況很多不能識別的情況。 如何將基於迴歸的思想,做到逼近區域推薦的效果?YOLO把分而治之和IoU的思想集成進來了。 而SSD把多尺度Anchor Box的思想集成進來了。

除了快還有什麼?當然是做優做強

Faster R-NN有三大主要部件, RPN 做區域推薦, RoI Pooling類似特徵Pyramid,改善極大極小重疊, 分類和Box迴歸的Log 加 Smoothed L1 損失, 針對定位修正。 如何要做優做強?

能否比RPN做的更優?

前面我們提到RPN能夠達到Selective Search的效果, 那麼假如還要更好, 怎麼能夠做到?AttractioNet利用了NMS(non-maxima suppression)效果。 AttentionNet利用了弱注意力集中的機制。

能否比RoI Pooling做的更優?

前面我們提到RoI Pooling能夠做到和HoG Pyramid和DPM空間限制類似的SPM(Spatial Pyramid Matching)的效果, 那麼加入還要更好, 怎麼能夠做到? ION(Inside-Outside Net)提出了四方向上下文的思想, FPN提出了特徵Pyramid網絡

能否比RoI Pooling做的更強?

前面我們提到RoI Pooling是建立在RoI基礎上的, 對應的區域推薦, 如何進一步對齊到像素點? Mask R-CNN提出了RoI Align的思想。 在誤差計算中,除了分類, Box迴歸基礎上再加入像素點Mask Branch距離的思想。

那麼,什麼是FCN(Fully Convolutional Networks), IoU, NMS, Weak Attention
Narrowing, ION, FPN, RoI Align 和 Mask Branch思想?理解了這些, 你對下面這個圖,就不再陌生!

 

 

下面, 開啓下半場的路程!

 

十一、R-FCN

參考:

  1. 『計算機視覺』R-FCN:Object Detection via Region-based Fully Convolutional Networks

前面我們提到, Faster R-CNN打通前後端成爲端到端的模型的同時, ConvNet模型也換成了VGG-16的模型。 但是在GoogLeNet和ResNet網絡結構上, 全連接FC層就只有一層了, 最後一層,爲Softmax分類服務了。

 

那麼, 如果要把GoogLeNet和ResNet應用到Faster R-CNN中去,就面臨一個現象,去掉最後一層FC層, 因爲那是用來做分類的。 需要換到新的尾部網絡, 能夠兼容分類和Box迴歸。

 

 

這樣, 我們再來看RoI Pooling的使用, 那麼RoI Pooling後面的FC層也要換成卷積層。 這樣, 卷積層就被RoI Pooling層隔斷了。 而且這種隔斷使得RoI Pooling後面的ConvNet重複計算了。

 

 

 

一個問題,能不能直接把後面FCs變成ResNet之後的ConvNet直接丟棄? 不行, 這樣的效果會打折扣, 爲什麼? 我們在Fast R-CNN繼承SPPNet的SPM技術, 演繹出RoI Pooling的時候講了,RoI Pooling只是相當於最細分的區域固定, 那麼粗粒度的部分, 可以由後續的多層FCs來達到類似的效果。 如果去掉, 就少了金字塔結構了,或者少了深度了。

 

那麼, 如何把RoI後面的卷積計算也移到前面去?就是R-FCN解決的問題!一方面要保留空間限制, 另一方面要有一定特徵層次。 R-FCN提出了Position-Sensitive RoI Pooling

Position-Sensitive RoI Pooling的思想, 正式將位置並行起來, 是一種結合了空間信息的的注意力機制。 每個小的子框數據來源一個和特點位置綁定的ConvNet特徵層。

  1. 具體網絡設計說明參見這裏

 

一旦和位置綁定了,那麼特徵計算, 就從以前的中心點, 變成了一系列從上下左右的不同子框去看的特徵圖。 那麼再把這些組合起來。 即暗含了不同空間信息。類別的說,就是你先上下左右的看這個山峯, 回頭把看的拼接起來, 判斷山峯有沒有認錯。 選擇好不同位子的特徵,再整合起來, 得到在不同位子點確認的特徵, 再做Pooling, 通過Pooling進行投票。

 

這樣的效果就是,把特徵計算放在前面, 而把位置信息拼接投票放在最後處理。 而不是先通過位置劃出特徵, 然後把帶位置的特徵先融合,再做分類和迴歸。 這裏直接進行位置投票。 要注意的PS RoI Pooling和RoI Pooling並不是一個Pooling。

R-FCN優點:

  1. 清楚的關聯了速度提升和ConvNet特徵共享的關係。
  2. 通過不同位置爲注意力的並行特徵計算,再極好的利用Pooling來投票, 取代了RoI Pooling後續計算的計算要求。
  3. 速度快, 效果好的均衡下的推薦選擇。

R-FCN問題:

  1. 依然無法實現視頻基本的實時(每秒24幀圖像)。
  2. 功能上沒有涉及到像素級別的實例分割

 

 

十二、YOLO

參考

  1. 圖解YOLO
  2. You Only Look Once(YOLO):Unified, Real-Time Object Detection

  3. YOLO系列,YOLOv1 的大腦、軀幹和手腳

YOLO核心思想:從R-CNN到Fast R-CNN一直採用的思路是proposal+分類 (proposal 提供位置信息, 分類提供類別信息)精度已經很高,但是速度還不行。 YOLO提供了另一種更爲直接的思路: 直接在輸出層迴歸bounding box的位置和bounding box所屬的類別(整張圖作爲網絡的輸入,把 Object Detection 的問題轉化成一個 Regression 問題)。

大致流程:

  1. Resize成448*448,圖片分割得到7*7網格(cell)
  2. CNN提取特徵和預測:卷積不部分負責提特徵。全鏈接部分負責預測:a) 7*7*2=98個bounding box(bbox) 的座標 和是否有物體的confidence 。 b) 7*7=49個cell所屬20個物體的概率。
  3. 過濾bbox(通過nms)
  • 每個網格要預測B個bounding box(圖中黃色實線框),每個bounding box除了要回歸自身的位置之外,還要附帶預測一個confidence值。 
    這個confidence代表了所預測的box中含有object的置信度和這個box預測的有多準兩重信息,其值是這樣計算的: 
     
    其中如果有object落在一個grid cell裏,第一項取1,否則取0。 第二項是預測的bounding box和實際的groundtruth之間的IoU值。

  • 每個bounding box要預測(x, y, w, h)和confidence共5個值,每個網格還要預測一個類別信息,記爲C類。則SxS個網格,每個網格要預測B個bounding box還要預測C個categories。輸出就是S x S x (5*B+C)的一個tensor。 
    注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的。

    • 每個網格還要預測類別信息,論文中有20類。7x7的網格,每個網格要預測2個 bounding box 和 20個類別概率,輸出就是 7x7x(5x2 + 20) 。 (通用公式: SxS個網格,每個網格要預測B個bounding box還要預測C個categories,輸出就是S x S x (5*B+C)的一個tensor。 注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的)
  •  

 

損失函數如下所示:

這樣YOLO的損失函數考慮了, 1)框迴歸, 2)是否有物體, 和有哪個物體, 3)另外就是區域最合適的物體。

 

 

其實,我們前面提到了Overfeat效果不好, 一個很大原因就是Overfeat沒有專門爲了提高召回率的區域推薦機制。
而有區域推薦RPN的Faster R-CNN慢的一個重要原因,就是RPN的計算量基本也夠計算Overfeat了。 所以它是兩個階段。

O
 

前面我們提到, Faster R-CNN 已經很快了, 但是做不到實時, 因爲視頻要求1秒24幀以上。 既然YOLO很快, 那麼必然用到視頻中去了。 如果再視頻中, 還可以進一步優化YOLO到Fast YOLO更快。 更快,就是共享! 對的, 共享了類別的概率圖Class Prob. Map。 通過修正而不是重新學習。 所以更快!

 

 

 

YOLO優點:

1. 典型的迴歸加分類模型和單一的CNN網絡

2. 分治思想很好

3. 實時性很好, 基本上接近1秒24幀的標準。

4. 比Select Search找的框少很多(區域推薦更看重召回率)

 

YOLO問題:

1. 準確率不高, 不如Faster R-CNN和R-FCN

2. 小物體,不規則物體識別差

3. 定位精度不高

 

十三、YOLO-v2(YOLO9000: Better, Faster, Stronger)

參考

  1. YOLO2

  2. YOLO2原理理解
  3. YOLOv2 論文筆記

  4. YOLO,YOLO2學習

  5. 目標檢測|YOLOv2原理與實現(附YOLOv3)

  6. yolo-nano詳解

OLO改進策略:

1.Bath Nomalization

        Bath Nomalization可以提升模型收斂速度,而且可以起到一定正則化效果,降低模型的過擬合。

        YOlLOv2中,在每個卷積後面都添加了Bathch Normalization層,並且不再使用droput,mAP提升了2.4%

2.High Resolution Classifier

        目前大部分的檢測模型都會在先在ImageNet分類數據集上預訓練模型的主體部分(CNN特徵提取器),ImageNet分類模型基本採用大小爲 224*224 的圖片作爲輸入,分辨率相對較低,不利於檢測模型。

      YOLOv1在採用 224*224 分類模型預訓練後,將分辨率增加至 448*448 ,並使用這個較高分辨率在檢測數據集上finetune。但是直接切換分辨率,檢測模型可能難以快速適應高分辨率。

       因此,YOLOv2增加了在ImageNet數據集上使用 448*448 輸入來finetune分類網絡這一中間過程(10 epochs),這可以使得模型在檢測數據集上finetune之前已經適用高分辨率輸入。使用高分辨率分類器後,YOLOv2的mAP提升了約4%。

3.Convolutional With Anchor Boxes

        在YOLOv1中,輸入圖片被劃分爲 7*7 網格,每個單元格預測2個邊界框。YOLOv1最後採用的是全連接層直接對邊界框進行預測,其中邊界框的寬與高是相對整張圖片大小的,而由於各個圖片中存在不同尺度和長寬比(scales and ratios)的物體,YOLOv1在訓練過程中學習適應不同物體的形狀是比較困難的,這也導致YOLOv1在精確定位方面表現較差。

          YOLOv2借鑑了RPN網絡的先驗框(anchor boxes,prior boxes,SSD也採用了先驗框)策略。RPN對CNN特徵提取器得到的特徵圖(feature map)進行卷積來預測每個位置的邊界框以及置信度(是否含有物體),並且各個位置設置不同尺度和比例的先驗框,RPN預測的是邊界框相對於先驗框的offsets值(其實是transform值,詳細見Faster R_CNN論文),採用先驗框使得模型更容易學習。

       YOLOv2移除了YOLOv1中的全連接層而採用了卷積和anchor boxes來預測邊界框。爲了使檢測所用的特徵圖分辨率更高,移除其中的一個pool層。在檢測模型中,YOLOv2不是採用 448*448 圖片作爲輸入,而是採用 416*416 大小。因爲YOLOv2模型下采樣的總步長爲 32 ,對於 416*416 大小的圖片,最終得到的特徵圖大小爲 13*13 ,維度是奇數,這樣特徵圖恰好只有一箇中心位置。對於一些大物體,它們中心點往往落入圖片中心位置,此時使用特徵圖的一箇中心點去預測這些物體的邊界框相對容易些。所以在YOLOv2設計中要保證最終的特徵圖有奇數個位置。

       對於YOLOv1,每個cell都預測2個boxes,每個boxes包含5個值: (x, y, w, h, c) ,前4個值是BBox位置與大小,最後一個值是置信度(confidence scores,包含兩部分:含有物體的概率以及BBox與ground truth的IOU)。但是每個cell只預測一套分類概率值(class predictions,其實是置信度下的條件概率值),供2個boxes共享。YOLOv2使用了anchor boxes之後,每個位置的各個anchor box都單獨預測一套分類概率值,這和SSD比較類似(但SSD沒有預測置信度,而是把background作爲一個類別來處理)。

4.Dimension Clusters

     在Faster R-CNN和SSD中,先驗框的維度(長和寬)都是手動設定的,帶有一定的主觀性。如果選取的先驗框維度比較合適,那麼模型更容易學習,從而做出更好的預測。因此,YOLOv2採用k-means聚類方法對訓練集中的groud truth做了聚類分析。因爲設置先驗框的主要目的是爲了使預測的BBox與ground truth的IOU更高,所以聚類分析時選用box與聚類中心box之間的IOU值作爲距離指標: 

 

如何進一步提高YOLO的準確度呢?記得RPN裏面利用了各種框的長寬比先驗知識麼? Anchor Box(根據特徵點標記9種框,然後進行迴歸計算)。 大概5種左右的框就佔據了60%的情況。

5.New Network:Darknet-19

6.Direct location prediction

       YOLOv2棄用了這種預測方式,而是沿用YOLOv1的方法,就是預測邊界框中心點相對於對應cell左上角位置的相對偏移值,爲了將邊界框中心點約束在當前cell中,使用sigmoid函數處理偏移值,這樣預測的偏移值在(0,1)範圍內(每個cell的尺度看做1)。總結來看,根據邊界框預測的4個offsets(tx,ty,tw,th),可以按如下公式計算出邊界框實際位置和大小:

這樣,把單純的框預測, 變成帶先驗的框預測, 就是長度和寬度擁有一定的先驗。

 

7.Fine-Grained Feature

        YOLOv2的輸入圖片大小爲 416*416 ,經過5次maxpooling之後得到 13*13 大小的特徵圖,並以此特徵圖採用卷積做預測。 13*13 大小的特徵圖對檢測大物體是足夠了,但是對於小物體還需要更精細的特徵圖(Fine-Grained Features)。因此SSD使用了多尺度的特徵圖來分別檢測不同大小的物體,前面更精細的特徵圖可以用來預測小物體。YOLOv2提出了一種passthrough層來利用更精細的特徵圖。

其他一系列改進技巧, 使得YOLOv2 要比YOLO好!你會看到下面, 提升最大的是dimension priors。 所以尺度計算一個先驗

YOLO9000, 分層的物體標籤實現wordtree。

 

YOLO-v2優點:

1. 引入BN(Batch normalization) (%2 mAP改進)

2. 高分辨率圖片(448x448), 改善小物體識別 (4% mAP改進)

3. 更細化的分塊(13x13) (1% mAP改進)

4. 引入Anchor框 ( K-means ) (81% 召回 到 88% 召回)

YOLO-9000優點:

5. 分層的結果標籤 COCO ImageNet

 

 

YOLO-v2問題:

1. 沒有實現實例分割。

 

 

 


YOLO3

yolo官方網站](https://pjreddie.com/darknet/

參考

  1. yolo系列之yolo v3【深度解析】

  2. YOLOv3 深入理解

  3. 從零開始PyTorch項目:YOLO v3目標檢測實現(上)

不考慮神經網絡結構細節的話,總的來說,對於一個輸入圖像,YOLO3將其映射到3個尺度的輸出張量,代表圖像各個位置存在各種對象的概率。

我們看一下YOLO3共進行了多少個預測。對於一個416*416的輸入圖像,在每個尺度的特徵圖的每個網格設置3個先驗框,總共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 個預測。每一個預測是一個(4+1+80)=85維向量,這個85維向量包含邊框座標(4個數值),邊框置信度(1個數值),對象類別的概率(對於COCO數據集,有80種對象)。

對比一下,YOLO2採用13*13*5 = 845個預測,YOLO3的嘗試預測邊框數量增加了10多倍,而且是在不同分辨率上進行,所以mAP以及對小物體的檢測效果有一定的提升。

 

YOLO v3主要有幾個改進點,還是非常讚的:

1、類別預測方面主要是將原來的單標籤分類改進爲多標籤分類,因此網絡結構上就將原來用於單標籤多分類的softmax層換成用於多標籤多分類的邏輯迴歸層。首先說明一下爲什麼要做這樣的修改,原來分類網絡中的softmax層都是假設一張圖像或一個object只屬於一個類別,但是在一些複雜場景下,一個object可能屬於多個類,比如你的類別中有woman和person這兩個類,那麼如果一張圖像中有一個woman,那麼你檢測的結果中類別標籤就要同時有woman和person兩個類,這就是多標籤分類,需要用邏輯迴歸層來對每個類別做二分類。

2、採用多個scale融合的方式做預測。原來的YOLO v2有一個層叫:passthrough layer,假設最後提取的feature map的size是13*13,那麼這個層的作用就是將前面一層的26*26的feature map和本層的13*13的feature map進行連接,有點像ResNet。當時這麼操作也是爲了加強YOLO算法對小目標檢測的精確度。這個思想在YOLO v3中得到了進一步加強,在YOLO v3中採用類似FPN的upsample和融合做法(最後融合了3個scale,其他兩個scale的大小分別是26*26和52*52),在多個scale的feature map上做檢測,對於小目標的檢測效果提升還是比較明顯的。雖然在YOLO v3中每個grid cell預測3個bounding box,看起來比YOLO v2中每個grid cell預測5個bounding box要少,其實不是!因爲YOLO v3採用了多個scale的特徵融合,所以boundign box的數量要比之前多很多,以輸入圖像爲416*416爲例:(13*13+26*26+52*52)*3和13*13*5相比哪個更多應該很清晰了。

3、關於bounding box的初始尺寸還是採用YOLO v2中的k-means聚類的方式來做,不過數量變了。這種先驗知識對於bounding box的初始化幫助還是很大的,畢竟過多的bounding box雖然對於效果來說有保障,但是對於算法速度影響還是比較大的。作者在COCO數據集上得到的9種聚類結果:(10*13); (16*30); (33*23); (30*61); (62*45); (59*119); (116*90); (156*198); (373*326),這應該是按照輸入圖像的尺寸是416*416計算得到的。

4、網絡結構(Darknet-53)一方面基本採用全卷積(YOLO v2中採用pooling層做feature map的sample,這裏都換成卷積層來做了),另一方面引入了residual結構(YOLO v2中還是類似VGG那樣直筒型的網絡結構,層數太多訓起來會有梯度問題,所以Darknet-19也就19層,因此得益於ResNet的residual結構,訓深層網絡難度大大減小,因此這裏可以將網絡做到53層,精度提升比較明顯)。Darknet-53只是特徵提取層,源碼中只使用了pooling層前面的卷積層來提取特徵,因此multi-scale的特徵融合和預測支路並沒有在該網絡結構中體現。

 

十四、SSD

  1. SSD詳解
  2. SSD原理解讀-從入門到精通
  3. 知乎SSD

和Anchor Box思想和Pyramid思想一致, 引入多尺度和多默認比例。

 

SSD算法步驟:

1. 輸入一幅圖片(200x200),將其輸入到預訓練好的分類網絡中來獲得不同大小的特徵映射,修改了傳統的VGG16網絡;

將VGG16的FC6和FC7層轉化爲卷積層,如圖1上的Conv6和Conv7;
去掉所有的Dropout層和FC8層;
添加了Atrous算法(hole算法),參考該鏈接
將Pool5從2x2-S2變換到3x3-S1;
2. 抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層的feature map,然後分別在這些feature map層上面的每一個點構造6個不同尺度大小的BB,然後分別進行檢測和分類,生成多個BB,如圖1下面的圖所示;

3. 將不同feature map獲得的BB結合起來,經過NMS(非極大值抑制)方法來抑制掉一部分重疊或者不正確的BB,生成最終的BB集合(即檢測結果);
傳統算法與SSD算法的思路比較:

對於BB的生成,Faster-rcnn和SSD有不同的策略,但是都是爲了同一個目的,產生不同尺度,不同形狀的BB,用來檢測物體。對於Faster-rcnn而言,其在特定層的Feature map上面的每一點生成9個預定義好的BB,然後進行迴歸和分類操作進行初步檢測,然後進行ROI Pooling和檢測獲得相應的BB;而SSD則在不同的特徵層的feature map上的每個點同時獲取6個不同的BB,然後將這些BB結合起來,最後經過NMS處理獲得最後的BB。


 

多尺度CNN網絡採用類似GoogLeNet的那種分層輸出模式。

 

 

所以結合起來,就有了SSD如下網絡:

從SSD的網絡可以看到, 這個多尺度是並行實現的。

 

SSD優點:

1. 在YOLO基礎上引入多尺度特徵映射, 並且分成ConvNet並行實現

2. 引入Anchor Box機制

3. 和YOLO比效果更好, 速度更快

 

SSD問題:

1. 效果很難突破R-FCN和Faster R-CNN

 

 

 

十五、AttentionNet(沒有看太懂,以後再看)

  1. 論文
  2. 遍地開花的 Attention ,你真的懂嗎?

  3. AttentionNet 詳解
  4. 目前主流的attention方法都有哪些

  5. 深度學習之Attention Mechanism

主力集中的思想比較簡單:

在調整 Bounding Box 的位置時,大多數算法使用的都是以迴歸類型的損失,直接優化最後的 Bounding Box 的座標值。通過這種方法得到的座標值準確性可能不會很高。我們可以仔細思考動物的視覺鎖定一個目標的過程,首先大體看一張圖片,對於要找到的物體,我們會有一個大致的方位。然後注意力會向那個物體的大致方向轉移,直到鎖定目標。
  AttentionNet 就可以理解爲模仿動物視覺的這樣一個過程。它是通過不斷迭代的方法直到找到最後的 Bounding Box。同時 AttentionNet 也是一個一體的對象檢測網絡,它不需要分離任何的模型進行單獨的訓練。
 

我們來看圖 1,對於這些圖片,我們大致能鎖定其中人的位置,將 Bounding Box 的左上角和右下角初始化爲圖像的左上角和右下角,然後 Bounding Box 的左上角和右下角同時向人位置的大體方位進行迭代,迭代到一定的次數,Bounding Box 會在人的位置附近收斂。停止調整其自身位置。此過程就是 AttentionNet 進行迭代定位的過程。不過對於單獨的 AttentionNet 只能實現單目標的檢測。要想實現多目標的檢測,請看如下章節的介紹。

  這種通過迭代檢測物體的方式,將物體的存在性判斷與邊界框的優化,集成到了一個卷積神經網絡當中。將邊界框的迴歸問題轉化爲物體大體方向的分類問題。其過程模仿了人類和動物定位物體的過程。換一個角度思考,也可以理解爲多個模型的集成。對於定位的最終目標,需要多個步驟來預測。其中每次定位的方向都是模糊的方向。但是對於多次預測來說,多個方向的集合足以預測一個準確的位置。

和區域推薦相比有一定優勢:

而這個注意力遷移的過程, 可以解讀爲左上點和右下點相互儘可能靠近的一個過程:

整個過程循環迭代, 直到檢測的比較精準爲止。

 

這種注意力移動的過程,也必須和具體目標對應起來, 才能應用到多目標的情況下:

所以說, 不同類別就可以配置成並行的結構框架。

這樣的話, 多個目標實例都要擁有一個這樣的注意力移動的過程。 而多個實例,就也可以並行實現。

 

這樣的話, 採用兩階段過程, 第一步先找到每個實例對應的一個大框, 第二步, 細化找到準確的框。

 

AttentionNet優點:

  1. 全新的區域查找方式
  2. 對比R-CNN,效果有提升

AttentionNet問題:

  1. 多實例的方式較爲複雜
  2. 移動迭代,計算量過大

AttractioNet

(Act)ive Box Proposal Generation via (I)n-(O)ut Localization (Net)work, 如何框優化?

一) 更集中注意!

二) 更細化定位

 

如何細化定位?通過對物體分佈概率的在橫軸和縱軸上的裁剪。

 

 

對應的網絡結構ARN(Attend & Refine),然後反覆迭代, 最後通過NMS矯正。 這個過程是不是和RPN結構加RoI Pooling迭代過程有點類似。 不一樣的地方, 每個ARN的框推薦都會被用上,使用NMS進行修正。

 

而ARN和之前RPN結構不太一樣, 它的橫軸和縱軸是分別細化,然後通過In-Out 最大似然度來定義的, 也就是前面的那個細化的示意圖。

 

上面解釋了ARN, 那麼NMS是什麼呢?其實就是一個局部求最值的過程!

 

 

NMS修正的過程,效果能從多個框中找到一個最符合的框, 有點類似投票。

 

 

AttractioNet優點:

  1. 實現提出迭代優化區域思想
  2. AttractioNet 要比Selective Search效果更好
  3. 基於CNN網絡上的區域推薦

AttractioNet問題:

  1. 反覆迭代會降低運行速度
  2. 網絡結構複雜, 不如RPN簡單

 

十六、G-CNN

Grid R-CNN由商湯提出的,其主要是對faster R-CNN框架中定位框迴歸支路的更改,將以往通過迴歸方式實現proposal位置修正的方法,更改爲通過全卷積網絡來實現目標定位框的精確修正。

Grid R-CNN

Grid-CNN與Grid R-CNN不同。

Grid-CNN 吸收了YOLO分而治之的思想。 然後進行區域合併。

但是它不是簡單的合併, 而是採用迭代優化的思路。

 

這個過程和NMS非常不一樣, 通過反覆的IoU計算, 優化迭代。

爲了避免特徵的反覆計算,它把特徵計算作爲全局步驟, 而把迴歸反覆優化的部分稱爲迴歸部分。

 

你可以看到迴歸框的移動過程:

 

G-CNN優點:

  1. 通過迭代優化替換了類似NMS的簡單的合併。
  2. 效果比Faster R-CNN要好點
  3. 通過分而治之, 速度要比Faster R-CNN快點。

G-CNN問題:

  1. 速度依然太慢,難以實時應用

 

十七、ION

參考:

  1. Inside-Outside Net中在卷積圖片中應用IRNN的理解

收錄於CVPR2016

Inside-Outside Net是提出基於RNN的上下文的目標檢測方法。 對於圖像上下左右移動像素, 用RNN來編碼, 稱爲這個方向上的上下文。

這樣, 實現了4方向RNN上下文, 用來提取上下文特徵。

v2-2eca29655b88967b9219f746fea24cbc_720w.jpg

並且設置了RNN堆棧來強化不同粒度的上下文。

 

所以R-FCN裏面對空間限制進行迭代編碼類似, 不過這次不是人爲劃分框的位置, 而是通過IRNN直接編碼。

 

v2-2f8f7bf13c92597a04185904ea1c9db0_720w.jpguploading.4e448015.gif正在上傳…重新上傳取消

對比添加上下文和沒有上下文的網絡設置區別。 對比得到IRNN可以提高2個mAP的提升。

 

ION優點:

  1. 提出RNN上下文的概念
  2. 對小物體的識別的效果提升
  3. 比R-FCN效果要佳。

ION問題:

  1. RNN計算量增加,速度變慢

 

十八、FPN  (feature pyramid networks for object detection

參考:CVPR2017

  1. 『計算機視覺』FPN:feature pyramid networks for object detection(代碼分析)

  2. FPN詳解
  3. FPN: 一種高效的CNN特徵提取方法

  4. FPN全解-最全最詳細

  5. 物體檢測之FPN及Mask R-CNN

如何將特徵金字塔融合成神經網絡,爲了避免重複計算。FPN:端到端訓練的特徵金字塔

提出FPN網絡, 通過卷積和拼接得到特徵金字塔網絡

有了特徵金字塔,有什麼好處呢? 對於不同大小的物體可以在不同縮放上進行分割。

 

這樣,在每個層次就可以利用類似的尺度來發現目標物體。

做到各個尺度的兼容:

FPN優點:

  1. 多尺度和小物體的融合考慮
  2. 速度和準確率的兼容
  3. 可以廣泛的結合, 提高不同模型的效果

FPN問題:

  1. 需要多層計算,增加計算量

 

 

十九、Mask R-CNN

參考

  1. 物體檢測之FPN及Mask R-CNN
  2. 『計算機視覺』Mask-RCNN

  3. 『計算機視覺』Mask-RCNN_項目文檔翻譯

稍微回顧一下, 第一次提出RoI, 再R-CNN裏面

 

第一次提出RoI Pooling在Fast R-CNN裏面

 

第一次提出 RPN在Faster R-CNN裏面:

 

到了Mask R-CNN, 做了什麼改進呢?提出了RoI Align , 方便後面增加的Mask Branch, 對應到像素點。

 

什麼是mask?

有了Mask之後, 我們能實現實例分割了

 

那麼, RoI Pooling和RoI Align的區別在於哪裏呢?如何能夠精確的反向找到對應像素點邊緣? 這樣的話,就要求對Pooling的劃分不能按照Pooling的邊緣, 而是要按照像素點縮放後的邊緣。

 

而用Pooling的話, 就會有偏差, 這種偏差對應到像素的Mask上就會找不準邊界, 之前有人利用RoI Wrapping進行插值矯正。

對於Mask和分類,迴歸學習, 即可以基於FPN或者就是RoI Align的特徵

Mask計算的先驅:

1. MNC(Multi-task Network Cascade)的RoI Wrapping, 插值估算

2. FCIS (Fully Convolutional Instance Segmentation)的positional aware sliding masks

RoI Align要比Segment要好很多!

在加上人體姿勢的17個關鍵點

Mask R-CNN優點:

  1. ROIPool 到 ROIAlign (借鑑了ROI Wrapping)
  2. Mask的預測 (借鑑了MNC和FCIS)
  3. State-of-Art的效果
  4. 輕微調整可以做人體姿態識別

Mask R-CNN問題:

  1. 速度不夠快
  2. 像素預測需要大量訓練數據

Mask X R-CNN

 

帶Weight Transfer learning的Mask R-CNN。

效果提升:

小結

 

給一個概要的takeaway

  1. 速度優先:SSD算法
  2. 速度和效果均衡: R-FCN算法
  3. 效果優先:Faster R-CNN, Mask R-CNN
  4. 一網多用:Mask R-CNN

 

對於實踐開發

另外matterport公司在github上對Mask R-CNN的開源實現,

https://github.com/matterport/Mask_RCNN 。

 

參考:

Ross Girshick, “CVPR 2017 Tutorial on Deep Learning for Objects and Scenes”

https://www.robots.ox.ac.uk/~vgg/rg/slides/vgg_rg_16_feb_2017_rfcn.pdf

 

二十 CornerNet

  1. CornerNet-Lite,基於關鍵點的目標檢測算法,已開源

  2. CornerNet 和 CornerNet-Lite

二十一 CenterNet

  1. CenterNet Pro Max開源

  2. 真正的CenterNet——Objects as Points論文解讀

  3. CenterNet:將目標視爲點 (已開源)

 

 

編輯於2020-4-15

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章