目標檢測入門_下(吳恩達老師深度學習課程筆記)

 

目錄

交互比(Intersection over union)

非極大值抑制(Non-max suppression)

Anchor Boxes

YOLO算法

候選區域(Region proposals )


交互比(Intersection over union)

交互比可以用來判斷檢測算法的好壞

黃色面積除以綠色面積,IoU的面積>0.5(閾值),則檢測正確。

非極大值抑制(Non-max suppression)

假設需要在這張圖片裏檢測汽車,按照上個博客中提到的bounding box方法,假設上面放個19×19網格,這輛車只有一箇中點,所以理論上應該只有一個格子做出有車的預測。但是在實踐中,對於每個格子都運行一次目標定位算法,會可能讓多個格子都認爲這個車的中點在這個格子內,即最後可能會對同一個對象做出多次檢測,而非極大值抑制就是確保一輛車只檢測一次,而不是每輛車都觸發多次檢測。

具體做法:這裏的公式簡化了,假設只檢測一類C1,所以Pc直接用C1代替,Pc表示是C1類別的概率(實際上是Pc乘以c1c2c3 )。

先把概率小於0.6的預測格子刪除(這樣可以加快運算速度),如下圖。

注 :這裏藍色框可以大於劃分的小格,是因爲bw,bh可以大於1(上篇博客有講)。

接下來剩下的邊界框,就一直選擇概率Pc最高的邊界框,然後把它輸出成預測結果(高亮),同時把剩下邊界框與下圖高亮的邊界框有高IoU值的邊框去掉。

這裏的一直選擇很重要,等於是先選出概率爲0.9的這個框,然後通過非極大值抑制(即去除高IoU),去除麪包車旁的兩個框,然後再剩下的框中選擇概率爲0.8的框,然後循環迭代,直到沒有多餘的框

這樣就實現了每次只用一個框識別出一個車,每個車都只被檢測一次,如果直接選擇最高概率的框,這隻能一張圖中只能檢測到一輛汽車了。

Anchor Boxes

讓一個格子檢測出多個對象的方法。

      

假設要分類兩個目標,車和行人,則預先定義幾個不同形狀的anchor box(人工設定,也有自動的一些算法),這裏舉例兩個,然後輸出的Y則是之前兩個y合併的向量。

之前Y的輸出是3×3×8,現在有兩個anchor box後,Y的輸出是3×3×16,預測出的兩個框(紫色),和標記的紅框相比,選擇IoU(交互比)高的作爲預測框

YOLO算法

構造訓練集:

(定義了兩個anchor box)

實踐中,會把格子劃分的更小如19×19,anchor box設置的更多如5個

中間的省略號是 卷積神經網絡(其中全連接層用卷積層代替,所以可以輸出一個3×3×16的張量,表示有3×3個y)

YOLO檢測過程

首先每個格子預測出兩個anchor box

 然後去掉概率值低的anchor box

然後對每個分類目標運行非極大值抑制方法得到最終的預測結果。

候選區域(Region proposals )

典型代表是著名的R-CNN的算法,意思是帶區域的卷積神經網絡。這個算法嘗試選出一些區域,在這些區域上運行卷積網絡分類器是有意義的,而不需要對整個圖像的每個格子都運行檢測算法,而是隻選擇一些窗口,在少數窗口上運行卷積神經網絡。

選出候選區域的方法是運行圖像分割算法,分割出不同的色塊,然後在每個色塊上運行分類器,最後輸出一個標籤和邊界框。

但實際上會分割出很多色塊,導致R-CNN算法太慢了,所以這些年來有一些對R-CNN算法的改進工作

例如 —

fast R-CNN在分割出的每個色塊中運行卷積實現的滑動窗口(即沒有全連接層)

faster R-CNN使用卷積神經網絡而不是傳統的分割算法來獲得候選區域色塊

注:吳恩達老師認爲大多數Faster R-CNN的算法實現還是比YOLO算法慢很多,雖然候選區域是一個有趣的想法,但這個方法需要兩步,首先得到候選區域,然後再分類,這不如YOLO可以只看一次更直接。