演算法的trick 目標檢測演算法中的常見trick

2021-10-13 11:13:55 字數 1478 閱讀 8770

目標檢測演算法中的常見trick

最近忙著打比賽,感覺看**也很難靜下心來了。基本上看得相當匆忙,主要還是以應用為主。上週壓力比較大,沒有來得及更新,感覺再不更就說不過去了。

因為比賽比較追求performance,所以想著把以前看到的一些trick或者還不夠了解的trick稍作整理,以後發現新的就更新到這裡。像bn和dropout的使用或者align、fpn這些常見的or偏向演算法層面的就不提了。主要還是**一些dl演算法以外的東西吧。

目錄如下:data augmentation

ohem

soft nms

multi scale training/testing

data augmentation

中文來說叫資料增廣,資料增廣可以增加資料集的數量和多樣性,從而提公升演算法的最終效果。卷積具有平移不變性,因此資料增廣一般使用的是更為複雜的策略,例如翻轉、旋轉或者裁切、放縮。下面說的multi scale training其實也可以看做資料增廣的一種。

考慮到實現的方便性,目前比較常見的實現一般是隨機對影象進行翻轉,網路允許的話,也會加入一些隨機放縮到一組特定尺寸中的某個。

裁切倒是在ssd裡看過,但是據說這部分原始碼實現比較混亂,有興趣的不妨研究下。

ohem

即online hard example mining,從名字也可以看出它和hard negative mining有一定的關係。這裡給出r-fcn**中對它的描述:

概況地說,ohem不是隨機選擇正負樣本,而是會對所有rois的損失進行評估,選擇那些loss大的樣本來優化網路。

soft nms

nms想必大家都很熟悉了,對於下圖這種情況,nms可以有效篩除多餘的檢測框,讓結果更加精準

但是另一些情況,nms會把重疊、貼近的目標篩掉,比如下圖中的人和馬因為貼的太近,很容易被nms排除掉乙個框……

在這種情況下,soft nms就提出了,它們兩種演算法的區別在於:

可以看到,nms演算法本身是先對得分進行排序,然後從輸出結果挑出其中得分最高的放入最終輸出的檢測結果的部分,接著遍歷剩下的框,如果iou重疊超過某個閾值,就直接排除掉這個框;遍歷一次之後,再從剩下的框裡按得分排序,挑出得分最高的加入最終輸出的結果……如此不斷迴圈直到最後輸出結果裡所有的框都被挑出來或者排除掉……

soft nms本質上只改變了一步,就是iou如果超過某個閾值,不再是直接排除掉這個框,而是降低它的得分。得分如果低到一定程度就會被排除,但是如果降低後仍然比較高,就有保留下來的機會。

降低分數的方法有線性和高斯:

影象識別ining/testing

很多網路並不關注輸入影象的size,在這種情況下,可以在訓練的時候將一張影象隨機resize到多個尺寸中的乙個進行訓練,而測試的時候可以將影象resize各個尺寸,得到不同尺度的框做nms,思路和影象金字塔比較像。

前者可以有效增加資料的多樣性,提高網路的效能。而即使沒有使用multi scale training也一樣可以使用multi scale testing,一般來說對提公升performance也有幫助。

目標檢測演算法

基於深度學習的回歸方法 yolo ssd densebox 傳統目標檢測流程 rcnn解決的就是預先找出圖中目標可能出現的位置,即候選區域,再對這些區域進行識別分類。r cnn 具體步驟如下 步驟二 對該模型做fine tuning 微調 步驟三 特徵提取 步驟四 訓練乙個svm分類器來判斷這個候選...

目標檢測演算法對比 目標檢測演算法工程落地

覆盤一下在實現檢測演算法落地過程中所經歷的乙個流程 列出幾點重點說明一下 1 網路的選取和調參是關鍵 網路選取 考慮到實際情況的實時性 硬體效能,需考慮參數量較小的檢測網路,更傾向於單階段式的網路 基於yolossd等的多個變體網路 其次基礎特徵提取網路backbone的替換,傳統都是vgg的特徵提...

目標檢測演算法歷史

最近在做一些目標檢測相關的東西,目標檢測是計算機視覺裡面最重要的課題之一了,很多場合檢測和識別都是很重要的,比如現在很火的無人駕駛,就非常依賴目標檢測和識別,需要非常高的檢測精度和定位精度。目標檢測從很早就開始有了。傳統演算法的典型代表有 haar特徵 adaboost演算法 hog特徵 svm演算...