深度學習筆記(36) 邊界框預測
1. 不精準的輸出邊界框問題
在滑動窗口法中,取這些離散的位置集合,然後在它們上運行分類器
在這種情況下,這些邊界框沒有一個能完美匹配汽車位置,也許這個框(編號1)是最匹配的了
還有看起來這個真實值,最完美的邊界框甚至不是方形
稍微有點長方形(紅色方框所示),長寬比有點向水平方向延伸
滑動窗口法卷積實現的算法效率更高,但仍然存在問題,不能輸出最精準的邊界框
2. YOLO算法
其中一個能得到更精準邊界框的算法是YOLO算法
YOLO(You only look once)意思是你只看一次
比如輸入圖像是100×100的,然後在圖像上放一個網格
爲了介紹起來簡單一些,用3×3網格,實際實現時會用更精細的網格,可能是19×19
基本思路是使用圖像分類和定位算法,然後將算法應用到9個格子上
更具體一點,需要這樣定義訓練標籤,所以對於9個格子中的每一個指定一個標籤y
y是8維的,和之前的一樣,pc等於0或1取決於這個綠色格子中是否有圖像
然後bx、by、bh和bw作用就是,如果那個格子裏有對象,那麼就給出邊界框座標
然後c1、c2和c3就是想要識別的三個類別,背景類別不算
這張圖裏有9個格子,所以對於每個格子都有這麼一個向量
(編號4)(編號6)這張圖有兩個對象
YOLO算法做的就是,取兩個對象各自的中點,然後將這個對象分配給包含對象中點的格子
所以左邊的汽車就分配到(編號4)格子上
然後這輛Condor(車型:神鷹)中點在(編號6)格子,分配給(編號6)格子
即使中心格子(編號5)同時有兩輛車的一部分,就假裝中心格子沒有任何感興趣的對象
對於這裏9個格子中任何一個,都會得到一個8維輸出向量
因爲這裏是3×3的網格,所以總的輸出尺寸是3×3×8
如果現在要訓練一個輸入爲100×100×3的神經網絡
現在這是輸入圖像,然後有一個普通的卷積網絡,卷積層,最大池化層等等
最後會有選擇卷積層和最大池化層
這樣最後就映射到一個3×3×8輸出尺寸即目標標籤y
在YOLO算法中
對於這個方框(編號6所示),約定左上這個點是(0,0),然後右下這個點是(1,1)
要指定橙色中點的位置,bx大概是0.4,因爲它的位置大概是水平長度的0.4,然後by大概是0.3
然後邊界框的高度用格子總體寬度的比例表示
所以這個紅框的寬度可能是藍線(編號2所示的藍線)的90%,所以bh是0.9
它的高度也許是格子總體高度的一半,這樣的話bw就是0.5
換句話說,bx、by、bh和bw單位是相對於格子尺寸的比例
所以bx和by必須在0和1之間
然後就開始訓練吧
參考:
相關推薦:
深度學習筆記(35) 滑動窗口的卷積實現
深度學習筆記(34) 目標檢測
深度學習筆記(33) 特徵點檢測
深度學習筆記(32) 目標定位
深度學習筆記(31) 遷移與增強
謝謝!