Convolutional Neural Networks — week 3

Kevin Chiu
CodingJourney
Published in
3 min readAug 12, 2019

Week 3: Object Detection

上一篇:week 2

下一篇:week 4

這週的主題是Object Detection(物體辨識),舉例來說就是在圖片上用紅框框出例如汽車或是其他物體的動作,然後並進一步辨識物體。

1. Object Localization

Localization就是指定位,在辨識物體時,不只要辨識,更要指出該物體的位置或甚至更多資訊。

Andrew針對Classification, Localization, Detection來做解釋

分類並定位:不只要能輸出物件的Label,也要輸出方位

更進一步來研究

參數:Pc參數為是否有這個object,之後參數分別為方位和物件label

下圖左下角為計算Lost function(在這個範例使用Squared error,也可以用其他的error方法)

2. Landmark detection 特徵點偵測

在物體辨識時我們不一定要用框框來作為辨識方法,也可用特徵點(Landmark)作為特徵的辨識座標,並一次輸出一個或多個座標L_1x, L_1y…。

需要特別注意的是,特徵點的標籤在不同圖片上必須要是一致的。例如,特徵點1固定是左眼角,特徵點2是右眼角…。

實際應用:Line, snapchat, instagram常用的臉部濾鏡特效很大一部分便是利用偵測臉上的特徵點並作進一步的操作。

3. Object Detection

在這章節,將學會如何利用Convnet加上Sliding windows detection(滑動視窗偵測法)來完成物件偵測。

拿車輛辨識來做範例:Car Detection

  1. ConvNet 訓練得出 y : 1有車 2無車

2. Sliding Windows Detection: 用不同大小的window來滑動偵測車輛

4. Convolutional Implementation of Sliding Windows

但過多的滑動window並每一次都餵進ConvNet會造成計算的負擔並讓整個偵測速度下降,要怎麼降低這個影響呢?

在這章節我們要學會用“卷積化”的方式來實作Sliding windows

— — — — — — —

首先,用Convolutional layer來取代Fully connected layer,如下圖

最左邊的圖是指一張圖片

我們將用上面的概念應用在接下來的範例

以下圖第二列圖第三列作為範例:

圖二(16*16*3) & 圖三(28*28*3)各經過一次卷積計算可以直接得到四個Sliding window計算完的結果,節省了多次sliding windows的計算時間

最上面的14*14*3是指一個window

左下需要計算多次(window slide的次數),卷積化的Sliding window法(右下)只需要計算一次,便能得到相同的結果

但這個演算法仍有些缺點,就是邊界框的位置不太準確,因此我們要在下一章節解決這問題。

5. Bounding Box Predictions: YOLO algorithm

下圖就是邊框不精準的情況,要怎麼解決呢?

我們將介紹演算法:YOLO

YOLO algorithm (You Only Look Once)

YOLO 演算法會把輸入圖片分割成多個grid,再把每個grid裡面有偵測到的物件的中心點座標標記出來(一個物件只會屬於其中一個grid),並劃出相關的外框

以下圖為例:其原理一樣是透過模型將圖片經過ConvNet,池化層,…等等的訓練,最終形成3*3*8的輸出。

下面是關於3*3*8的輸出中,第三個參數中物件座標的講解

物件的相對座標: 0<b_x, b_y <1 ; 物件的高度寬度座標: b_h, b_w 可>1

介紹完YOLO演算法,將在介紹一些其他的概念讓YOLO可以發揮得更好

#Andrew 並建議可以去讀YOLO paper,但警告難度很高!

6. Intersection Over Union

介紹完物件偵測的方法,但要怎麼知道你的偵測方法表現的好壞呢?

這章節將介紹一個評斷的方法:交集除以聯集(Intersection Over Union)

Intersction Over Union(IoU) ≥ 0.5 即可算正確的物件偵測(嚴格一點可能以0.6, 0.7作為基準...)

7. Non-max Suppression

目前的物件偵測方法的問題:你的演算法可能對同一個物件多次偵測。

Non-max Suppression便是要避免這個情況,讓演算法對同一個物件最多只會偵測到一次。

下左圖中,一台汽車本來應該只有一個中心點,因此只有各一個grid cell(包含該中心點的grid cell)會得到車子。但當每個格子都跑物件偵測演算法,可能讓四周的格子都以為自己含有車子的中心點,進而以為自己發現車子,如下左圖上色格子所示。

Non-max Suppression為了避免這個狀況,便會選出裡面Intersction Over Union(IoU)最大的作為偵測依據。

下面便是Non-max suppression algorithm的步驟:

8. Anchor Boxes

接著要解決的問題是:一個格子(grid cell)只能偵測一個物件那如果要讓一個格子可以同時偵測多個物件呢?

這邊要介紹Anchor Boxes來解決這個問題。

以下左圖為例:圖片中有車子和行人,他們的中心點在同一個grid cell當中,若以舊的偵測法,只會偵測出一種物件。

Anchor Boxes方法簡單來說會比對偵測到的物件形狀,是符合Anchor box 1 or Anchor box 2 ? 再將對應的物件資料放到y上,如下圖Anchor box example

9. YOLO Algorithm

結合上述的所有概念,我們回到YOLO物件偵測演算法的各個步驟演練。

(1) 訓練模型

(2) 對圖片預測

(3) 生成圖框(下圖最後會生成只有各一個圖框)

10. (Optional) Region Proposals

其他的物件偵測演算法被提出R-CNN,以兩段式的(先掃描哪裡可能有物件,再去預測),接著有多個相關的加速版的R-CNN演算法被提出。

但Andrew還是說,這些演算法的速度還是比不上ROLO演算法(一次完成所有偵測)。

#課堂作業 實作YOLO:Car detection with YOLOv2

--

--