吳恩達深度學習筆記12-Course4-Week3【目標檢測】

目標檢測(Object detection)


一、目標定位(Object Localization)

圖像識別的三個層次:

  • 圖像分類:判斷圖像中是否包含某一類物體,並且假定每張圖像只有一個目標。
  • 目標定位:既要圖像分類,還要輸出這個目標位置。
  • 目標檢測:檢測出圖像包含的所有感興趣的目標,並定位。
    這裏寫圖片描述

目標定位:
需要修改輸出層的結構,和數據集的標籤。輸出層不僅要輸出各類別的概率,還要輸出目標的位置座標。
這裏寫圖片描述
損失函數和標籤:

  • Pc:表示是否包含要檢測目標。如果不包含爲0,其它的輸出沒有意義。
  • 根據情況,可以對不同的輸出元素使用不同的損失函數,如:對多類別概率使用交叉熵損失函數;對邊界框值使用平方誤差; 對Pc使用 logistic regression 損失函數。
    這裏寫圖片描述

二、特徵點檢測(Landmark Detection)

在訓練標籤中添加特徵點,並修改模型的輸出層使其輸出特徵點座標值,從而實現特徵點檢測。

兩個例子:

  • 人臉表情識別:通過標定數據集中特徵點的位置信息,來對人臉進行不同位置不同特徵的定位和標記。AR的應用就是基於人臉表情識別來設計的,如臉部扭曲、增加頭部配飾等。
  • 人體姿態檢測:通過對人體不同的特徵位置關鍵點的標註,來檢測人體的姿態。
    這裏寫圖片描述

三、目標檢測(Object Detection)

訓練了一個分類模型。

  • 輸入X:將有目標的圖片進行適當的剪切,使圖像剛好只包括目標,訓練集中也應包含沒有目標的圖像。
  • 標籤Y:有目標爲1,沒目標爲0。
    這裏寫圖片描述
    實現目標檢測:把圖像裁剪成任意大小(可用滑動窗口實現),輸入分類器,即可判別出是否包含目標同時也知道了目標的位置。

四、卷積的滑動窗口實現(Convolutional Implementation of Sliding Windows)

滑動窗口檢測:

設置一系列尺寸不同的方框,每一種方框都從左向右、從上往下有規律的遍歷圖像,把每一個方框包含的圖片區域輸入不同的分類器,進行分類判別。即可實現目標檢測。

缺點是計算成本太大,方框尺寸的細分程度對定位的精度(粗粒度)影響很大。
這裏寫圖片描述
卷積層替代全連接層:

利用1×1的卷積替代全連接層。
這裏寫圖片描述
卷積實現滑動窗口:

不用把圖片進行分割後輸入模型,而是把這張圖片輸入到卷積神經網絡中進行計算,因爲各子圖重疊部分可以共享大量的計算。只需一次前向傳播,就可以同時得到所有子圖的預測值。
輸出層尺寸爲 :橫向子圖數 x 縱向子圖數 x 類別數
這裏寫圖片描述


五、預測邊界框(Bounding Box Predictions)

受邊界框尺寸的細分程度的影響,預測結果和實際目標邊框可能會有偏離。
這裏寫圖片描述
YOLO 算法很好的解決邊界框不準確的問題,下面會講。

邊界框值的意義:

  • bx by bh bw :目標的中心點 x、y 座標和高、寬值。值的大小都是相比于格子尺寸的比例值。
    這裏寫圖片描述

六、交併比(Intersection Over Union)

兩個邊框:實際邊框和預測邊框。
IoU = 邊框交集 / 邊框並集
這裏寫圖片描述


七、非極大值抑制(Non-max Suppression)

一個目標可能檢測出多個邊界框,用非極大值抑制解決。
這裏寫圖片描述
以某一個分類類別爲例:

  • 丟棄Pc小於一定值的預測結果,通常取0.5。
  • 選取Pc最大的邊界框,作爲一個正確的預測輸出。丟棄與該邊界框有高交併比(通常取大於0.5)的預測結果。
  • 重複上一個步驟,直到所有邊界框都被遍歷了。
    這裏寫圖片描述

八、Anchor Boxes

解決一個格子只能預測一個目標的不足。

  • 人工定義 Anchor Boxes 的形狀。標籤中對應於 Anchor Boxes 數量設置幾個預測標籤組合成一個大標籤。
  • 把目標分配到其邊框與某個Anchor Boxe有最大IoU的所屬格子的這個Anchor Boxe對應的那一組預測標籤中。
    這裏寫圖片描述
    這裏寫圖片描述

九、YOLO Algorithm

訓練:

  • 劃分網格:將圖片分割成n×n個小的圖片。
  • 根據目標的中心點,爲每個目標分配一個grid cell :中點在哪個grid cell ,就將該對象分配這個格子中,每個目標只分配給一個格子。
  • 數據標籤:對於每個 grid cell 都有一個包含分類和位置的標籤yi=[Pc bx by bh bw c1 c2 c3],因爲標籤的位置值的大小可以是任意值,相比於滑動窗口寬高比不再固定,因此能得到更精確的邊框。

    node: 這裏的yi標籤是沒有Anchor Boxes的,如果有Anchor Boxes應相應增加值。

  • 將 n×n 個格子的標籤合併起來,得到 n×n×8 的矩陣標籤。
  • 訓練模型。

    沒有Anchor Boxes:
    這裏寫圖片描述
    有Anchor Boxes:
    這裏寫圖片描述

預測:

  • 將圖片縮放成大小和模型要求一致後輸入模型得到大小爲n×n×8的預測輸出。即可得到分類類別和邊框位置。
  • YOLO算法對於每張圖只進行一次前向傳播,算法運行速度快,基本達到實時應用的要求。
    這裏寫圖片描述

非極大值抑制:

  • 對每種類別單獨進行極大值抑制,輸出預測結果。
    這裏寫圖片描述

十、候選區域(Region Proposals)—— R-CNN

  • 把圖片分割成不同色塊,數量要遠遠小於窗口滑動的子圖數。
  • 把不同色塊的原圖輸入模型進行預測。並不信任輸入色塊的位置值,同樣要輸出邊界框的預測值。
    這裏寫圖片描述
    這裏寫圖片描述