吳恩達深度學習筆記(92)-目標檢測之目標定位

這一週我們學習的主要內容是對象檢測,它是計算機視覺領域中一個新興的應用方向,相比前兩年,它的性能越來越好。在構建對象檢測之前,我們先了解一下對象定位,首先我們看看它的定義。

吳恩達深度學習筆記(92)-目標檢測之目標定位

圖片分類任務我們已經熟悉了,就是算法遍歷圖片,判斷其中的對象是不是汽車,這就是圖片分類。

這節課我們要學習構建神經網絡的另一個問題,即定位分類問題。這意味著,我們不僅要用算法判斷圖片中是不是一輛汽車,還要在圖片中標記出它的位置,用邊框或紅色方框把汽車圈起來,這就是定位分類問題。

其中“定位”的意思是判斷汽車在圖片中的具體位置

這周後面幾天,我們再講講當圖片中有多個對象時,應該如何檢測它們,並確定出位置。比如,你正在做一個自動駕駛程序,程序不但要檢測其它車輛,還要檢測其它對象,如行人、摩托車等等,稍後我們再詳細講。

本週我們要研究的分類定位問題,通常只有一個較大的對象位於圖片中間位置,我們要對它進行識別和定位。而在對象檢測問題中,圖片可以含有多個對象,甚至單張圖片中會有多個不同分類的對象。因此,圖片分類的思路可以幫助學習分類定位,而對象定位的思路又有助於學習對象檢測,我們先從分類和定位開始講起。

圖片分類問題你已經並不陌生了,例如,輸入一張圖片到多層卷積神經網絡。這就是卷積神經網絡,它會輸出一個特徵向量,並反饋給softmax單元來預測圖片類型。

吳恩達深度學習筆記(92)-目標檢測之目標定位

如果你正在構建汽車自動駕駛系統,那麼對象可能包括以下幾類:行人、汽車、摩托車和背景,這意味著圖片中不含有前三種對象,也就是說圖片中沒有行人、汽車和摩托車,輸出結果會是背景對象,這四個分類就是softmax函數可能輸出的結果。

吳恩達深度學習筆記(92)-目標檢測之目標定位

這就是標準的分類過程,如果你還想定位圖片中汽車的位置,該怎麼做呢?我們可以讓神經網絡多輸出幾個單元,輸出一個邊界框。具體說就是讓神經網絡再多輸出4個數字,標記為b_x,b_y,b_h和b_w,這四個數字是被檢測對象的邊界框的參數化表示。

我們先來約定本週課程將使用的符號表示,圖片左上角的座標為(0,0),右下角標記為(1,1)。

要確定邊界框的具體位置,需要指定紅色方框的中心點,這個點表示為(b_x,b_y),邊界框的高度為b_h,寬度為b_w。因此訓練集不僅包含神經網絡要預測的對象分類標籤,還要包含表示邊界框的這四個數字,接著採用監督學習算法,輸出一個分類標籤,還有四個參數值,從而給出檢測對象的邊框位置。

此例中,b_x的理想值是0.5,因為它表示汽車位於圖片水平方向的中間位置;b_y大約是0.7,表示汽車位於距離圖片底部3/10的位置;b_h約為0.3,因為紅色方框的高度是圖片高度的0.3倍;b_w約為0.4,紅色方框的寬度是圖片寬度的0.4倍。

吳恩達深度學習筆記(92)-目標檢測之目標定位

下面我再具體講講 如何為監督學習任務定義目標標籤 y?

吳恩達深度學習筆記(92)-目標檢測之目標定位

請注意,這有四個分類,神經網絡輸出的是這四個數字和一個分類標籤,或分類標籤出現的概率。目標標籤y的定義如下:

吳恩達深度學習筆記(92)-目標檢測之目標定位

它是一個向量,第一個組件p_c表示是否含有對象,如果對象屬於前三類(行人、汽車、摩托車),則p_c=1,如果是背景,則圖片中沒有要檢測的對象,則p_c=0。

我們可以這樣理解p_c,它表示被檢測對象屬於某一分類的概率,背景分類除外。

如果檢測到對象,就輸出被檢測對象的邊界框參數b_x、b_y、b_h和b_w。最後,如果存在某個對象,那麼p_c=1,同時輸出c_1、c_2和c_3,表示該對象屬於1-3類中的哪一類,是行人,汽車還是摩托車。鑑於我們所要處理的問題,我們假設圖片中只含有一個對象,所以針對這個分類定位問題,圖片最多隻會出現其中一個對象。

吳恩達深度學習筆記(92)-目標檢測之目標定位

我們再看幾個樣本,假如這是一張訓練集圖片,標記為x,即上圖的汽車圖片。而在y當中,第一個元素p_c=1,因為圖中有一輛車,b_x、b_y、b_h和b_w會指明邊界框的位置,所以標籤訓練集需要標籤的邊界框。圖片中是一輛車,所以結果屬於分類2,因為定位目標不是行人或摩托車,而是汽車,所以c_1=0,c_2=1,c_3=0,c_1、c_2和c_3中最多隻有一個等於1。

這是圖片中只有一個檢測對象的情況,如果圖片中沒有檢測對象呢?如果訓練樣本是這樣一張圖片呢?

吳恩達深度學習筆記(92)-目標檢測之目標定位

這種情況下,p_c=0,y的其它參數將變得毫無意義,這裡我全部寫成問號,表示“毫無意義”的參數,因為圖片中不存在檢測對象,所以不用考慮網絡輸出中邊界框的大小,也不用考慮圖片中的對象是屬於c_1、c_2和c_3中的哪一類

針對給定的被標記的訓練樣本,不論圖片中是否含有定位對象,構建輸入圖片x和分類標籤y的具體過程都是如此。這些數據最終定義了訓練集。

最後,我們介紹一下神經網絡的損失函數,其參數為類別y和網絡輸出^y,如果採用平方誤差策略,則L(^y,y)=(^(y_1 )-y_1 )^2+(^(y_2 )-y_2 )^2+⋯(^(y_8 )-y_8 )^2,

吳恩達深度學習筆記(92)-目標檢測之目標定位

損失值等於每個元素相應差值的平方和。

吳恩達深度學習筆記(92)-目標檢測之目標定位

如果圖片中存在定位對象,那麼y_1=1,所以y_1=p_c,同樣地,如果圖片中存在定位對象,p_c=1,損失值就是不同元素的平方和。

另一種情況是,y_1=0,也就是p_c=0,損失值是((y^_1 )-y_1 )^2,因為對於這種情況,我們不用考慮其它元素,只需要關注神經網絡輸出p_c的準確度

回顧一下,

當y_1=1時,也就是這種情況(編號1),平方誤差策略可以減少這8個元素預測值和實際輸出結果之間差值的平方。

如果y_1=0,y 矩陣中的後7個元素都不用考慮(編號2),只需要考慮神經網絡評估y_1(即p_c)的準確度。

為了讓大家瞭解對象定位的細節,這裡我用平方誤差簡化了描述過程。

實際應用中,你可以不對c_1、c_2、c_3和softmax激活函數應用對數損失函數,並輸出其中一個元素值,通常做法是對邊界框座標應用平方差或類似方法,對p_c應用邏輯迴歸函數,甚至採用平方預測誤差也是可以的。

以上就是利用神經網絡解決對象分類和定位問題的詳細過程,結果證明,利用神經網絡輸出批量實數來識別圖片中的對象是個非常有用的算法

下節課,我想和大家分享另一種思路,就是把神經網絡輸出的實數集作為一個迴歸任務,這個思想也被應用於計算機視覺的其它領域,也是非常有效的,所以下節筆記見。


分享到:


相關文章: