1. 程式人生 > >目標檢測技術演進:R-CNN、Fast R-CNN、Faster R-CNN 之 RCNN

目標檢測技術演進:R-CNN、Fast R-CNN、Faster R-CNN 之 RCNN

這篇文章的內容總結翻譯自 A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1) ,文中有加入自己的理解。

當你想要在雜亂的桌子上面尋找鑰匙的時候,是不是有想過要是有種東西可以直接告訴我鑰匙放在哪裡就好了?如果一個演算法可以在幾毫秒之內就幫我們找到鑰匙,那就好了。

目標檢測演算法就像這樣的一個「超人」。目標檢測被運用到了越來越多的場景上,從日夜不停工作的監視器到智慧城市的實時車輛檢測。這就是深度學習的強大之處。

在這篇文章裡面,我們會看看各種可以用來做目標檢測的演算法。我們從 RCNN 系列開始,從 RCNN、Fast RCNN 到 Faster RCNN。(在隨後的文章裡面可能會講到 YOLO、SSD 之類的)

原文作者附上了一篇關於「目標檢測」的文章,感興趣的朋友可以前往看看,現在就讓我們開始來看看 RCNN 的「家族史」吧!

1. 解決目標檢測任務的簡單方式

下面的圖展示了目標檢測任務是怎麼工作的。在圖中的每一個物體,從人到風箏都會被定位和識別,並且會給我們一個置信度,即計算機認為的所識別到的物體的可能性。

先來看看被使用最廣的最簡單的目標檢測深度學習演算法 —— 卷積神經網路,CNNs。

下圖告訴了我們 CNN 在內部是如何工作的。

我們給網路一張圖片,然後它會被傳送到許多卷積層和池化層上。最後給我們一個所識別到的物體的類別。

每輸入一張圖片,我們就會得到一個相對應的類別作為輸出。那麼我們可以用這樣的方法來檢測一張圖片中的多個目標嗎?當然可以啦。來看看怎麼使用 CNN 解決一個普通的目標檢測問題:

  1. 首先,把一張圖片作為輸入:

在這裡插入圖片描述

  1. 然後把圖片分成幾個區域:
  1. 這樣一來就可以把每個區域都當作是一個獨立的圖片;
  2. 然後你知道的,就是這些獨立的區域放進 CNN 裡面,對它們進行分類;
  3. 當所有的區域都分類好了,我們就可以把它們合起來,得到帶有檢測目標的原始圖片:

img

這樣做怎麼看都是有問題的是吧,你看上圖的框實在太大了,我們看不出它框出了什麼出來。直接把圖片分成幾個簡單的區域太粗暴了。我們知道圖片中的物體大小和位置都是不一樣的,直接分肯定會出現框不全的情況。

物體的大小位置和形狀都是多變的。如果我們想要框更加適合,就要適當地增加框的數量,也就是把圖片分成更多更小的部分,而不是 4 個大區域。但是這樣會導致計算時間成倍地增加。為此我們需要一個更好的方法,那就是基於區域的 CNN(Region-based CNN, RCNN)。基於區域就是使用生成區域建議的方式來選擇區域。區域建議又是什麼?再接下來看看吧。

2. 理解基於區域的卷積神經網路(RCNN)

RCNN 演算法可以為一張圖片提供較少的選框,然後檢查這些框中有沒有包含物體。選框的方式是根據選擇性搜尋(selective search)來進行的,這些選框就叫做區域,也叫做 regions.

先來看看什麼叫做選擇性搜尋,以及它是如何去識別不同的區域的。基本上一個物體中會包含四種資訊:不同的尺度、顏色、紋理和邊界。選擇性搜尋的方法就是識別這些模式,然後提出不同的區域。來看看它的過程:

首先當然就是先輸入圖片了:

然後,先生成最初的子分割,看起來像下面這樣子。因為一開始分割得很細,整張圖片感覺面目全非了,很複雜,那接下來的任務就是化小為大了。

把小塊區域合併成大塊的區域依據的方法就是,按照顏色相似度、文理相似度、大小相似度和形狀相容性來完成的。其實就是上面說的物體的四個特性:

最後生成的區域就是物體在圖片中的定位了,也就是所說的感興趣區域(Region of Interest).

那下面來看看一個 RCNN 檢測時的步驟有哪些:

  1. 首先準備一個預訓練的卷積神經網路;

  2. 然後再重新訓練這個模型,但是隻訓練最後的層,也就是微調(fine tune),訓練的類別就是我們想要檢測的類別;

  3. 第三步,得到每一張圖片的感興趣區域,把所有的區域都改變成同樣的大小,可以輸入到 CNN 中;

  4. 得到區域後,訓練 SVM 來分類物體和背景(在目標檢測當中需要對一個 ROI 判斷其屬於目標還是背景)。對於每一個類別,我們都會訓練一個二分類 SVM;

  5. 最後,為了使得生成的框更加精確,會訓練一個線性迴歸模型讓生成的 Bounding Boxes 更加貼近物體。

來看看圖片的過程,更加有助於理解!

這就是第一步,輸入圖片:

使用一些區域建議方法來得到 ROI,選擇性搜尋是區域建議方法的其中一個:

然後這些區域就會被 reshape 成 CNN 輸入的大小:

CNN 就提取每一個區域的特徵值,然後 SVM 就來對這些區域進行分類:

最後,邊界框迴歸(Bounding box) 就預測生成的框:

RCNN 就這樣來檢測目標的。

3. RCNN 的不足

到目標為止講的 RCNN 確實可以檢測目標了,但是卻存在很大的問題:

  1. 首先它對於每一張圖片都會生成 2000 個 ROI;

  2. 對每一張圖片都進行一次區域建議,如果有 N 張圖片,那就是 N*2000 個了;

  3. 整個過程用了三個模型:用於特徵提取的 CNN、識別物體的線性 SVM 和調整邊界框的迴歸模型

這些過程使得 RCNN 變得非常的慢,預測一張圖片就花去了 40 到 50 秒的時間,這個時間確實等不起,如果遇到更加大的資料量時,網路就根本處理不來,所以一開始的 RCNN 是很慢的,但是在接下來的 Fast RCNN 和 Faster RCNN 裡面,改進了很多,我會在下一篇文章為大家講講這兩個表現更好的網路。


更多精彩:
1. 目標檢測技術演進:Fast R-CNN、Faster R-CNN
2. 膠囊網路的簡單介紹
3. Apple 新產品中的機器學習演算法


如果你想了解更多關於人工智慧的資訊,歡迎掃碼關注微信公眾號以及知乎專欄 「譯智社」,我們為大家提供優質的人工智慧文章、國外優質部落格和論文等資訊喲!