【機器學習】OBJECT DETECTION & YOLO

Description

Description

我們可以想像所謂的「Object detection」是在影像分類(image classifier)基礎上加入localization(定位)功能的延伸。電腦視覺有了Object detection的輔助,自駕車就能精確的判斷四週環境及前方人物動態、也能讓居家安全系統精確的辨識外人入侵,應用於農業科技則可定位果實位置、找到蟲害及缺陷,至於工業製造領域,更是早已運用於孔洞標定位、零件規格分類等以便取代人工作業,Object detection技術在AI領域已成了一項顯學。

從CNN、R-CNN家族(R-CNN、Fast R-CNN到Faster R-CNN)、SDD直到YOLO,Object detection逐漸在檢測效率及速度之間取得了完美的平衡點,從下表可看出,目前最受矚目的YOLO V3在平均精度mAP(Mean Average Precision)指標上不但分數相當高,辨識時間更是獨佔鼇頭。

Object detection的原理

假設我們有一張相片如下,目的是要檢測出斑馬線上的行人加以框選:

A) 最簡單的方式:

1) 先將整張相片劃分為3×3 九個區塊。

2) 接著將這九張相片分別送入圖片分類模型檢測是否有人,會得到如下的圖片,紅框表示該張圖片被分類為有人。

3) 這是最基礎的檢測方式,不過這樣看來是不太精確的,我們希望能完整的框選出人,並且避開其它無關的區域。所以將原本3×3改用由小至大更多的區域來劃分,並且送至模型進行分類,最終圖片會變成如下。不過在這裏發現了一個新問題,就是同一個物件會被相當多個box所框選,因此一需要透過「Non-maxima suppression」方法去除多餘留下最適合的box。

前述所提到的「將圖片由小至大更多的區域來劃分」的方法其實就是影像金字塔加上sliding box,這個方法會將圖片依次縮小後透過一個固定窗格取得一塊塊box area送給CNN進行分類,最後再針對多個重複的box area取最佳的bounding box。我們很快就查覺到這個方法的缺點:Image pyramids加上sliding box,不但相當冗餘,而且會產生很多需要執行CNN分類的box area,速度相當慢,例如下面的Image pyramids+sliding box 示範。

 B) 拋棄Image pyramids+Sliding window:

由於Image pyramids+Sliding window會產生太多待CNN處理的圖形區域且速度效率不彰,因此考慮改為如下方式:

  1. 直接將影像切分得更多(假設為10×10)。
  2. 定義每個區域影像的中心點(centroid,往後的章節中我們稱為anchor)。
  3. 以anchor為基準取數種固定比例寬高的區域,而非sliding window方式描過整張圖片。

4. 將這些區域圖片送進CNN進行分類,若分類為行人則繪製box,再進行Non-maxima suppression。

此種方式大幅減少了需要處理和分類的影像區域,產生的box也少了很多,不過框選出的物體並不是非常準確。

C) 改進影像區域的選擇:

  1. 再將影像切分得更細(例如20×20)。
  2. 針對每個 anchor以其為中心取更多的不同比例長寬的區域,我們稱這些區域為region proposal,如下圖為九個。(圖片引用自https://www.quora.com/How-does-the-region-proposal-network-RPN-in-Faster-R-CNN-work

https://qph.ec.quoracdn.net/main-qimg-254d27efab5509cdd90fff7221863066

3. 不過,由於將相片切分得更細以及增加更多的region proposal,針對CNN分類效率上並沒有完美的解決,因此,我們是否能從這些RPN中僅選擇有可能包含物件的去作圖片分類,而不要全部都丟進去呢?

改善的方法是,我們先建立一個簡單的分類器,用來判斷影像是背景或有包含物件,該分類器會在這些 region proposals送至CNN之前,篩選出可能包含有物件的regions,而不會把全部的region proposal都送至CNN作分類,這樣可以降低需要CNN分類的次數。這種進行選擇區域的中介分類器,稱為Selective search(註)。

註:R-CNN的Selective search還會進行merge,先以 Graph base image segmentation 取得一些區域以計算區域間的相似度,每次合併相似度最高的兩個區域,直到整張圖片成為單一區域為止。

透過上述方式,我們發現Object detection的結果較為完美了。

然而,處理的時間還是很長,這是由於selective search所選出的region proposal數目還是太多(2,000個),且都需要執行CNN分類的緣故

​ D) 改用 CNN來選擇影像區域:

考慮到這些region proposals很多都是類似或重複重疊的區域,如果能夠將整張圖片先run過一次 CNN,再將這些由CNN取出的向量特徵直接給selective search來決定可能包含物件的box area就比較省時且有效率了,這是Fast R-CNN的想法(稱為RoIPooling, Region of Interest Pooling)。

改進了region proposals的CNN分類效率問題,的確讓Fast R-CNN較前代提昇了近25倍的速度,但是用以產生region proposal、速度也緩慢的selective search則變為拖慢速度的瓶頸了,所以Fast R-CNN的下一代 Faster R-CNN乾脆直接丟棄了預先篩選 region proposals的傳統作法,改從CNN產出的feature map直接選出,如此一來,CNN便取代了region proposal以及selective search。

從R-CNN到Faster R-CNN,在mAP相當接近的分數下,可看出三代的版本速度有巨幅的提昇。

https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/more_images/FasterRCNNSpeedComparison.png

​ E) YOLO

全稱為「You Only Look Once」的YOLO是目前最受囑目也最流行的Object detection,與傳統必須先選出region proposals再分別進行image classification以及bounding box regression不同,YOLO將整張圖輸入模型便可輸出bounding box資訊以及物件類別機率,比較如下:

preview

YOLO的流程簡要如下:

https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/assets/b9d4a482-d983-11e6-8d5b-34d859c60a6d.png

  1. 將圖片resize為448×448。
  2. 輸入CNN model。
  3. 將預測出的所有物件bounding box透過NMS留下最佳。

Step 1~2:

1. 每一個網格的大小是64×64。

2. 每個網格要預測B個bbox。

3. 每個bbox要預測(x,y,w,h)值以及是否有物件的bb2 confidence值,以每個classes的score。

假設我們要預測的class有20個,所以每個網格的tensor shape長度為5 (值) x 2(組bbox) + 20個classes的預測score,這些都在CNN model中處理。

在最後使用NMS保留預測score最高的box並輸出結果。

YOLO在目前普遍流行的原因,除了作者將全部的技術論文及程式碼都開源之外,主要在於它的辨識速度及效果達到了完美的平衡。下圖為摘自官方網站的比較,同樣使用微軟的Coco image dataset,衡量識別精度的指標mAP(mean average precision)、衡量GPU效率的指標每秒浮點運算次數FLOPS(Floating-point operations per second)、以及衡量 CPU/GPU效率的FPS(Frames Per Seconds),YOLO皆居於領先的地位。

接下來,我們可試著訓練自己的YOLO model以便應用在感興趣的物件上,此部份將在下一篇說明。

原文連結

Latest posts by Cheng Hsun Tseng (see all)

    Contact

    Contact
    • Category
      No Category

    Project簡述

    Project簡述
    • 簡述
      所謂的「Object detection」是在影像分類(image classifier)基礎上加入localization(定位)功能的延伸。電腦視覺有了Object detection的輔助,自駕車就能精確的判斷四週環境及前方人物動態、也能讓居家安全系統精確的辨識外人入侵,應用於農業科技則可定位果實位置、找到蟲害及缺陷
    • 作者
      chtseng

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容