3.8 Anchor Boxes
到目前為止,對象檢測中存在的一個問題是每個格子隻能檢測出一個對象,如果你想讓一個格子檢測出多個對象,你可以這麼做,就是使用 anchor box 這個概念,我們從一個例子開始講吧。
而 anchor box 的思路是,這樣子,預先定義兩個不同形狀的 anchor box,或者 anchorbox 形狀,你要做的是把預測結果和這兩個 anchor box 關聯起來。一般來說,你可能會用更多的 anchor box,可能要 5 個甚至更多,但對于這個視訊,我們就用兩個 anchor box,這樣介紹起來簡單一些。
總結一下,用 anchor box 之前,你做的是這個,對于訓練集圖像中的每個對象,都根據那個對象中點位置配置設定到對應的格子中,是以輸出 y 就是 3×3×8,因為是 3×3 網格,對于每個網格位置,我們有輸出向量,包含Pc,然後邊界框參數bx, b𝑦 , bℎ 和bw ,然後c 1 ,c2 ,c3 。
3.9 YOLO 算法(Putting it together: YOLO algorithm)
我們先看看如何構造你的訓練集,假設你要訓練一個算法去檢測三種對象,行人、汽車和機車,你還需要顯式指定完整的背景類别。這裡有 3 個類别标簽,如果你要用兩個 anchorbox,那麼輸出 y 就是 3×3×2×8,其中 3×3 表示 3×3 個網格,2 是 anchor box 的數量,8 是向量次元,8 實際上先是 5(pc,bx,by,bw )再加上類别的數量(c 1 ,c 2 ,c 3 )。你可以将它看成是 3×3×2×8,或者 3×3×16。要構造訓練集,你需要周遊 9 個格子,然後構成對應的目标向量y。
最後你要運作一下這個非極大值抑制,為了讓内容更有趣一些,我們看看一張新的測試圖像,這就是運作非極大值抑制的過程。如果你使用兩個 anchor box,那麼對于 9 個格子中任何一個都會有兩個預測的邊界框,其中一個的機率𝑞 𝑑 很低。但 9 個格子中,每個都有兩個預測的邊界框,比如說我們得到的邊界框是是這樣的,注意有一些邊界框可以超出所在格子的高度和寬度(編号 1 所示)。接下來你抛棄機率很低的預測,去掉這些連神經網絡都說,這裡很可能什麼都沒有,是以你需要抛棄這些(編号 2 所示)。
最後,如果你有三個對象檢測類别,你希望檢測行人,汽車和機車,那麼你要做的是,于每個類别單獨運作非極大值抑制,處理預測結果所屬類别的邊界框,用非極大值抑制來處理行人類别,用非極大值抑制處理車子類别,然後對機車類别進行非極大值抑制,運作三次來得到最終的預測結果。是以算法的輸出最好能夠檢測出圖像裡所有的車子,還有所有的行人(編号 3 所示)。這就是 YOLO 對象檢測算法,這實際上是最有效的對象檢測算法之一,包含了整個計算機視覺對象檢測領域文獻中很多最精妙的思路。
3.10 候選區域(選修)(Region proposals (Optional)
所謂的候選區域,這在計算機視覺領域是非常有影響力的概念。我把這個視訊定為可選視訊是因為我用到候選區域這一系列算法的頻率沒有那麼高,但當然了,這些工作是很有影響力的,
滑動窗法,你使用訓練過的分類器,在這些視窗中全部運作一遍,然後運作一個檢測器,看看裡面是否有車輛,行人和機車。現在你也可以運作一下卷積算法,這個算法的其中一個缺點是,它在顯然沒有任何對象的區域浪費時間。
是以這裡這個矩形區域(編号 1)基本是空的,顯然沒有什麼需要分類的東西。也許算法會在這個矩形上(編号 2)運作,而你知道上面沒有什麼有趣的東西。
是以這個細節就是所謂的分割算法,你先找出可能 2000 多個色塊,然後在這 2000 個色塊上放置邊界框,然後在這 2000 個色塊上運作分類器,這樣需要處理的位置可能要少的多,可以減少卷積網絡分類器運作時間,比在圖像所有位置運作一遍分類器要快。特别是這種情況,現在不僅是在方形區域(編号 5)中運作卷積網絡,我們還會在高高瘦瘦(編号 6)的區域運作,嘗試檢測出行人,然後我們在很寬很胖的區域(編号 7)運作,嘗試檢測出車輛,同時在各種尺度運作分類器。
這就是 R-CNN 或者 區域 CNN 的特色概念,現在看來 R-CNN 算法還是很慢的。是以有一系列的研究工作去改進這個算法,是以基本的 R-CNN 算法是使用某種算法求出候選區域,然後對每個候選區域運作一下分類器,每個區域會輸出一個标簽,有沒有車子?有沒有行人?有沒有機車?并輸出一個邊界框,這樣你就能在确實存在對象的區域得到一個精确的邊界框。
澄清一下,R-CNN 算法不會直接信任輸入的邊界框,它也會輸出一個邊界框bx,by,bz和bw,這樣得到的邊界框比較精确,比單純使用圖像分割算法給出的色塊邊界要好,是以它可以得到相當精确的邊界框。
現在R-CNN算法的一個缺點是太慢了。