吳恩達深度學習筆記(94)-目標檢測之檢測算法

目標檢測(Object detection)

學過了對象定位和特徵點檢測,今天我們來構建一個對象檢測算法。這節課,我們將學習如何通過卷積網絡進行對象檢測,採用的是基於滑動窗口的目標檢測算法。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

假如你想構建一個汽車檢測算法,步驟是(以上圖為例),

首先創建一個標籤訓練集,也就是x和y表示適當剪切的汽車圖片樣本,這張圖片(編號1)x是一個正樣本,因為它是一輛汽車圖片,這幾張圖片(編號2、3)也有汽車,但這兩張(編號4、5)沒有汽車。出於我們對這個訓練集的期望,你一開始可以使用適當剪切的圖片,就是整張圖片x幾乎都被汽車佔據,你可以照張照片,然後剪切,剪掉汽車以外的部分,使汽車居於中間位置,並基本佔據整張圖片。

有了這個標籤訓練集,你就可以開始訓練卷積網絡了,輸入這些適當剪切過的圖片(編號6),卷積網絡輸出y,0或1表示圖片中有汽車或沒有汽車。訓練完這個卷積網絡,就可以用它來實現滑動窗口目標檢測,具體步驟如下。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

假設這是一張測試圖片,首先選定一個特定大小的窗口,比如圖片下方這個窗口,將這個紅色小方塊輸入卷積神經網絡,卷積網絡開始進行預測,即判斷紅色方框內有沒有汽車

吳恩達深度學習筆記(94)-目標檢測之檢測算法

滑動窗口目標檢測算法(哎,這個是重點)接下來會繼續處理第二個圖像,即紅色方框稍向右滑動之後的區域,並輸入給卷積網絡,因此輸入給卷積網絡的只有紅色方框內的區域,再次運行卷積網絡,然後處理第三個圖像,依次重複操作,直到這個窗口滑過圖像的每一個角落。

為了滑動得更快,我這裡選用的步幅比較大,思路是以固定步幅移動窗口,遍歷圖像的每個區域,把這些剪切後的小圖像輸入卷積網絡,對每個位置按0或1進行分類,這就是所謂的圖像滑動窗口操作。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

重複上述操作,不過這次我們選擇一個更大的窗口,截取更大的區域,並輸入給卷積神經網絡處理,你可以根據卷積網絡對輸入大小調整這個區域,然後輸入給卷積網絡,輸出0或1。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

以某個固定步幅滑動窗口,重複以上操作,遍歷整個圖像,輸出結果。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

然後第三次重複操作,這次選用更大的窗口

如果你這樣做,不論汽車在圖片的什麼位置,總有一個窗口可以檢測到它。

吳恩達深度學習筆記(94)-目標檢測之檢測算法

比如,將這個窗口(編號1)輸入卷積網絡,希望卷積網絡對該輸入區域的輸出結果為1,說明網絡檢測到圖上有輛車。

這種算法叫作滑動窗口目標檢測(咳咳,重點啊,同學們~),因為我們以某個步幅滑動這些方框窗口遍歷整張圖片,對這些方形區域進行分類,判斷裡面有沒有汽車。

滑動窗口目標檢測算法也有很明顯的缺點,就是計算成本,因為你在圖片中剪切出太多小方塊,卷積網絡要一個個地處理。如果你選用的步幅很大,顯然會減少輸入卷積網絡的窗口個數,但是粗糙間隔尺寸可能會影響性能。反之,如果採用小粒度或小步幅,傳遞給卷積網絡的小窗口會特別多,這意味著超高的計算成本。

所以在神經網絡興起之前,人們通常採用更簡單的分類器進行對象檢測,比如通過採用手工處理工程特徵的簡單的線性分類器來執行對象檢測。至於誤差,因為每個分類器的計算成本都很低,它只是一個線性函數,所以滑動窗口目標檢測算法表現良好,是個不錯的算法。

然而,卷積網絡運行單個分類人物的成本卻高得多,像這樣滑動窗口太慢。除非採用超細粒度或極小步幅,否則無法準確定位圖片中的對象。

不過,慶幸的是,計算成本問題已經有了很好的解決方案,大大提高了卷積層上應用滑動窗口目標檢測器的效率。

具體是怎麼解決的呢?

預知詳情,請聽下次講解~


分享到:


相關文章: