Object detection的由來
最近Andrew Ng開了一堂深度學習的課,非常適合初學者學習,裡面有一系列課程,分別為
1.Neural Networks and Deep Learning
2.Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
3.Structuring Machine Learning Projects
4.Convolutional Neural Networks
5.Sequence Models
小編上了其中一堂,裡面非常詳細的講解object detection的由來以及YOLO的運作原理,上完這堂課令我茅塞頓開,許多以前懵懵懂懂的概念經過這堂課的洗禮後就清楚許多了,且coursera的教學方式本身我就非常的喜歡,上課時不只教學而已,課堂後也都會有小考試測試您對這章節所講述的概念有無理解,且還會有程式實作的作業,寫完作業後馬上就可以上傳伺服器來打分數,非常有效率。底下附上課程的連結:
https://www.coursera.org/learn/convolutional-neural-networks?specialization=deep-learning
小編這堂課上的是第四堂,主要講解的是深度學習中的主流網路-卷積神經網路,底下將整理一些小編在這堂課學習到的內容
1.classification:
下圖是一個CNN非常典型的例子,輸入一张圖片後來分辨圖片的種類,這是小編剛接觸深度學習時最初知道的概念,以為網路的功用即是做物件分類罷了。但慢慢學習之後才知道網路無所不能,只要丟入適當的input與output,網路甚至能告訴你物件在圖片中的位置並把它框出來,這類網路在學術界中稱為object detection model。
2.sliding window detection
早先最開始的概念是訓練各種不同大小的網路,然後在圖片上以滑動窗格的方式來尋找物體,如下圖所示,紅色的框框代表三個input size不同的CNN網路,藉由不同大小的框框分別在圖上滑動來預測物體,只要網路的信心大於一定值則可推斷框框所停的位置有極大的機率出現物體,因此我們就可以得知物體的位置並把框框畫出來。
3.implement sliding window to CNN(Overfeat)
但是前一個方法實在是需要花費許多時間,每滑動一個窗格就要將圖片輸入網路中做預測,假設總共需滑動100次窗格且預測一次的時間需要花一秒,那麼整個找尋物體的時間就要花費100秒阿,實在礦日又費時。
這時有另外一篇論文Overfeat發表出來並聲稱其實只要做一次預測即可,下面的圖即解釋如何做到的。假設輸入圖的大小是14X14X3,輸出為1X1X4,也就是此網路是具有四個類別的分類網路,輸入一次的時候就像圖片上方的例子。假設圖片大小增加至16X16X3,按照剛剛sliding window的概念則須將四張圖片分別輸入網路中求預測,但仔細看圖可以發現只有黃色的部分是多出來的計算,其他藍色的部分都是重複的計算,既然可以計算一次就好,那為什麼要運算那些重複計算的部份呢?因此論文中主張將整張大圖一起放進CNN中進行同時運算。如下半部圖所表示的,原本要做四次的運算可以只縮成一次即可,最後的結果則相當於用上半部的方法重複做四次的結果,此方法相比原本的sliding window,真是又快又好阿。
下面即展示一個實際的例子,輸入一张圖28X28的圖片則產生出8X8個sliding window的預測結果,雖然此方法相比sliding window加速許多但卻有個致命問題,框框往往都沒有框很準確
4.classification with localization
既然前一個方法不太準確,那有學者就開始想,不然我把物體框框的資訊提供給網路好了,沒想到網路還真得可以學習成功,做法很簡單,除了原本的類別外只要再新增物體框的資訊即可,即圖上所顯示的,將車子的左上角x,y座標以及框框的長與寬資訊通通送進網路中訓練
5.Yolo: You look only for once
過了不久後Yolo就橫空出世了,想法在當時非常新穎且速度非常快,經過不斷的研發改良目前已經出到第三個版本了,有興趣的朋友可以觀看以下連結
Yolo v3連結
在這裡描述的是Yolo v1的方法,假設有一张圖片,作者會把它切割成九個cell,每個cell中都會有八個維度,如圖上所表示的
因此,組成的網路示意圖大概如下,
6.Non-max suppression
實作的時候通常都會把cell切的很細,因此一個物體可能被多個cell預測到,所以就會產生如下的圖,一個物體的周圍會有需有box產生,利用NMS演算法就可以把一些多餘的box剔除產生出最優的兩個,演算法過程如下:
1.選擇機率最高的bounding box
2.去除IOU和此bounding box大於N的box(N通常設0.5)
重複以上步驟即可把多餘的bounding box都去除只剩下圖上最好的兩個也就是圖上較亮色的框框
7.Anchor box
之前Grid cell只能一個cell預測一個物件但遇到多個物件時就無法預測了,這時就加入另一個概念稱做Anchor box,一個cell中可以有多個Anchor box,並且可以設計不同的長寬比例,如下面的例子,車子以及人在同一個區域出現,若按照以往cell的概念來學習的話則網路只能忍痛選擇一個物件來學習,另一個物件只能無奈的選擇放棄,但加入Anchor的網路可以兩者都學習,而且還可以選擇適合的Anchor box做學習,像車子的形狀是屬於寬大於高的,因此Anchor box2就很適合車子學習,而Anchor box1就比較適合人來學習。實際上做Anchor box匹配的時候會計算物體以及Anchor box的IOU,之後會將物體匹配給最高的IOU的Anchor box
8.landmark detection
既然預測框框可以成功,後續就有學者做更多的嘗試用來預測臉的輪廓、人的骨架系統…等,如此預測打點的網路稱做landmark detection,同樣的也是適當的改變輸出輸出資訊即可。若要預測出一個點,則網路的輸出就分別是L_1x,L_1y,因此N個點就有2N個神經元的輸出,
像這類的網路目前已大量運用在人臉偵測系統當中,使用者可以使用此種網路對人臉做輪廓預測,更近一步的,系統可以分析這些輪廓的線形來偵測人臉的表情,例如系統若發現嘴巴那部分的landmark弧形是向下的則可得知目前此人可能心情不太愉快,相反的若弧形朝上則可以推測此人目前心情愉悅正開懷大笑中。
留言列表