3.9 YOLO算法-深度學習第四課《卷積神經網絡》-Stanford吳恩達教授

YOLO 算法 (Putting it together: YOLO algorithm)

你們已經學到對象檢測算法的大部分組件了,在這個視頻裏,我們會把所有組件組裝在一起構成YOLO對象檢測算法。

在這裏插入圖片描述

我們先看看如何構造你的訓練集,假設你要訓練一個算法去檢測三種對象,行人、汽車和摩托車,你還需要顯式指定完整的背景類別。這裏有3個類別標籤,如果你要用兩個anchor box,那麼輸出 yy 就是3×3×2×8,其中3×3表示3×3個網格,2是anchor box的數量,8是向量維度,8實際上先是5( pc,bx,by,bh,bwp_c,b_x,b_y,b_h,b_w )再加上類別的數量( c1,c2,c3c_1,c_2,c_3 )。你可以將它看成是3×3×2×8,或者3×3×16。要構造訓練集,你需要遍歷9個格子,然後構成對應的目標向量 yy

在這裏插入圖片描述

所以先看看第一個格子(編號1),裏面沒什麼有價值的東西,行人、車子和摩托車,三個類別都沒有出現在左上格子中,所以對應那個格子目標 yy 就是這樣的, y=[0???????0???????]Ty=\left[\begin{matrix} 0 & ? & ? & ? & ? & ? & ? & ? & 0 & ? & ? & ? & ? & ? & ? & ? \end{matrix}\right]^T ,第一個anchor boxpcp_c 是0,因爲沒什麼和第一個anchor box有關的,第二個anchor boxpcp_c 也是0,剩下這些值是don’t care-s

現在網格中大多數格子都是空的,但那裏的格子(編號2)會有這個目標向量 yyy=[0???????1bxbybhbw010]Ty=\left[\begin{matrix} 0 & ? & ? & ? & ? & ? & ? & ? & 1 & b_x & b_y & b_h & b_w & 0 & 1 & 0 \end{matrix}\right]^T ,所以假設你的訓練集中,對於車子有這樣一個邊界框(編號3),水平方向更長一點。所以如果這是你的anchor box,這是anchor box 1(編號4),這是anchor box 2(編號5),然後紅框和anchor box 2的交併比更高,那麼車子就和向量的下半部分相關。要注意,這裏和anchor box 1有關的 pcp_c 是0,剩下這些分量都是don’t care-s,然後你的第二個 pc=1p_c=1 ,然後你要用這些( bx,by,bh,bwb_x,b_y,b_h,b_w )來指定紅邊界框的位置,然後指定它的正確類別是2( c1=0,c2=1,c3=0c_1=0,c_2=1,c_3=0 ),對吧,這是一輛汽車。

在這裏插入圖片描述

所以你這樣遍歷9個格子,遍歷3×3網格的所有位置,你會得到這樣一個向量,得到一個16維向量,所以最終輸出尺寸就是3×3×16。和之前一樣,簡單起見,我在這裏用的是3×3網格,實踐中用的可能是19×19×16,或者需要用到更多的anchor box,可能是19×19×5×8,即19×19×40,用了5個anchor box。這就是訓練集,然後你訓練一個卷積網絡,輸入是圖片,可能是100×100×3,然後你的卷積網絡最後輸出尺寸是,在我們例子中是3×3×16或者3×3×2×8。

接下來我們看看你的算法是怎樣做出預測的,輸入圖像,你的神經網絡的輸出尺寸是這個3×3×2×8,對於9個格子,每個都有對應的向量。對於左上的格子(編號1),那裏沒有任何對象,那麼我們希望你的神經網絡在那裏(第一個 pcp_c )輸出的是0,這裏(第二個 pcp_c )是0,然後我們輸出一些值,你的神經網絡不能輸出問號,不能輸出don’t care-s,剩下的我輸入一些數字,但這些數字基本上會被忽略,因爲神經網絡告訴你,那裏沒有任何東西,所以輸出是不是對應一個類別的邊界框無關緊要,所以基本上是一組數字,多多少少都是噪音(輸出 yy 如編號3所示)。

在這裏插入圖片描述

和這裏的邊界框不大一樣,希望 yy 的值,那個左下格子(編號2)的輸出 yy (編號4所示),形式是,對於邊界框1來說( pcp_c )是0,然後就是一組數字,就是噪音(anchor box 1對應行人,此格子中無行人, pc=0,bx=?,by=?,bh=?,bw=?,c1=?,c2=?,c3=?p_c=0,b_x=?,b_y=?,b_h=?,b_w=?,c_1=?,c_2=?,c_3=? )。希望你的算法能輸出一些數字,可以對車子指定一個相當準確的邊界框(anchor box 2對應汽車,此格子中有車, pc=1,bx,by,bh,bw,c1=0,c2=1,c3=0p_c=1,b_x,b_y,b_h,b_w,c_1=0,c_2=1,c_3=0 ),這就是神經網絡做出預測的過程。

在這裏插入圖片描述

最後你要運行一下這個非極大值抑制,爲了讓內容更有趣一些,我們看看一張新的測試圖像,這就是運行非極大值抑制的過程。如果你使用兩個anchor box,那麼對於9個格子中任何一個都會有兩個預測的邊界框,其中一個的概率 pcp_c 很低。但9個格子中,每個都有兩個預測的邊界框,比如說我們得到的邊界框是是這樣的,注意有一些邊界框可以超出所在格子的高度和寬度(編號1所示)。接下來你拋棄概率很低的預測,去掉這些連神經網絡都說,這裏很可能什麼都沒有,所以你需要拋棄這些(編號2所示)。

在這裏插入圖片描述

最後,如果你有三個對象檢測類別,你希望檢測行人,汽車和摩托車,那麼你要做的是,對於每個類別單獨運行非極大值抑制,處理預測結果所屬類別的邊界框,用非極大值抑制來處理行人類別,用非極大值抑制處理車子類別,然後對摩托車類別進行非極大值抑制,運行三次來得到最終的預測結果。所以算法的輸出最好能夠檢測出圖像裏所有的車子,還有所有的行人(編號3所示)。

這就是YOLO對象檢測算法,這實際上是最有效的對象檢測算法之一,包含了整個計算機視覺對象檢測領域文獻中很多最精妙的思路。你可以在本週的編程作業中嘗試現實這個算法,所以我希望你喜歡本週的編程練習,這裏還有一個可選的視頻,你們可以看,也可以不看,總之,我們下週見。

課程板書

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章