——以yolo中的anchor為例

anchor boxes第一次見是在faster R-CNN的論文裏,該論文引入這個方法是為解決多尺度問題。以往的解決多喫度問題的方法主要有兩種,一是圖像金字塔,二是卷積核金字塔。這兩種方法無疑都引入大量的計算。作者提出了anchors這個機制,引入不同尺寸、不同高寬比的anchors,較好的解決了這個多尺度的問題。

當然,在yolo系列模型中,從yolov2開始引入anchors機制。引入這個機制並沒有提升mAP,反而下降了零點幾個百分點。但是,yolov2的recall率提升了4%,這是因為anchor使其預測的框數量增加了5倍,能夠充分的檢測各種框(多尺度的作用?這裡不是很清楚),雖然平均精度略有下降,但是帶來的召回率的大幅度的提升。


在YOLOv3模型中,什麼時候會用到anchors呢?在訓練階段,數據處理那裡計算ground truth與那個anchor的IoU最大,標記該anchor對應的confidence為一,在計算loss時,這個anchor box對應的預測有回歸、confidence和分類的誤差,大於某個閾值但不是最優anchor對應的預測值則沒有confidence和定位損失,小於閾值的則有confidence損失。需要說明的是,訓練時預測的值為高和寬相對anchor高和寬的值。所以,訓練的目標就是使得檢測器得到物體與最佳anchor偏離值,並且使得偏離值接近真實值

在測試階段,則根據confidence來與閾值的關係來判斷預測的邊框是否有效,這時anchor boxes的作用就是還原預測邊框在輸入圖像的大小(中心點有grid完成)。當然,在此之後還需要進行非極大值抑制。

以前總覺得anchors這東西很奇怪,是直接由網路生成嗎?答案是否定的,網路只是預測物體與anchor的相對關係,比它高多少?比他矮多少。anchor boxes是手工設計的,或者使用聚類。

推薦閱讀:

相關文章