3.7 非极大值抑制-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 3.6 交并比 | 回到目錄 | 3.8 Anchor Boxes |
非極大值抑制 (Non-max Suppression)
到目前為止你們學(xué)到的對象檢測中的一個問題是,你的算法可能對同一個對象做出多次檢測,所以算法不是對某個對象檢測出一次,而是檢測出多次。非極大值抑制這個方法可以確保你的算法對每個對象只檢測一次,我們講一個例子。
假設(shè)你需要在這張圖片里檢測行人和汽車,你可能會在上面放個19×19網(wǎng)格,理論上這輛車只有一個中點,所以它應(yīng)該只被分配到一個格子里,左邊的車子也只有一個中點,所以理論上應(yīng)該只有一個格子做出有車的預(yù)測。
實踐中當(dāng)你運行對象分類和定位算法時,對于每個格子都運行一次,所以這個格子(編號1)可能會認(rèn)為這輛車中點應(yīng)該在格子內(nèi)部,這幾個格子(編號2、3)也會這么認(rèn)為。對于左邊的車子也一樣,所以不僅僅是這個格子,如果這是你們以前見過的圖像,不僅這個格(編號4)子會認(rèn)為它里面有車,也許這個格子(編號5)和這個格子(編號6)也會,也許其他格子也會這么認(rèn)為,覺得它們格子內(nèi)有車。
我們分步介紹一下非極大抑制是怎么起效的,因為你要在361個格子上都運行一次圖像檢測和定位算法,那么可能很多格子都會舉手說我的 pcp_cpc? ,我這個格子里有車的概率很高,而不是361個格子中僅有兩個格子會報告它們檢測出一個對象。所以當(dāng)你運行算法的時候,最后可能會對同一個對象做出多次檢測,所以非極大值抑制做的就是清理這些檢測結(jié)果。這樣一輛車只檢測一次,而不是每輛車都觸發(fā)多次檢測。
所以具體上,這個算法做的是,首先看看每次報告每個檢測結(jié)果相關(guān)的概率 pcp_cpc? ,在本周的編程練習(xí)中有更多細(xì)節(jié),實際上是 pcp_cpc? 乘以 c1、c2c_1、c_2c1?、c2? 或 c3c_3c3? 。現(xiàn)在我們就說,這個 pcp_cpc? 檢測概率,首先看概率最大的那個,這個例子(右邊車輛)中是0.9,然后就說這是最可靠的檢測,所以我們就用高亮標(biāo)記,就說我這里找到了一輛車。這么做之后,非極大值抑制就會逐一審視剩下的矩形,所有和這個最大的邊框有很高交并比,高度重疊的其他邊界框,那么這些輸出就會被抑制。所以這兩個矩形分別是0.6和0.7,這兩個矩形 pcp_cpc? 和淡藍(lán)色矩形重疊程度很高,所以會被抑制,變暗,表示它們被抑制了。
接下來,逐一審視剩下的矩形,找出概率最高, pcp_cpc? 最高的一個,在這種情況下是0.8,我們就認(rèn)為這里檢測出一輛車(左邊車輛),然后非極大值抑制算法就會去掉其他loU值很高的矩形。所以現(xiàn)在每個矩形都會被高亮顯示或者變暗,如果你直接拋棄變暗的矩形,那就剩下高亮顯示的那些,這就是最后得到的兩個預(yù)測結(jié)果。
所以這就是非極大值抑制,非最大值意味著你只輸出概率最大的分類結(jié)果,但抑制很接近,但不是最大的其他預(yù)測結(jié)果,所以這方法叫做非極大值抑制。
我們來看看算法的細(xì)節(jié),首先這個19×19網(wǎng)格上執(zhí)行一下算法,你會得到19×19×8的輸出尺寸。不過對于這個例子來說,我們簡化一下,就說你只做汽車檢測,我們就去掉 c1、c2c_1、c_2c1?、c2? 和 c3c_3c3? ,然后假設(shè)這條線對于19×19的每一個輸出,對于361個格子的每個輸出,你會得到這樣的輸出預(yù)測,就是格子中有對象的概率( pcp_cpc? ),然后是邊界框參數(shù)( bx、by、bhb_x、b_y、b_hbx?、by?、bh? 和 bwb_wbw? )。如果你只檢測一種對象,那么就沒有 c1、c2c_1、c_2c1?、c2? 和 c3c_3c3? 這些預(yù)測分量。多個對象處于同一個格子中的情況,我會放到編程練習(xí)中,你們可以在本周末之前做做。
現(xiàn)在要實現(xiàn)非極大值抑制,你可以做的第一件事是,去掉所有邊界框,我們就將所有的預(yù)測值,所有的邊界框 pcp_cpc? 小于或等于某個閾值,比如 pc≤0.6p_c\leq0.6pc?≤0.6 的邊界框去掉。
我們就這樣說,除非算法認(rèn)為這里存在對象的概率至少有0.6,否則就拋棄,所以這就拋棄了所有概率比較低的輸出邊界框。所以思路是對于這361個位置,你輸出一個邊界框,還有那個最好邊界框所對應(yīng)的概率,所以我們只是拋棄所有低概率的邊界框。
接下來剩下的邊界框,沒有拋棄沒有處理過的,你就一直選擇概率 pcp_cpc? 最高的邊界框,然后把它輸出成預(yù)測結(jié)果,這個過程就是上一張幻燈片,取一個邊界框,讓它高亮顯示,這樣你就可以確定輸出做出有一輛車的預(yù)測。
接下來去掉所有剩下的邊界框,任何沒有達(dá)到輸出標(biāo)準(zhǔn)的邊界框,之前沒有拋棄的邊界框,把這些和輸出邊界框有高重疊面積和上一步輸出邊界框有很高交并比的邊界框全部拋棄。所以while循環(huán)的第二步是上一張幻燈片變暗的那些邊界框,和高亮標(biāo)記的邊界重疊面積很高的那些邊界框拋棄掉。在還有剩下邊界框的時候,一直這么做,把沒處理的都處理完,直到每個邊界框都判斷過了,它們有的作為輸出結(jié)果,剩下的會被拋棄,它們和輸出結(jié)果重疊面積太高,和輸出結(jié)果交并比太高,和你剛剛輸出這里存在對象結(jié)果的重疊程度過高。
在這張幻燈片中,我只介紹了算法檢測單個對象的情況,如果你嘗試同時檢測三個對象,比如說行人、汽車、摩托,那么輸出向量就會有三個額外的分量。事實證明,正確的做法是獨立進(jìn)行三次非極大值抑制,對每個輸出類別都做一次,但這個細(xì)節(jié)就留給本周的編程練習(xí)吧,其中你可以自己嘗試實現(xiàn),我們可以自己試試在多個對象類別檢測時做非極大值抑制。
這就是非極大值抑制,如果你能實現(xiàn)我們說過的對象檢測算法,你其實可以得到相當(dāng)不錯的結(jié)果。但結(jié)束我們對YOLO算法的介紹之前,最后我還有一個細(xì)節(jié)想給大家分享,可以進(jìn)一步改善算法效果,就是anchor box的思路,我們下一個視頻再介紹。
課程板書
| 3.6 交并比 | 回到目錄 | 3.8 Anchor Boxes |
總結(jié)
以上是生活随笔為你收集整理的3.7 非极大值抑制-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.6 交并比-深度学习第四课《卷积神经
- 下一篇: 3.8 Anchor Boxes-深度学