paper 111:圖像分類物體目標檢測 from RCNN to YOLO


參考列表

Selective Search for Object Recognition 
Selective Search for Object Recognition(菜菜鳥小Q的專欄) 
Selective Search for Object Recognition(Surge) 
Selective Search for Object Recognition(原始論文) 
Efficient Graph-Based Image Segmentation(快速圖像分割) 
Homepage of Koen van de Sande

非極大值抑制(Non-maximum suppression)在物體檢測領域的應用 
Efficient Non Maximum Suppression 筆記(不完整版)

如何評價rcnn、fast-rcnn和faster-rcnn這一系列方法? 
RCNN的安裝與簡單使用

Ross B. Girshick(RCNN系列開創者) 
rbg’s home page

RCNN 
Rich feature hierarchies for accurate object detection and semantic segmentation 
https://github.com/rbgirshick/rcnn

Fast RCNN 
Fast R-CNN 
https://github.com/rbgirshick/fast-rcnn

Faster RCNN 
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 
https://github.com/rbgirshick/py-faster-rcnn 
https://github.com/ShaoqingRen/faster_rcnn

You Only Look Once 
You Only Look Once: Unified, Real-Time Object Detection 
YOLO Object Detection(視頻)

 

RCNN

最早的物體識別,是通過窗口掃描的方式進行,並且需要對圖片進行幾個級別的縮放來重復進行。 
這種方式非常暴力,計算量大。 
RCNN主要解決的是去掉窗口掃描,用聚類方式,對圖像進行分割分組,得到多個侯選框的層次組。 
分割分組方法有很多,RCNN用到的是Selective Search。

以下就是RCNN的結構。

  • 從原始圖片,通過Selective Search提取出區域候選框,有2000個左右
  • 把所有侯選框縮放成固定大小
  • 然后通過CNN網絡,提取特征
  • 再添加兩個全鏈接層,然后再用SVM分類,回歸來微調選框位置與大小

 

Fast RCNN

RCNN有兩千個左右的候選框,都要進行CNN操作。但候選框有大量重疊,造成重復計算。 
Fast RCNN就是解決這個問題的。

  • 利用CNN(卷積神經網絡),得到整個原始圖片的特征層
  • 在原始圖片上通過Selective Search等方法,提取出域候選框
  • 把候選框投影到最后的特征層,並進行Max-Pooling采樣,得到固定大小的特征矩形
  • 然后再通過兩個全連接層,分別用softmax分類,regressor進行選框位置與大小微調

 

Faster RCNN

在上面的 RCNN 與 Fast RCNN中,相對於在GPU上計算的CNN,在CPU上運行的提取候選框效率低下,一張圖片大概需要2秒。 
Faster RCNN則直接利用CNN來計算候選框,方式如下:

  • 原始圖片經過CNN,得到最后的卷積特征
  • 利用3×3的矩形進行掃描,得到256維的向量(相當於再添加了一個卷積層,卷積核為3×3,輸出特征數為256)
  • 3×3的特征層映射到最初圖片,是一塊比較大的固定區域,在此固定區域上進行長寬變形,比如分別3個縮放級別,則一共有9個不同的矩形區域,稱做anchor box。9就是上圖中的k值。
  • 對上圖中的k個anchor box進行是否是物體判斷預測,和矩形框位置與大小微調
  • 選出物體框后,再利用同Fast RCNN同樣的方式,對物體類別進行判斷
  • 選框與分類使用同樣的CNN網絡

一張1000×600的圖片,大概可以得到20k個anchor box(60×40×9)。 
anchor box的設置應比較好的覆蓋從大到小的區域,如下圖:

注 
這里有一點疑惑,3×3的卷積核對應的原始圖是塊固定區域(感受野),並沒有包含區域外的信息,如何做到預測更大區域的物體位置? 
或者類似於人的感知,比如只看到部分人像,推測整個人像的大小?看到老虎的頭,預測整個老虎的位置與大小?

 

You Only Look Once

Faster RCNN需要對20k個anchor box進行判斷是否是物體,然后再進行物體識別,分成了兩步。 
YOLO(You Only Look Once)則把物體框的選擇與識別進行了結合,一步輸出,即變成”You Only Look Once”。 
所以識別速度非常快,達到每秒45幀,而在快速版YOLO(Fast YOLO,卷積層更少)中,可以達到每秒155幀。 
網絡的整體結構如下圖:

  • 把原始圖片縮放成448×448大小
  • 運行單個卷積網絡
  • 得到物體的位置與類別

模型如下:

  • 把縮放成統一大小的圖片分割成S×S的單元格
  • 每一個單元格負責輸出B個矩形框,每一個框帶四個位置信息(x, y, w, h),與一個該框是物體的概率,用Pr(Object)或者C(Confidence)表示
  • 每一個單元格再負責輸出C個類別的概率,用Pr(ClassObject)表示
  • 最終輸出層應有S×S×(B5+C)個單元

相關說明:

  • 如果一個物體的中心落入一個單元格,則該單元格上的B個矩形框的位置信息都為該物體的位置信息,
  • C個概率中對應該物體類別值為1,其它為0。
  • x, y表示中心相對於單元格左上角的位置偏移,單元格左上角為(0, 0),右下角為(1, 1)
  • w, h表示矩形框的寬與高,都是相對於整個圖片的相對值,全副圖片大小為(1, 1),長寬都一半就是(0.5, 0.5)

最終輸出時,是物體的概率乘以類別概率,才是整體識別到是一個物體的概率:

 

Pr(class)=Pr(ClassObject)Pr(Object)

 

在論文You Only Look Once: Unified, Real-Time Object Detection中,S = 7,B = 2,C = 20。 
所以輸出的單元數為7×7×30

具體的網絡結構如下:

從上圖的結構可以看到,倒數第二層是一個全連接層,所以最終的單元輸出整合了全局信息,更好地預測圖像區域。

訓練

整個網絡最后一層為線性激活,其它層都為Leaky Rectified Linear激活方式:

 

ϕ(x)={x,0.1x,if x > 0otherwise

 

因為一張圖片中,大部分單元格中都沒有落入物體中心,所以引入兩個參數λcoord=5λnoobj=0.5。 
整個網絡的代價函數變成:

 

J=λcoordi=0S2j=0B1objij(xix^i)2+(yiy^i)2+λcoordi=0S2j=0B1objij(wi−−√w^i−−√)2+(hi−−√h^i−−√)2+i=0S2j=0B1objij(CiC^i)2+λnoobji=0S2j=0B1noobjij(CiC^i)2+i=0S21objijcclasses(pi(c)p^i(c))2

 

因為物體有大有小,如果用差平方來做代價,則造成對大物體位置更好的優化,才發現小物體位置更差的優化,所以上面改成用開方后再做差平方。 
我認為用以下方式可能更好:

 

(wiw^iw^i)2+(hih^ih^i)2

 

什么時候跑了實驗,有了結果再來確認。

YOLO的局限性

  • 最終有一個全連接層,所以各單元格能夠利用全局信息,但是造成初始圖片只能縮放成固定大小
  • 初始圖片有縮放,則可能對不同縮放比的物體覆蓋不全,造成無法識別極端縮放比的物體
  • 每一個單元格只選擇一個物體框來用,並只預測一個類別,所以當多個物體中心落入一個單元格時,YOLO無能為力,表現成不能識別到小物體

 

NMS

通過上面的RCNN, Fast RCNN, Faster RCNN 或 YOLO 方法,圖片中的同一個物體,可能識別出來多個選框。 
這時需要進行選優,去掉重復的框。 
非極大值抑制(Non-maximum suppression,NMS)就是拿來干這個的。

如上圖所示,一共有6個識別為人的框,每一個框有一個置信率。 
現在需要消除多余的:

  • 按置信率排序: 0.95, 0.9, 0.9, 0.8, 0.7, 0.7
  • 取最大0.95的框為一個物體框
  • 剩余5個框中,去掉與0.95框重疊率大於0.6(可以另行設置),則保留0.9, 0.8, 0.7三個框
  • 重復上面的步驟,直到沒有框了,0.9為一個框
  • 選出來的為: 0.95, 0.9

兩個矩形的重疊率計算方式如下:

如圖,矩形的左上角坐標為x1, y1, 右下角坐標為x2, y2,兩個矩形的面積分別為A, B。

  • 取兩個矩形左上角坐標的最大值x1_max, y1_max
  • 取兩個矩形右下角坐標的最小值x2_min, y2_min
  • 重疊區域的寬w為max(0, x2_min - x1_max),高h為max(0, y2_min - y1_max)
  • 重疊率為 w×hA+Bw×h

如下的兩個矩形,重疊率為0:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM