摘要:本文就目標檢測算法的基礎知識進行簡要綜述,方便大家學習查看。
圖片分類任務我們已經熟悉了,就是算法對其中的對象進行分類。而今天我們要了解構建神經網絡的另一個問題,即目標檢測問題。這意味着,我們不僅要用算法判斷圖片中是不是一輛汽車,還要在圖片中標記出它的位置,用邊框或紅色方框把汽車圈起來,這就是目標檢測問題。本文就目標檢測算法的基礎知識進行簡要綜述,方便大家學習查看。
目標檢測基礎知識
網絡的階段之分
- 雙階段(two-stage):第一級網絡用於候選區域提取;第二級網絡對提取的候選區域進行分類和精確坐標回歸,例如RCNN系列。
- 單階段(one-stage):掘棄了候選區域提取這一步驟,只用一級網絡就完成了分類和回歸兩個任務,例如YOLO和SSD等。
單階段網絡為何不如雙階段的原因
因為訓練中的正負例不均衡。
- 負例過多,正例過少,負例產生的損失完全淹沒了正例;
- 大多數負例十分容易區分,網絡無法學習到有用信息。如果訓練數據中存在大量這樣的樣本,將導致網絡難以收斂。
雙階段網絡如何解決訓練中的不均衡
- 在RPN網絡中,根據前景置信度選擇最有可能的候選區域,從而避免大量容易區分的負例。
- 訓練過程中根據交並比進行采樣,將正負樣本比例設為1:3,防止過多負例出現。
常見數據集
Pascal VOC數據集
分為2007和2012兩個版本,其提供的數據集里包含了20類的物體。
PASCALVOC的主要5個任務:
- ①分類:對於每一個分類,判斷該分類是否在測試照片上存在(共20類);
- ②檢測:檢測目標對象在待測試圖片中的位置並給出矩形框坐標(boundingbox);
- ③分割:對於待測照片中的任何一個像素,判斷哪一個分類包含該像素(如果20個分類沒有一個包含該像素,那么該像素屬於背景);
- ④人體動作識別(在給定矩形框位置的情況下)
- ⑤LargeScaleRecognition(由ImageNet主辦)
導入圖像對應的.xml文件,在標注文件中的每一幅圖像的每一個目標,對應一個體dict
- 屬性'boxes'
- 屬性'gt_classes'
- 屬性'gt_overlaps'
- 屬性'flipped'
- 屬性'seg_areas'
CoCo 數據集
分為2014、2015、2017 三個版本
在annotations文件夾中對數據標注信息進行統一管理。例如,train2014的檢測與分割標注文件為instances_train2014.json
objectinstances(目標實例)、objectkeypoints(目標關鍵點)、imagecaptions(看圖說話)三種類型的標注
常見評價指標
- True positives(TP):被正確的划分到正例的個數,即實際為正例且被划分為正例的實例數。
- False positives(FP):被錯誤地划分為正例的個數,即實際為負例但被划分為正例的實例數。
- False negatives(FN):被錯誤的划分為負例的個數,即實際為正例但被划分為負例的實例數。
- True negatives(TN):被正確的划分為負例的個數,實際為負例且被划分為負例的實例數。
Precision = TP/(TP+FP) = TP/所有被模型預測為正例的數據
Recall = TP/(TP+FN) = TP/所有真實類別為正例的數據
PR曲線
我們希望檢測的結果P越高越好,R也越高越好,但事實上這兩者在某些情況下是矛盾的。
所以我們需要做的是找到一種精確率與召回率之間的平衡。其中一個方法就是畫出PR曲線,然后用PR曲線下方的面積AUC(AreaunderCurve)去判斷模型的好壞。
IOU指標
IoU是預測框與ground truth的交集和並集的比值。
對於每個類,預測框和ground truth重疊的區域是交集,而橫跨的總區域就是並集。
目標檢測中的PR
VOC中mAP的計算方法
通過PR曲線,我們可以得到對應的AP值:
在2010年以前,PASCALVOC競賽中AP是這么定義的:
- 首先要對模型預測結果進行排序(即照各個預測值置信度降序排列)。
- 我們把recall的值從0到1划分為11份:0、1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0。
- 在每個recall區間(0-0.1,0.1-0.2,2-0.3,…,0.9-1.0)上我們計算精確率的最大值,然后再計算這些精確率最大值的總和並平均,就是AP值。
從2010年之后,PASCALVOC競賽把這11份recall點換成了PR曲線中的所有recall數據點。
對於某個recall值r,precision值取所有recall>=r中的最大值(這樣保證了p-r曲線是單調遞減的,避免曲線出現搖擺)這種方法叫做all-points-interpolation。這個AP值也就是PR曲線下的面積值。
具體例子:
Coco中mAP的計算方法
采用的是IOU(用於決定是否為TP)在[0.5:0.05:0.95]計算10次AP,然后求均值的方法計算AP。
非極大值抑制
NMS算法一般是為了去掉模型預測后的多余框,其一般設有一個nms_threshold=0.5,
具體的實現思路如下:
- 選取這類box中scores最大的哪一個,記為box_best,並保留它
- 計算box_best與其余的box的IOU
- 如果其IOU>0.5了,那么就舍棄這個box(由於可能這兩個box表示同一目標,所以保
- 留分數高的哪一個)
- 從最后剩余的boxes中,再找出最大scores的哪一個,如此循環往復
本文分享自華為雲社區《目標檢測基礎知識》,原文作者:lutianfei 。