目標檢測,一般分為2個部分,定位和分類,example mining是選擇出特定樣本來計算損失函式;從實際問題出發hard example應該就是指定位較困難或分類較困難或者兩者都困難的候選框。ssd的caffe中支援negative mining和hard example mining,當share_location引數為true時,只支援negative mining。
對於給定候選框,其位置是確定的,那麼定位的困難度用其到所有gt_bboxes之間的距離來度量,相當於求乙個點到乙個集合之間的距離;而分類困難度很好理解,即可定義為交叉熵損失($-log(p_i)$)。在ssd中,所有的prior_bboxes或default bboxes是可事先計算好的,其數目是確定的,對於每個default bbox僅僅根據gt_bboxes就可以確定其定位損失,與cnn無關;但是對於分類損失需要計算cnn特徵。
hard negative example或hard positive example的定義需要首先確定某個候選框是negative example還是positive example。比如ssd中將與任意gt_bbox的iou超過給定閾值overlap_threshold(multibox_loss_param中的乙個字段,ssd預設為0.5)的當作正樣本,即前景類別為正樣本,背景類別為負樣本。比如,極端的例子,當影象中沒有gt_bbox時,那麼所有的default bboxes都是negative example。
ssd中negative mining只計算分類損失而不計算定位損失,而hard example mining對分類損失和定位損失都進行計算。
ssd的negative mining的過程為:1)將每個default box與gt_bbox匹配;2)當第i個bbox被匹配到第j個gt_bbox,那麼計算其屬於背景類別的softmax loss或cross entropy loss值; 3)按照loss排序,選擇loss較大且與任意gt_bbox之間的iou小於neg_overlap的前3*num_positive個負樣本。
在選擇樣本時,由於每個feature map上的點對應6個default boxes,所有負樣本成堆出現,那麼為了減少負樣本數,可以採用非極大值抑制,此時非極大值抑制的閾值為負樣本的分類損失和定位損失之和的乙個閾值。
// do non-maximum suppression based on the loss.
vectornms_indices;
if (nms_indices.size() < num_sel)
// pick top example indices after nms.
num_sel = std::min(static_cast(nms_indices.size()), num_sel);
for (int n = 0; n < num_sel; ++n)
採用hard example minng的layer層為:
layer
propagate_down: true
propagate_down: true
propagate_down: false
propagate_down: false
loss_param
multibox_loss_param {
loc_loss_type: smooth_l1
conf_loss_type: softmax
loc_weight: 1.0
num_classes: 2
share_location: true #所有前景類別是否共享default bbox
match_type: per_prediction
overlap_threshold: 0.5 #default bbox為正樣本的條件是iou>overlap_threshold
use_prior_for_matching: true #直接使用default bbox匹配pred_bbox
background_label_id: 0
use_difficult_gt: true
#neg_pos_ratio: 3.0 #負正樣本數比例,只有max_negative mining時才有用
neg_overlap: 0.5 #default bbox為負樣本的條件是:ioussd中hard example mining和negative mining的區別在於:
1) hard example多乙個location loss;
2)negative mining按正負樣本比例確定負樣本數;hard example選出的樣本數要少於等於multibox_loss_param中的引數sample_size。
3)hard example會對匹配階段的結果進行修改從而減少正樣本數,如果即使box_i與gt_bbox_j匹配了,但在按loc_loss+conf_loss排序時比較大,匹配算無效的,即該匹配的box_i不會被當作正樣本。
目標檢測中region proposal的作用
首先我們明確乙個定義,當前主流的object detection框架分為1 stage和2 stage,而2 stage多出來的這個stage就是regional proposal過程,明確這一點後,我們繼續講。regional proposal的輸出到底是什麼?我們首先看一下以faster r c...
目標檢測中的Selective Search
在r cnn學習的過程中,首先使用到的技巧就是selective search選擇性搜尋。它的目標是減小滑動窗或者窮舉法帶來的冗餘候選區域,從而減小計算量。本文參考blog 選擇性搜尋主要集中解決了以下幾個問題 事先並不知道內物體的尺寸,如何確定不同大小比例的候選框 對於影象中存在的特徵,如何利用起...
目標檢測中的Anchor
前言 在計算機視覺四大基本任務 檢測 分類 定位 分割 中,影象的目標檢測受到的了研究者們越來越多的關注。今天我們就來聊一聊在目標檢測中一項重要的機制 anchor。anchor機制在凱明大神提出的faster rcnn 2015年提出 時興起。下面將從三方面來敘述anchor.目錄1.什麼是anc...