OB前言筆記整理

二更 (初更為2022/02/23

這篇文章是學習時整理的一些筆記,讓自己複習時方便,文章內容原文於文末參考

Introduction

YOLO將原本分散的object detection步驟融合成一個single neural network,透過整張影像的features來預測每一個bounding box,並且同時計算每個bounding box對於每一個class的機率,YOLO不僅是從整張影像來偵測物體,end-to-end的訓練與運算可以在即時運算下仍維持著高精準度

region proposal:給定一張輸入image找出所有objects可能存在的位置。這一階段的輸出是所有object可能位置的bounding box,這些通常稱之為region proposals或者 regions of interest(ROI)

產生大量的region proposals 會導致performance problems,很難達到實時目標檢測,也就是RCNN所存在的問題。在處理速度方面是suboptimal。無法做到end-to-end training。這就是ROI pooling提出的根本原因。

ROI pooling層能實現training和testing的顯著加速,並提高檢測accuracy。該層有兩個輸入:從具有多個卷積核池化的深度網路中獲得的固定大小的feature maps

Steps

ROI pooling具體操作如下:

  1. 根據輸入image,將ROI對映到feature map對應位置,對映是根據image縮小的尺寸來的
  2. 按照ROI Pooling輸出的資料的座標,將其對映到上一步中對映的feature區域上,這樣就將原來feature map上的ROI對映劃分成了幾個sections(sections數量與輸出的維度(pooled_w*pooled_h)相同)
  3. 對每個sections進行max pooling操作

下圖為單幅圖片上4個ROI的示例。實際的Fast R-CNN可能會生成成百上千個這樣的ROI框。
ob

ROI不是Bounding Box,它們看起來很相似,但是ROI還需要經過進一步的處理才能生成Bounding Box。

ob
如上圖所示,每個ROI都有自己的座標和大小。為方便說明問題,我們只關注其中一個ROI,其它的都是一樣的。
ob
該ROI的大小為145×200,在原始影象中左上角的座標為192×296,為了將該ROI投射到Feature Map上,我們需要將ROI的大小和位置對應縮放到原始大小的1/32。

  • width: 200/32 = 6.25
  • height: 145/32 = ~4.53
  • x: 296/32 = 9.25
  • y: 192/32 = 6
    可以看到,只有y座標值是可以被整除的,其它數值都是浮點數。影象的畫素是不存在浮點數的,因此有一個 Quantization 的操作。

Quantization是將連續的取值轉換為有限的多個離散值的過程。

ob
紅色框框是原來算出來的結果,橘色矩形是Quantization後的結果
Quantization ROI相對於原始的ROI缺失了深藍色的區域,多了綠色的區域。也就是說Quantization ROI與原始的ROI覆蓋的區域已經不一致了。
ROI Align可以解決Quantization ROI與原始的ROI覆蓋的區域不同的問題,這裡我們暫不關心這個差異。

為什麼要使用ROI Pooling呢?
原因是ROI Pooling Layer之後的Fully Connected Layer的輸入是固定,所以需要通過ROI Pooling將所有的ROI變成固定大小。
ob
在Fast RCNN中,將Selective Search完成後得到的region proposal映射在feature map上
ROI的特點是輸入的尺寸不固定,但輸出的尺寸是固定的
ob

Method 1

這裡Quantization ROI大小為4x6x512,Fully Connect Layer的輸入大小為3x3x512。
ob
Height方向上:4 / 3 = 1.33
Width方向上: 6 / 3 = 2
再次應用Quantization操作,對每個1×2塊應用Max Pooling操作,最終生成3×3的Pooling ROI。
ob
由於應用了Quantization向下取整,ROI中最後一行資料再次被丟棄了。(還有另外一種非等分的保留所有資料的做法,應該都是可以的)
ob
完整的ROI Pooling過程如下:
ob
ROI Pooling最終生成的結果是這樣的:
ob
至此,一個ROI的ROI Pooling過程完成了。使用同樣的步驟對剩下的ROI應用ROI Pooling,從而生成成百上千個3x3x512的Matrix。這些生成的Matrix被送入Fully Connect Layer,繼續進行後續的Bounding Box生成和分類預測。

Method 2

這個例子中假設Feature Map的大小為8×8(如下圖所示),ROI Pooling後的ROI大小為2×2。
ob
假設我們有一個Region Proposal,左上和右下角座標分別為(0,3)和(7,8),如下圖所示:
(左上角為(0,0)右下角為(8,8))
ob
這裡ROI的width和Height均不能被2(ROI Pooling輸出的大小)整除,上一個ROI Pooling處理方法中,直接向下取整,把餘下的資料丟棄了。這裡的處理方法保留所有資料。
ob
對每個Pooling Section應用Max Pooling。
ob
最後ROI Pooling如下:
ob
ob

References

  1. 關於ROI Pooling Layer的解讀
  2. 深入理解ROI Pooling