目標定位(Object localization)
不僅要正確分類目標,還要找出目標所在位置
讓神經網絡多輸出幾個單元,輸出一個邊界框,具體說就是讓神經網絡再多輸出4個數字,bx,by,bh,bw,這四個數字是被檢測對象的邊界框的參數化表示
約定:圖片左上角記為(0,0),右下角記為(1,1),要想確定邊界框的具體位置,需要指定紅色方框的中心點,這個點表示(bx,by),邊界框的高度為bh,寬度為bw
因此,訓練集不僅包含神經網絡要預測的對象的分類標簽,還包含表示邊界框的這四個數字,接着采用監督學習算法,輸出一個分類標簽,還有這四個參數值,從而給出被檢測對象的邊界框位置。
此例中,bx的可能值時0.5,因為它表示汽車位於圖片水平方向的中間位置,by大概是0.7,表示汽車位於距離圖片底部3/10的位置,bh大約為0.3,因為紅色方框的高度是圖片高度的0.3倍,bw大約是0.4,因為紅色方框的寬度是圖片寬度的0.4倍
如何為監督學習任務定義目標標簽y
它是一個向量,第一個組件Pc表示是否含有對象,如果對象屬於前三類,則Pc=1;如果是背景,則圖片中沒有要檢測的對象,Pc=0。Pc可以表示被檢測對象屬於某一分類的概率,背景分類除外;接下來,如果檢測到對象,就輸出被檢測對象的邊界框參數bx,by,bh和bw;最后,如果存在某個對象,那么Pc=1,同時輸出c1,c2,c3,表示該對象屬於1-3中的哪一個類。
神經網絡的損失函數
Ground truth:y
網絡輸出:y^
通常的做法是對邊界框應用平方誤差或者類似方法,對Pc應用邏輯回歸函數
特征點檢測(Landmark detection)
假設你正在構建一個人臉識別應用,你希望算法可以給出眼角的具體位置,眼角的坐標為(x,y),你可以讓神經網絡的最后一層多輸出兩個數字lx和ly,作為眼角的坐標值;如果你想知道兩只眼睛的四個眼角的具體位置,那么從左到右,依次用四個特征點來表示這四個眼角,對神經網絡稍作修改,輸出第一個特征點(l1x,l1y),第二個特征點為(l2x,l2y),等等。因此這四個臉部特征點的位置就可以通過神經網絡輸出了。如果除了這四個點,你還想要得到更多的特征點輸出值,假設臉部有64個特征點,選擇這些特征點集合,並生成包含這些特征點的標簽訓練集,然后利用神經網絡輸出臉部關鍵特征點的位置。具體的做法是,准備一個卷積網絡和一些特征集,將人臉圖片輸入卷積網絡,輸出0或1。1表示有人臉,0表示沒有人臉,然后輸出(l1x,l1y),…直到(l64x,l64y),這里有129(=1+2x64)個輸出單元,由此實現對圖片的人臉檢測和定位。
如果你對人體姿態檢測感興趣,你可以定義一些關鍵特征點,比如說胸部的中點,左肩、腰等,然后通過神經網絡去學習。
目標檢測(Object Detection)
如何通過卷積網絡進行目標檢測?
采用基於滑動窗口(sliding windows)的目標檢測算法
假設你要構建一個汽車檢測算法,步驟如下:
1) 創建一個標簽訓練集,也就是X和Y,表示被剪裁后的汽車圖片(即整張圖片X幾乎都被汽車占據)樣本。
2)有了這個標簽訓練集,你就可以開始訓練卷積網絡了,輸入這些適當剪切過的圖像,卷積網絡輸出Y,0或1表示圖片中有汽車或者沒有汽車。
3)訓練完這個卷積網絡,就可以用它來實現滑動窗口目標檢測
具體步驟如下:
假設右圖是一張測試圖片,首先選定一個特定大小的窗口,比如圖片下方這個窗口,將這個紅色小方塊輸入卷積網絡,卷積網絡開始進行預測,即判斷紅色方框內有沒有汽車;滑動窗口目標檢測算法接下來會繼續處理第二個圖像即紅色方框稍微向右滑動之后的區域,並輸入給卷積網絡,依次重復操作。思路是以固定的步幅滑動窗口,遍歷圖像的每個區域,把這些剪切后的小圖像輸入到卷積網絡,對每個位置按0或1進行分類;重復上述操作,不過這次選擇一個更大的窗口,截取更大的區域,並輸入給卷積網絡處理,你可以根據卷積網絡對輸入大小的要求調整這個區域,然后輸入給卷積網絡,輸出0或1,遍歷整個圖像,輸出結果;然后第三次重復操作,選用更大的窗口。
使用這種方法,無論汽車在圖像中什么位置,總有一個窗口可以覆蓋到這個汽車,然后將這個輸入到卷積網絡,如果先前卷積網絡訓練的比較好,那么網絡輸入將會是1,說明網絡檢測到圖片上有車輛。
上面這種方法叫做滑動窗口目標檢測算法。
滑動窗口目標檢測算法有一個很明顯的缺點,就是需要大量的計算成本,因為你在圖片中剪切出太多小方塊,卷積網絡要一個一個地處理;如果你選用的步幅很大,雖然會減少輸入卷積網絡的窗口個數,但是粗粒度可能對影響性能,反之如果采用小粒度或者小步幅,傳遞給卷積網絡的小窗口會特別多,這意味着超高的計算成本。
在卷積神經網絡出來以前,由於采用的分類算法比較簡單,計算成本很低,因此滑動窗口目標檢測算法表現還算不錯;然而對於卷積神經網絡,計算成本卻很高。
滑動窗口不能輸出最精准的邊界框,目標比較新的算法YOLO可以解決這個問題,YOLO的介紹可以參考這篇文章:目標檢測算法YOLO算法介紹
內容主要來自與:
Andrew Ng的卷積神經網絡課程