該筆記介紹的是《卷積神經網絡》系列第三周:目標檢測 (2)YOLO算法
主要內容有:
1.YOLO算法思想
2.交並比
3.非最大抑制
4.Anchor Box
5.YOLO算法例子
YOLO算法思想
基本的滑動窗口對象檢測算法並不能精准描繪邊框,所以我們要學習一個能夠得到准確邊框的算法YOLO(You Only Look Ones)算法。
算法思想:在圖片上放置n*n的網格,並將圖像分類和定位算法運用到每個網格上面去。
與滑動窗口對象檢測算法的區別:
a.窗口滑動由放置網格取代,YOLO算法會對每個網格使用圖像分類和圖像定位算法,相比滑動窗口會大大的減少了運算量。
b.一個對象可能在多個網格中,YOLO算法會找到該對象的中心點,並把對象分給包含中心的網格。(bh,bw是可以大於網格大小,實踐中會使用更精細的去分割網格,所以對象會橫跨多個網格)
c.顯示的輸出邊界框架,讓神經網絡輸出的框架可以具有任意的寬高比,並且能輸出更精確的坐標。
*由於YOLO算法的特性使得,每個格子的對象不能超過一個,但是實踐過程中網格會分的很精細所以基本上不用擔心這個問題。
YOLO算法的輸出
由於YOLO算法是對每個網格進行運行,在視頻給出的例子中輸出結果3*3*8
3*3是圖片的分割的網格數量
8是輸出圖片預測和邊框位置等信息,其實就等於給出的標簽y的具體信息:
交並比(IOU)
計算兩個邊框交集和並集之比,IOU是用來衡量兩個邊框的重疊的大小。
交集/並集=
一般認為IOU>=α(閥值,一般人為約定為0.5)是可接受的,由不同場景可自己設置。
非最大抑制
抑制不是極大值的元素,搜索局部的極大值,確保每個對象只檢測一次。
YOLO算法在運行中存在一個問題,理論上圖片上每一個對象只存在一個中心點,實踐中可能會有幾個網格都會認為對象的中心在自己網格中。
於是就會生成多個邊框
非最大抑制的作用就是,對於每個對象只保留其Pc預測最大的值
非最大抑制用法
a.去掉IOU沒到達到閥值的邊框
while(存在剩下的邊框):
b.選擇概率Pc的邊框,輸出為預測結果
c.剩下邊框中所以和輸出邊框有很大的交並,則它們的輸出被抑制。
*如果存在多種類型的對象(即是c1,c2,c3),每種類型的對象要單獨運行最大抑制(不同類型對象的交並值會對結果產生影響)。
Anchor Box
使用Anchor Box可以讓一個檢測出多個對象(不同類別的)。
Anchor Box思路:
a.預先定義多個個不同形狀的的Anchor Box,Anchor Box的形狀是與預測結果關聯起來的。
b.現在每個對象都和以前一樣分配到同一個格子里面,但是現在還要分配到一個Anchor Box,分配的原則是比較並選擇該格子內對象與定義的Anchor Box不同形狀之間的IOU交並比最高的那個。
於是標簽y(對於視頻中的例子)就變成下圖這樣了,每一個Pc對應這一個Anchor Box形狀。
使用Anchor Box的好處:
a.處理兩個不同類型的對象出現在同一格子里面,實際情況中如果格子夠細致的話,一般不會出現兩個格子在一個對象里面的。
b.能夠讓算法更有針對行(監督學習),如果你的數據給出的對象的形狀大概相似。
如何選擇Anchor Box:
一般手動根據對象制定Anchor Box形狀,可以選擇5個到10個形狀,可以涵蓋你想要檢測對象的各種對象。
YOLO算法例子
上面講的都是構建YOLO算法中所需要知道的一些知識,下面就通過一個例子把所有的知識點穿插起來。
視頻使用的例子還是在圖片中檢測pedestrian(行人)、car(車)和motorcycle(摩托車)
輸出數據形狀是3x3x16:
a.3x3是分的格子形狀
b.16(=2x8)其中2是使用的Anchor Box的個數,8就是輸出的參數個數(Pc,bw,bx,bh,bw,c1,c2,c3)
輸出標簽y:
Anchor Box選擇:
使用Anchor Box 1表示pedestrian(行人),Anchor Box 2表示car(車)和motorcycle(摩托車),這里是不知道為什么摩托車沒Anchor形狀,所以我認為可能摩托車形狀與Anchor Box 2差不多。
使用卷積神經網絡訓練:
最后是使用非最大抑制:
沒有使用非最大抑制時,由於使用了兩個Another Box,每個格子都會有兩個檢測邊界框,只是Pc概率不同而以。
你需要做的是:
a.拋棄概率比較低的預測邊框
b.如果存在三個對象檢測的類別(行人,車和摩托車),對每一類單獨運行非最大抑制。這里的意思對於行人Anchor Box 1的形狀的概率明顯高於Anchor Box 2的概率。所以去掉Anchor Box 2形狀的邊框。