物件偵測

R-CNN(區域卷積神經網路)

R-CNN(Girshick 等人,2014)是第一個把深度學習革命帶進物件偵測的方法,其運作方式就如其名:帶有 CNN 特徵的區域(Regions with CNN features)。取一個外部的區域提議演算法,把每個被提議的區域從影像裁切出來,對每個裁切塊跑一個強大的影像分類器(CNN),你就有了一個偵測器。相較於在它之前那些用手工特徵的偵測器,這是準確度上的巨大躍進,並確立了這個領域至今仍沿用的兩階段範本。

其管線有四個階段。(1) Selective Search 為每張影像產生約 2,000 個區域提議。(2) 每個提議被扭曲成固定大小(例如 227×227),再送過一個 CNN(最初是 AlexNet)以萃取一個特徵向量。(3) 一組類別專屬的線性 SVM 為每個特徵向量評分。(4) 一個獨立的線性回歸器微調提議的框座標。訓練是多階段且笨拙的:預訓練 CNN、在扭曲裁切塊上微調它、再訓練 SVM、再訓練框回歸器——四個鬆散耦合的部件,而非單一模型。

R-CNN 的致命缺陷是速度,原因在於重複運算。由於它對每張影像約 2,000 個裁切塊各自獨立地跑整個 CNN,而那些裁切塊又大量重疊,它把幾乎相同的卷積特徵重算了數千次。推論每張影像要花數十秒(用 VGG 在 GPU 上約 47 秒),訓練則因為要把整個資料集的快取特徵寫出而緩慢且耗硬碟。它準確,但對實際使用而言完全不切實際。

在歷史上,R-CNN 的意義在於它是概念驗證:學習得來的 CNN 特徵加上區域提議,決定性地擊敗了先前技術(它在 PASCAL VOC 上大致把誤差砍半)。後來每一個偵測器,在某種意義上都是在試圖保留 R-CNN 的準確度、同時消滅它的冗餘——Fast R-CNN 共享卷積、Faster R-CNN 學習提議、單階段方法則乾脆拋棄提議步驟。

「R-CNN 慢,因為它每個區域都跑一次 CNN」這句話是要記住的關鍵洞見——它直接催生了 Fast R-CNN:後者只算一次卷積特徵圖,並對每個區域裁切的是特徵(而非像素)。

又称
regions with CNN featuresR-CNN