找不到匹配的key exchange算法_目标检测--匹配策略
CVPR2020中的文章ATSS揭露到anchor-based和anchor-free的目標檢測算法之間的效果差異原因是由于正負樣本的選擇造成的。而在目標檢測算法中正負樣本的選擇是由gt與anchor之間的匹配策略決定的。因此我們研究一下目前現有的匹配策略,并根據現狀給出改進思路。
faster rcnn或者retinanet或者ssd算法
- 采用的分配策略是max iou assigner,即:對于每個gt,將高于正樣本閾值的并且是max iou位置的anchor設置為正樣本;將低于負樣本閾值的anchor設置為負樣本,考慮到有些gt和anchor的iou不高,故還設置了最小正樣本閾值,當某個gt和anchor的max iou大于最小正樣本閾值時候,則依然將該anchor設置為正樣本。
yolo系列
- 是對于每個gt,將max iou位置的anchor設置為正樣本,不管閾值多大(先要確定哪一預測層負責預測),這種操作對anchor設置要求較高,因為如果anchor設置不合理,就只能用大量低質量anchor負責回歸了。對于正樣本附近的anchor預測值,其可能和gt的iou也很高,故需要將這些位置的anchor預測值設置為忽略樣本,默認閾值是0.7。可能濾除一些正樣本。
fcos
- 第一步也是和yolo一樣,要確定某個Gt在第幾個層負責預測(采用minsize 和 max size),第二步是需要確定在每個輸出層上面,哪些空間位置是正樣本區域,哪些是負樣本區域。原版的fcos的正負樣本策略非常簡單粗暴:在bbox區域內的都是正樣本,其余地方都是負樣本,而沒有忽略樣本區域。可想而知這種做法不友好,因為標注本身就存在大量噪聲,如果bbox全部區域都作為正樣本,那么bbox邊沿的位置作為正樣本負責預測是難以得到好的效果的,顯然是不太靠譜的(在文本檢測領域,都會采用shrink的做法來得到正樣本區域),所以后面又提出了center sampling的做法來確定正負樣本,具體是:引入了center_sample_radius(基于當前stride參數)的參數用于確定在半徑范圍內的樣本都屬于正樣本區域,其余區域作為負樣本,依然沒有定義忽略樣本。
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 個點不等。
論文實現方式如下圖:
匹配策略:將整個 feature map 的區域分為物體中心區域,外圍區域和忽略區域,大概思路就是將 ground truth 框的中心一小塊對應在 feature map 上的區域標為物體中心區域,在訓練的時候作為正樣本,其余區域按照離中心的距離標為忽略或者負樣本,具體設計在 paper 里講得比較清楚。通過位置預測,我們可以篩選出一小部分區域作為 anchor 的候選中心點位置,使得 anchor 數量大大降低。在 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的意義:
- 根據目標統計特征,自動調整正負樣本選取方式。如圖(a),當 越大,表示候選樣本質量很高,可以選取一個高的IoU閾值。如圖(b), 越小,表示絕大多數的候選樣本較差,應當選取一個較低的閾值來確保GT可以匹配到anchor。如圖3(a), 較大時,往往意味著有一個FPN層出現了較高的IOU,說明該層非常適合這個物體的預測,因此 和 加起來得到一個較高的閾值,我們只從這一層選取正樣本。如圖3(b), 較小意味著存在多個適合該目標的金字塔層,因此 和 加起來得到一個較低的閾值,會在這些層級上選取正樣本。
- 每個目標匹配anchor數量相對均勻。
HAMBox
匹配策略:
(a)IOU要大于閾值T(在線正anchor匹配閾值)
(b)對(a)中得到的anchor進行排序,選擇IOU最大的top-K 個anchor做補償。K是一個超參數,表示每個outer face能matched的最多anchor數目。使用M表示在步驟1中已經匹配的anchor數目。如果N > K-M,則選取top(K-M)個unmatched anchor來補償。
T和K是通過實驗選擇的超參數。具體算法細節見下 Algorithm 1,該算法在訓練的每次前向傳播后執行一次.
Algorithm1具體見下:
/* 輸入:B,X,T,K,D,L,R,A B 是一組回歸后的框,格式為(x0, y0, x1, y1) X 是一組ground truth, 格式為(x0, y0, x1, y1) T 是上述算法中在線anchor挖掘中定義的閾值 K 是每個outer face能匹配到的最多anchor數目 D 是一個字典,key是ground_truth, value是HAMBox第一步中該gt能match到的anchor數,即matched_anchor的數目 L 是一個字典,key是anchor index, value是該anchor在HAMBox中最終分配的label R 是一個字典,key是anchor index, value是該anchor經過普通anchor matching后的編碼后的坐標 A 是一個字典,key是anchor index, value是該anchor的坐標,格式為(x0, y0, x1, y1)輸出:經過HAMBox后的R和L */ // 偽代碼見下 for x_i in x doif D(x_i) >= K thencontinueend ifcompensatedNumber = K - D(x_i)onlineIoU = IoU(x_i, B),AnchorIdx sortedOnlineIoU = 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 then breakendifendfor endfor return R, L總結
以上是生活随笔為你收集整理的找不到匹配的key exchange算法_目标检测--匹配策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redmi K70或已开始量产 王腾发文
- 下一篇: gateway sentinel 熔断