08.20 機器不學習:卷積神經網絡 CNN 筆記-目標探測2

機器不學習 www.jqbxx.com : 深度聚合機器學習、深度學習算法及技術實戰

緊接著上文來說

神經網絡分類: R-CNN 系列方法

R-CNN(CVPR2014, TPAMI2015)

算法

神經網絡的分類思想是對多個位置,不同尺寸,用卷積神經網絡判斷區域內圖片是不是某物候選位置(proposal)提出方法一般用 EdgeBox

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

R-CNN 最初提出的時候選擇 20 類進行探測,是在 ImageNet 模型的基礎上,把 1000 類的分類模型變成能識別 21 類(20類+other)的 Fine-tune 分類模型。

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

=>

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

特徵的提取過程: 對圖片計算候選區域;對候選區域切分圖片,對切分部分進行 resize 變成輸入大小;提取相應高級特徵;存儲特徵(大容量,200-300G空間存儲圖片)

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

單獨目標探測器訓練:對每一類進行單獨訓練,保證每一類訓練數據平衡,每一類都是 binary 分類(yes/no)。比如貓的分類器,可能大部分圖片沒有一個理想的貓,只有一個耳朵,這不算貓,我們要與真值進行比較,看左上右下區域,如果重合(共有區域)比較多,就認為是貓的圖片。每一類都有很多的正例反例(1/0)。

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

單獨目標迴歸器訓練-基於候選區域微調: 同樣的,每一類單獨訓練,保證每一類訓練數據平衡,這裡是每一類做 BBOX 迴歸。目的是在知道是不是貓以及位置的偏移後,用迴歸對位置進行 offset,離真值(ground truth)更近,最終的探測精度會更高。

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

總的來說,R-CNN 的測試過程就是

  1. 對每個圖像生成 1k-2k 個候選區域
  2. 對每個候選區域,使用深度網絡進行特徵計算
  3. 特徵餵給每一類的 svm 分類器,判別是否屬於該類分類;同時用迴歸修正候選框位置
  4. 後續處理
機器不學習:卷積神經網絡 CNN 筆記-目標探測2


常用數據集

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

評估方法

  • MAP(mean average precision)
  • IoU,真值和預測值多重疊部分與兩者的並集的比值,一般大於 0.5 就認為是正確的
機器不學習:卷積神經網絡 CNN 筆記-目標探測2


R-CNN 結果對比

Regionlets(2013) 並沒有經過 fine-tune,R-CNN(2014, AlexNet) 用事先訓練好的分類器進行了 fine-tune,R-CNN+bbox reg(AlexNet),用了 regression,加了 offset 對檢測框做了範圍調整,R-CNN(vgg-16)把 base model 改成了 vgg

總的來說,主要是從下面三個角度進行了模型的調整

  1. Finetune
  2. 迴歸微調
  3. Base 模型
機器不學習:卷積神經網絡 CNN 筆記-目標探測2


優缺點

優點:

  1. CNN 用於目標探測,利 用了 CNN 高效識別能力, 大大提高性能
  2. 擺脫人為設計物品模版, 方法具有通用性
  3. 分類+迴歸,有了找到精確位置的可能

缺陷:

  1. 為了檢測一個目標,所有候選區域計算,大量卷積運算,非常慢
  2. 對於速度慢這個問題,SPP-NET 給出瞭解決方案。R-CNN 對圖像提完 region proposal(2k 左右)之後將每個 proposal 當成一張圖像進行後續處理(CNN提特徵+SVM分類),實際上對一張圖像進行了2000次提特徵和分類的過程!SPP-NET 對圖像提一次卷積層特徵,然後將 region proposal 在原圖的位置映射到卷積層特徵圖上,這樣對於一張圖像只需要提一次卷積層特徵,然後將每個 region proposal 的卷積層特徵輸入到全連接層做後續操作
  3. SVM 訓練與CNN 斷裂, SVM Loss 沒辦法用於 CNN Loss,有效信息不能用於優化模型, not end-to-end
  4. 每一類單獨訓練,異常繁瑣

Fast R-CNN(ICCV2015)

Fast R-CNN 的三個進步

  • 共享卷積計算
  • 增加 ROI pooling layer
  • 完整訓練(end-to-end)
  • 用 softmax 代替 svm 分類,用多目標損失函數加入候選框迴歸,除 region proposal 提取外實現了 end-to-end
  • 多目標一起學習
機器不學習:卷積神經網絡 CNN 筆記-目標探測2


共享卷積計算

Fast R-CNN 在最後一個卷積層後加了一個 ROI pooling layer,實際上就是上面提到的 SPP-NET 的一個精簡版,特點是:

  1. 卷積計算保持空間位置
  2. 共同區域的卷積計算只需進行一次
  3. 切割候選區+提取特徵圖=計算完整特徵圖+切割對應候選區
  4. 把圖片的 region proposal 切割出來,resize,提取特徵,其實就等同於在原圖特徵圖裡找到 region proposal
機器不學習:卷積神經網絡 CNN 筆記-目標探測2

1.一個重要的問題是不同區域的特徵如何保持一致?

全連接層要求接的區域形狀一致;所以要特徵圖裡區域的一致性處理,也就是做一個 pooling

特徵一致化 - Max Pooling

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

局部區域

100x50 =>按 4:2 pooling

50x100 => 按 2:4 pooling

=> 25x25 feature

=> 225 FC

如果 pooling size 不完美,其實也沒有問題,pooling 本身就是填充 pooling 後的圖的每一個 pixel,只要從 pooling 前某區域選一個 pixel 值即可,不一定要規整

位置 + 類別聯合學習

圖片 => cnn feature map計算 => proposal應用 => feature map相應區域做 region pooling 得到固定大小的 feature map => classification & regression

用 softmax 代替 svm 分類,使用多任務損失函數(multi-task loss),將候選框迴歸直接加入到 cnn 網絡中訓練,除去 region proposal 的提取階段,這樣的訓練過程是端到端的(end-to-end),整個網絡的訓練和測試十分方便

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

性能提升

看一下性能提升的情況

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

然而前提是 不考慮候選區域(proposal)的生成,如果加上候選區域(proposal)的時間

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

region proposal 的提取使用 selective search,目標檢測時間大多消耗在這上面(提region proposal 2~3s,而提特徵分類只需0.32s),無法滿足實時應用,那麼,怎麼解決候選區域的計算呢?一個方法是也靠神經網絡。

Faster R-CNN(NIPS2015)

RPN(Region Proposal Network)

用神經網絡來解決候選區域的生成問題,主要是神經網絡特徵增加一組輸出 RPN(Region Proposal Network)候選區域網絡

  1. 直接產生候選區域,無需額外生成
  2. 本質上是 sliding window,RPN 只需在最後的卷積層上滑動一遍,因為 anchor 機制和候選框迴歸可以得到多尺度多長寬比多 region proposal
  3. 直接用於後續特徵圖切割

最後的特徵圖中有很多個 pixel,每個 pixel 和卷積核進行計算,生成 k 個可能的 prpoposal(實際中 k 往往=9,一個區域可能同時被多個物體佔用,所以儘可能把可能分佈的形狀都生成),每個 proposal 有個 score 的計算。如圖,左邊是 3x3 的卷積網絡的特徵圖,右邊是 k 個 anchor box(相當於小的候選生成單元)。我們對特徵圖進行 sliding window 的計算,每個 pixel 生成 256 長的向量(向量長度其實是自己設計的,vgg 建議 512-d),這個向量用來生成 k 個 proposal 的值,以及對應的 2k score(是/不是目標物體),4k 個 coordinates(上下左右座標)。

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

網絡輸出的值:

  1. 是不是一個目標
  2. 覆蓋範圍的相對位置

k=9(3種尺寸,3種長寬比)個 anchor,能產生多少個 proposal?

特徵圖 size HxW -> HWx9 in paper 2400x9

如果是 VGG conv5 作為特徵圖,3x3 區域對應的原始圖像區域?

經過了 4 個 pooling,往前推,6x6 -> 12x12 -> 24x24 -> 48x48,也就是 16 倍的一個縮放

Anchor的平移不變怎麼理解

較小的平移 pooling 過程中忽略,3 個 pixel 的移動經過 4 層的 pooling,移動後的位置和原位置相差可以忽略

Anchor 同外接 Proposal 區別

數量:1-2個數量級減少;性能:更高效;

速度:10x

Anchor 設計的借鑑意義?

神經網絡有能力找到最終量,也有能力找到很多中間量。只用 Anchor 判斷是不是目標,會不會存在大材小用,能夠判斷更多嗎?或者說,能在是不是目標的基礎上,判斷是什麼目標嗎,也就是直接擬合

為了讓RPN的網絡和Fast R-CNN網絡實現卷積層的權值共享,訓練 RPN 和 Fast R-CNN的時候用了4階段的訓練方法:

  1. 使用在 ImageNet 上預訓練的模型初始化網絡參數,微調 RPN 網絡;
  2. 使用(1)中RPN網絡提取 region proposal 訓練 Fast R-CNN網絡;
  3. 使用(2)的 Fast R-CNN 網絡重新初始化 RPN, 固定卷積層進行微調;
  4. 固定(2)中 Fast R-CNN 的卷積層,使用 (3) 中 RPN 提取的 region proposal 微調網絡
機器不學習:卷積神經網絡 CNN 筆記-目標探測2


Faster R-CNN 用了直接聯合學習(joint learning) 的方法,如上圖,一個網絡有 4 個損失函數

  1. Anchor 是不是目標
  2. Anchor 迴歸候選區域迴歸
  3. Fast R-CNN 分類
  4. Fast R-CNN 基於候選位置迴歸
  5. 聯合學習的方法產生了更少的候選區,但是精度不會受到影響,速度卻快了 10 倍,接近於實時處理(@K40 GPU, 12G)。

性能提升

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

接近於實時處理,然而還是很難實時的目標探測,下面的 YOLO 這類方法可以達到實時性。

神經網絡迴歸: YoLo 系列方法

YoLo

算法

YoLo 將目標探測任務看作目標區域預測和類別預測的迴歸問題,用單個神經網絡直接預測物品邊界和類別分數,可以直接找到物體是什麼,在哪裡

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

把圖片分成 SxS 的格子(grid cell),一般是 7x7 的網絡,每個網格生成:

  1. B 個 Bbox,4 個 coordinates + 1 個 confidence score
  2. N 個類別分數 Pr(Class
  3. i
  4. |Object)
  5. Pr(Classi|Object)
  6. 與 Anchor 不同的是,這裡有 N 個分數,表示屬於每一類的分數分別是多少

S=7, B=2, N=20

總共的迴歸目標: SxSx(5B+N)

​ 2x5+20=30 個參數,49x30=1470 個數值,用來回歸

候選區域個數: (B=2) 98 個 << Faster R-CNN

每個小區域生成 2 個候選區,一個小的區域就是一個粗糙的 proposal,對小區域進行大範圍的 regression,找到目標

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

損失函數:

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

性能

性能:

  • 實時運行
  • 精度稍微下降
  • 定位精度較差

經過大量的 pooling,位置的響應會有一定弱化

機器不學習:卷積神經網絡 CNN 筆記-目標探測2

Limitations

  1. YoLo 的每一個網格只預測兩個 boxes,一種類別。這導致模型對相鄰目標預測準確率下降。因此,YOLO 對成隊列的目標(如一群鳥)識別準確率較低。
  2. YoLo 是從數據中學習預測 bounding boxes,因此,對新的或者不常見角度的目標無法識別。
  3. YoLo 的損失函數對small bounding boxes 和 large bounding boxes 的 error 平等對待,影響了模型識別準確率。因為對於小的 bounding boxes,small error影響更大。

SSD: The Single Shot Detector

SSD 分類更細,網絡結構有點像 resnet。中間多層特徵參與位置、種類計算,在不同 layer 輸出的不同尺寸的 feature map 劃格子,在格子上提“anchor”,彌補了 Yolo 只在最後一層分 7x7 的框漏掉的部分。和 Yolo 相比,更快更準確。

  • 候選區 98 vs 8732
  • 速度 21:46 (vgg base)
  • 精度 66.4:74.3
機器不學習:卷積神經網絡 CNN 筆記-目標探測2

參考鏈接:

目標檢測方法——從RCNN、Fast-RCNN到Faster-RCNN

YOLO:實時快速目標檢測


分享到:


相關文章: