anchor設置 yolo_目標檢測中Anchor(先驗框)的作用


目標檢測網絡(Faster RCNN、SSD、YOLO v2&v3等)中,均有先驗框的說法,Faster RCNN中稱之為anchor(錨點),SSD稱之為prior bounding box(先驗框),實際上是一個概念。Anchor設置的合理與否,極大的影響着最終模型檢測性能的好壞。

1. 什么是Anchor?

一句話概括——提前在圖像上預設好的不同大小,不同長寬比的框,先驗框示意如下:

ca25a3881a29e50d9656d7d126257d2a

同一位置設置多個不同尺度先驗框

2. 為什么引入Anocher?

使得模型更容易學習。

目標檢測中模型不僅需要學習目標的類別,更需要學習到目標的位置和大小,這不是一個簡單的任務。舉個簡單的例子。

YOLOv1是較早的one-stage目標檢測方法(YOLOv1沒有設計Anocher),它最后采用全連接層直接對邊界框進行預測,由於各個圖片中存在不同尺度和長寬比(scales and ratios)的物體,使得YOLOv1在訓練過程中學習適應不同物體的形狀比較困難,這也導致YOLOv1在精確定位方面不如Faster R-CNN,如下:

5020e64bf8a46df2b742370497eab6a6

使用anchor boxes之后,YOLOv2的召回率大大提升,所以在Yolo之后的版本中,均保留了先驗框。

3. Anocher為什么要使用不同尺寸和長寬比?

為了得到更大的交並比(intersection over union, IOU)。

通過設置不同的尺度的先驗框,就有更高的概率出現對於目標物體有良好匹配度的先驗框(體現為高IoU)。

如下所示:

c1db7d6f786966c9f1ff477aa201c85e

左圖我們更希望模型選擇紅色的先驗框,右圖希望模型選擇藍色的先驗框,這樣使得模型更容易學習。

4. Anochor Box的尺寸該怎么選擇?

anchor一般都是通過人工設計的。例如,在SSD、Faster-RCNN中,設計了9個不同大小和寬高比的anchor。然而,通過人工設計的anchor存在一個弊端,就是並不能保證它們一定能很好的適合數據集,如果anchor的尺寸和目標的尺寸差異較大,則會影響模型的檢測效果。目前anchor box的選擇主要有三種方式:

  •     人為經驗選取
  •     k-means聚類
  • 作為超參數進行學習

在論文YOLOv2中提到了這個問題,作者建議使用K-means聚類來代替人工設計,通過對訓練集的bounding box進行聚類,自動生成一組更加適合數據集的anchor,可以使網絡的檢測效果更好。

Instead of choosing priors by hand, we run k-means clustering on the training set bounding boxes to automatically find good priors. If we use standard k-means withEuclidean distance larger boxes generate more error than smaller boxes. However, what we really want are priors that lead to good IOU scores, which is independent of the size of the box.

雖然設置更多的先驗框,IOU能獲得一定的提升,但模型的復雜度隨之增加,如下圖,為了平衡模型的准確度和復雜度,YOLOv2的作者最終選擇了K=5個先驗框。

f4301f6f3f5a2f7a8d543bfb30e2a955


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM