總結目標檢測匹配策略與改進思路

極市導讀
?CVPR2020中的文章ATSS揭露到anchor-based和anchor-free的目標檢測算法之間的效果差異原因是由于正負樣本的選擇造成的。而在目標檢測算法中正負樣本的選擇是由gt與anchor之間的匹配策略決定的。因此,本文研究了目前現(xiàn)有的匹配策略,并根據(jù)現(xiàn)狀給出改進思路。
faster rcnn或retinanet或ssd算法
yolo系列
fcos
Guided Anchoring
論文思想是通過圖像特征來指導 anchor 的生成。通過預測 anchor 的位置和形狀,來生成稀疏而且形狀任意的 anchor,并且設計了 Feature Adaption 模塊來修正特征圖使之與 anchor 形狀更加匹配,在使用 ResNet-50-FPN 作為 backbone 的情況下,Guided Anchoring 將 RPN 的 recall(AR@1000) 提高了 9.1 個點,將其用于不同的物體檢測器上,可以提高 mAP 1.2 到 2.7 個點不等。
論文實現(xiàn)方式如下圖:

匹配策略:將整個 feature map 的區(qū)域分為物體中心區(qū)域,外圍區(qū)域和忽略區(qū)域,大概思路就是將 ground truth 框的中心一小塊對應在 feature map 上的區(qū)域標為物體中心區(qū)域,在訓練的時候作為正樣本,其余區(qū)域按照離中心的距離標為忽略或者負樣本,具體設計在 paper 里講得比較清楚。通過位置預測,我們可以篩選出一小部分區(qū)域作為 anchor 的候選中心點位置,使得 anchor 數(shù)量大大降低。在 inference 的時候,預測完位置之后,我們可以采用 masked conv 替代普通的 conv,只在有 anchor 的地方進行計算,可以進行加速。
ATSS

1、對于每個GT,找到候選的正anchor集合
在每個金字塔層級(共L層)上,選擇topk個離GT中心距離最近的anchor boxes作為候選anchor, 那么每個GT就會有k*L個候選正anchor。
2、計算自適應閾值
計算候選anchor與GT之間的IoU Dg,計算均值?和標準差?,其閾值為:?。
3、確定最終的正anchor
選擇?,且中心點在GT邊框內部的anchor作為最終的正樣本,如果一個anchor box被分配給了多個GT,選擇IoU最高的那個GT。
ATSS的意義:

HAMBox
匹配策略:
a)IOU要大于閾值T(在線正anchor匹配閾值)
b)對(a)中得到的anchor進行排序,選擇IOU最大的top-K 個anchor做補償。K是一個超參數(shù),表示每個outer face能matched的最多anchor數(shù)目。使用M表示在步驟1中已經(jīng)匹配的anchor數(shù)目。如果N > K-M,則選取top(K-M)個unmatched anchor來補償。
T和K是通過實驗選擇的超參數(shù)。具體算法細節(jié)見下 Algorithm 1,該算法在訓練的每次前向傳播后執(zhí)行一次.
Algorithm1具體見下:
/*輸入:B,X,T,K,D,L,R,AB 是一組回歸后的框,格式為(x0, y0, x1, y1)X 是一組ground truth, 格式為(x0, y0, x1, y1)T 是上述算法中在線anchor挖掘中定義的閾值K 是每個outer face能匹配到的最多anchor數(shù)目D 是一個字典,key是ground_truth, value是HAMBox第一步中該gt能match到的anchor數(shù),即matched_anchor的數(shù)目L 是一個字典,key是anchor index, value是該anchor在HAMBox中最終分配的labelR 是一個字典,key是anchor index, value是該anchor經(jīng)過普通anchor matching后的編碼后的坐標A 是一個字典,key是anchor index, value是該anchor的坐標,格式為(x0, y0, x1, y1)輸出:經(jīng)過HAMBox后的R和L*/// 偽代碼見下for x_i in x doif D(x_i) >= K thencontinueend ifcompensatedNumber = K - D(x_i)onlineIoU = IoU(x_i, B),AnchorIdxsortedOnlineIoU = sorted(onlineIoU, key = IoU, reverse = True)for IoU, AnchorIdx in sortedOnlineIoU doif(L(AnchorIdx) = 1) thencontinueendifif(IoU < T) thencontinueendifcompensatedNumber -= 1L(AnchorIdx) = 1R(AnchorIdx) = encoded(A(AnchorIdx), x_i)if compensatedNumber = 0 thenbreakendifendforendforreturn R, L
推薦閱讀

