1. 程式人生 > >物件檢測(object detection)演算法圖解

物件檢測(object detection)演算法圖解

摘要: 本文簡要介紹影象檢測中常用的深度學習方法——RCNN家族系列演算法,以影象講解形式,便於理解。

       在生活中,經常會遇到這樣的一種情況,上班要出門的時候,突然找不到一件東西了,比如鑰匙、手機或者手錶等。這個時候一般在房間翻一遍各個角落來尋找不見的物品,最後突然一拍大腦,想到在某一個地方,在整個過程中有時候是很著急的,並且越著急越找不到,真是令人沮喪。但是,如果一個簡單的計算機演算法可以在幾毫秒內就找到你要找的物品,你的感受如何?是不是很驚奇!這就是物件檢測演算法(object detection)的力量。雖然上述舉的生活例子只是一個很簡單的例子,但物件檢測的應用範圍很廣,跨越多個不同的行業,從全天候監控到智慧城市的實時車輛檢測等。簡而言之,物體檢測是強大的深度學習演算法中的一個分支。
       在本文中,我們將深入探討可以用於物件檢測的各種演算法。首先從屬於RCNN系列演算法開始,即RCNN、 Fast RCNN和 Faster RCNN。在之後的文章中,將介紹更多高階演算法,如YOLO、SSD等。

1.解決物件檢測任務的簡單方法(使用深度學習)

       下圖說明了物件檢測演算法是如何工作。影象中的每個物件,從人到風箏都以一定的精度進行了定位和識別。


       下面從最簡單的深度學習方法開始,一種廣泛用於檢測影象中的方法——卷積神經網路(CNN)。如果讀者對CNN演算法有點生疏,建議閱讀此文
       這裡僅簡要總結一下CNN的內部運作方式:


       首先將影象作為輸入傳遞到網路,然後通過各種卷積和池化層處理,最後以物件類別的形式獲得輸出。
       對於每個輸入影象,會得到一個相應的類別作為輸出。因此可以使用這種技術來檢測影象中的各種物件。

  • 1.首先,將影象作為輸入;

  • 2.然後,將影象分成不同的區域;

  • 3.然後,將每個區域視為單獨的影象;
  • 4.將所有這些區域傳遞給CNN並將它們分類為各種類別;
  • 5.一旦將每個區域劃分為相應的類後,就可以組合所有這些區域來獲取具有檢測到的物件的原始影象:

       使用這種方法會面臨的問題在於,影象中的物件可以具有不同的寬高比和空間位置。例如,在某些情況下,物件可能覆蓋了大部分影象,而在其他情況下,物件可能只覆蓋影象的一小部分,並且物件的形狀也可能不同。
       基於此,需要劃分大量的區域,這會花費大量的計算時間。因此,為了解決這個問題並減少區域數量,可以使用基於區域的CNN,它使用提議方法選擇區域。

2.基於區域的卷積神經網路

2.1 RCNN的思想

       RCNN演算法不是在大量區域上工作,而是在影象中提出了一堆方框,並檢查這些方框中是否包含任何物件。RCNN 使用選擇性搜尋從影象中提取這些框。
       下面介紹選擇性搜尋以及它如何識別不同的區域。基本上四個區域形成一個物件:不同的比例、顏色、紋理和形狀。選擇性搜尋在影象中識別這些模式,並基於此提出各種區域。以下是選擇性搜尋如何工作的簡要概述:

  • 首先, 將影象作為輸入:

  • 然後,它生成初始子分段,以便獲得多個區域:

  • 之後,該技術組合相似區域以形成更大的區域(基於顏色相似性、紋理相似性、尺寸相似性和形狀相容性):

  • 最後,這些區域產生最終的物件位置(感興趣的區域);

       下面是RCNN檢測物件所遵循的步驟的簡要總結:

  • 1.首先採用預先訓練的卷積神經網路;
  • 2.重新訓練該模型模型——根據需要檢測的類別數量來訓練網路的最後一層(遷移學習);
  • 3.第三步是獲取每個影象的感興趣區域。然後,對這些區域調整尺寸,以便其可以匹配CNN輸入大小;
  • 4.獲取區域後,使用SVM演算法對物件和背景進行分類。對於每個類,都訓練一個二分類SVM;
    1. 最後,訓練線性迴歸模型,為影象中每個識別出的物件生成更嚴格的邊界框;

[對上述步驟進行圖解分析](http://www.robots.ox.ac.uk/~tvg/publications/talks/Fast-rcnn-slides.pdf):

  • 首先,將影象作為輸入:

  • 然後,使用一些提議方法獲得感興趣區域(ROI)(例如,選擇性搜尋):

  • 之後,對所有這些區域調整尺寸,並將每個區域傳遞給卷積神經網路:

  • 然後,CNN為每個區域提取特徵,SVM用於將這些區域劃分為不同的類別:

  • 最後,邊界框迴歸(Bbox reg)用於預測每個已識別區域的邊界框:

       以上就是RCNN檢測物體的全部流程。

2.2 RCNN的問題

       從上節內容可以瞭解到RCNN是如何進行物件檢測的,但這種技術有其自身的侷限性。以下原因使得訓練RCNN模型既昂貴又緩慢:

  • 基於選擇性搜尋演算法為每個影象提取2,000個候選區域;
  • 使用CNN為每個影象區域提取特徵;
  • RCNN整個物體檢測過程用到三種模型:

    • CNN模型用於特徵提取;
    • 線性svm分類器用於識別物件的的類別;
    • 迴歸模型用於收緊邊界框;

       這些過程相結合使得RCNN非常慢,對每個新影象進行預測需要大約40-50秒,這實際上使得模型在面對巨大的資料集時變得複雜且幾乎不可能應用。
       好訊息是存在另一種物體檢測技術,它解決了RCNN中大部分問題。

3.瞭解Fast RCNN

3.1Fast RCNN的思想

       RCNN的提出者Ross Girshick提出了這樣的想法,即每個影象只執行一次CNN,然後找到一種在2,000個區域內共享該計算的方法。在Fast RCNN中,將輸入影象饋送到CNN,CNN生成卷積特徵對映。使用這些特徵圖提取候選區域。然後,使用RoI池化層將所有建議的區域重新整形為固定大小,以便將其饋送到全連線網路中。
       下面將其分解為簡化概念的步驟:

  • 1.首先將影象作為輸入;
  • 2.將影象傳遞給卷積神經網路,生成感興趣的區域;
  • 3.在所有的感興趣的區域上應用RoI池化層,並調整區域的尺寸。然後,每個區域被傳遞到全連線層的網路中;
  • 4.softmax層用於全連線網以輸出類別。與softmax層一起,也並行使用線性迴歸層,以輸出預測類的邊界框座標。

       因此,Fast RCNN演算法中沒有使用三個不同的模型,而使用單個模型從區域中提取特徵,將它們分成不同的類,並同時返回所標識類的邊界框。
       對上述過程進行視覺化講解:

  • 將影象作為輸入:

  • 將影象傳遞給卷積神經網路t,後者相應地返回感興趣的區域:

  • 然後,在提取的感興趣區域上應用RoI池層,以確保所有區域具有相同的大小:

  • 最後,這些區域被傳遞到一個全連線網路,對其進行分類,並同時使用softmax和線性迴歸層返回邊界框:

       上述過程說明了Fast RCNN是如何解決RCNN的兩個主要問題,即將每個影象中的1個而不是2,000個區域傳遞給卷積神經網路,並使用一個模型來實現提取特徵、分類和生成邊界框。

3.2Fast RCNN的問題

       Fast RCNN也存在一定的問題,它仍然使用選擇性搜尋作為查詢感興趣區域的提議方法,這是一個緩慢且耗時的過程,每個影象檢測物件大約需要2秒鐘。
因此,又開發了另一種物體檢測演算法——Faster RCNN。

4.瞭解Faster RCNN

4.1. Faster RCNN的思想

       Faster RCNN是Fast RCNN的修改版本,二者之間的主要區別在於,Fast RCNN使用選擇性搜尋來生成感興趣區域,而Faster RCNN使用“區域提議網路”,即RPN。RPN將影象特徵對映作為輸入,並生成一組提議物件,每個物件提議都以物件分數作為輸出。
       以下步驟通常採用Faster RCNN方法:

  • 1.將影象作為輸入並將其傳遞給卷積神經網路,後者返回該影象的特徵圖;
  • 2.在這些特徵圖上應用RPN,返回提議物件及其分數;
  • 3.在這些提議物件上應用RoI池層,以將所有提案降低到相同的大小;
  • 4.最後,將提議傳遞到全連線層,該層在其頂部具有softmax層和線性迴歸層,以對物件的邊界框進行分類和輸出;

       這裡簡要解釋一下RPN是如何運作的:
       首先,Faster RCNN從CNN獲取特徵圖並將它們傳遞到區域提議網路。RPN在這些特徵圖上使用滑動視窗,每個視窗生成不同形狀和大小的k個方框( Anchor boxe):


       方框是固定尺寸的邊界箱,具有不同的形狀和尺寸。對於每個方框,RPN預測兩件事:

  • 預測錨是物件的概率;
  • 用於邊界框迴歸器調整錨點以更好地適合物體的形狀;

       在有了不同形狀和大小的邊界框後,將其傳遞到RoI池層。對每個提案並對其進行裁剪,以便每個提案都包含一個物件。這就是RoI池層所做的事情,它為每個方框提取固定大小的特徵圖:


       然後將這些特徵圖傳遞到全連線層,該層具有softmax和線性迴歸層,最終對物件進行分類並預測已識別物件的邊界框。

4.2Faster RCNN的問題

       上述討論過的所有物件檢測演算法都使用區域來識別物件,且網路不會一次檢視完整影象,而是按順序關注影象的某些部分,這樣會帶來兩個複雜性的問題:

  • 該演算法需要多次通過單個影象來提取到所有物件;
  • 由於不是端到端的演算法,不同的系統一個接一個地工作,整體系統的效能進一步取決於先前系統的表現效果。

5.總結

下表是總結了本文中介紹的所有演算法

演算法 特徵 預測時間 限制
CNN 將影象分成多個區域,將每個區域分類為不同的類別 - 需要很多區域來準確預測,因此計算時間長
RCNN 使用選擇性搜尋生成區域,從每個影象中提取大約2000個區域 40-50秒 每個區域分別傳遞給CNN的計算時間也很長,且使用三種不同的模型進行預測
Fast RCNN 每個影象只傳遞一次到CNN,並提取特徵圖。在這些地圖上使用選擇性搜尋來生成預測。將RCNN中使用的所有三種模型組合在一起 2秒 選擇性搜尋很慢,因此計算時間仍然很長
Faster RCNN 用區域提議網路替換選擇性搜尋方法,使演算法更快 0.2秒 物件提議需要時間,並且由於不同的系統一個接一個地工作,系統的效能取決於先前系統的表現效果

原文連結