CV必會(huì) | 一文概覽目標(biāo)檢測(cè)基礎(chǔ)(數(shù)據(jù)集、mAP等)
點(diǎn)擊上方“機(jī)器學(xué)習(xí)與生成對(duì)抗網(wǎng)絡(luò)”,關(guān)注星標(biāo)
獲取有趣、好玩的前沿干貨!
地址:https://bbs.huaweicloud.com/blogs/239636
摘要:本文就目標(biāo)檢測(cè)算法的基礎(chǔ)知識(shí)進(jìn)行簡(jiǎn)要綜述,方便大家學(xué)習(xí)查看。
圖片分類任務(wù)我們已經(jīng)熟悉了,就是算法對(duì)其中的對(duì)象進(jìn)行分類。而今天我們要了解構(gòu)建神經(jīng)網(wǎng)絡(luò)的另一個(gè)問題,即目標(biāo)檢測(cè)問題。這意味著,我們不僅要用算法判斷圖片中是不是一輛汽車,還要在圖片中標(biāo)記出它的位置,用邊框或紅色方框把汽車圈起來,這就是目標(biāo)檢測(cè)問題。本文就目標(biāo)檢測(cè)算法的基礎(chǔ)知識(shí)進(jìn)行簡(jiǎn)要綜述,方便大家學(xué)習(xí)查看。
01
網(wǎng)絡(luò)的階段之分
雙階段(two-stage):第一級(jí)網(wǎng)絡(luò)用于候選區(qū)域提取;第二級(jí)網(wǎng)絡(luò)對(duì)提取的候選區(qū)域進(jìn)行分類和精確坐標(biāo)回歸,例如RCNN系列。
單階段(one-stage):掘棄了候選區(qū)域提取這一步驟,只用一級(jí)網(wǎng)絡(luò)就完成了分類和回歸兩個(gè)任務(wù),例如YOLO和SSD等。
單階段網(wǎng)絡(luò)為何不如雙階段的原因
因?yàn)橛?xùn)練中的正負(fù)例不均衡。
負(fù)例過多,正例過少,負(fù)例產(chǎn)生的損失完全淹沒了正例;
大多數(shù)負(fù)例十分容易區(qū)分,網(wǎng)絡(luò)無法學(xué)習(xí)到有用信息。如果訓(xùn)練數(shù)據(jù)中存在大量這樣的樣本,將導(dǎo)致網(wǎng)絡(luò)難以收斂。
雙階段網(wǎng)絡(luò)如何解決訓(xùn)練中的不均衡
在RPN網(wǎng)絡(luò)中,根據(jù)前景置信度選擇最有可能的候選區(qū)域,從而避免大量容易區(qū)分的負(fù)例。
訓(xùn)練過程中根據(jù)交并比進(jìn)行采樣,將正負(fù)樣本比例設(shè)為1:3,防止過多負(fù)例出現(xiàn)。
02
Pascal VOC數(shù)據(jù)集
分為2007和2012兩個(gè)版本,其提供的數(shù)據(jù)集里包含了20類的物體。
PASCALVOC的主要5個(gè)任務(wù):
①分類:對(duì)于每一個(gè)分類,判斷該分類是否在測(cè)試照片上存在(共20類);
②檢測(cè):檢測(cè)目標(biāo)對(duì)象在待測(cè)試圖片中的位置并給出矩形框坐標(biāo)(boundingbox);
③分割:對(duì)于待測(cè)照片中的任何一個(gè)像素,判斷哪一個(gè)分類包含該像素(如果20個(gè)分類沒有一個(gè)包含該像素,那么該像素屬于背景);
④人體動(dòng)作識(shí)別(在給定矩形框位置的情況下)
⑤LargeScaleRecognition(由ImageNet主辦)
導(dǎo)入圖像對(duì)應(yīng)的.xml文件,在標(biāo)注文件中的每一幅圖像的每一個(gè)目標(biāo),對(duì)應(yīng)一個(gè)體dict
屬性'boxes'
屬性'gt_classes'
屬性'gt_overlaps'
屬性'flipped'
屬性'seg_areas'
CoCo 數(shù)據(jù)集
分為2014、2015、2017 三個(gè)版本

在annotations文件夾中對(duì)數(shù)據(jù)標(biāo)注信息進(jìn)行統(tǒng)一管理。例如,train2014的檢測(cè)與分割標(biāo)注文件為instances_train2014.json
objectinstances(目標(biāo)實(shí)例)、objectkeypoints(目標(biāo)關(guān)鍵點(diǎn))、imagecaptions(看圖說話)三種類型的標(biāo)注
03
True positives(TP):被正確的劃分到正例的個(gè)數(shù),即實(shí)際為正例且被劃分為正例的實(shí)例數(shù)。
False positives(FP):被錯(cuò)誤地劃分為正例的個(gè)數(shù),即實(shí)際為負(fù)例但被劃分為正例的實(shí)例數(shù)。
False negatives(FN):被錯(cuò)誤的劃分為負(fù)例的個(gè)數(shù),即實(shí)際為正例但被劃分為負(fù)例的實(shí)例數(shù)。
True negatives(TN):被正確的劃分為負(fù)例的個(gè)數(shù),實(shí)際為負(fù)例且被劃分為負(fù)例的實(shí)例數(shù)。
Precision = TP/(TP+FP) = TP/所有被模型預(yù)測(cè)為正例的數(shù)據(jù)
Recall = TP/(TP+FN) = TP/所有真實(shí)類別為正例的數(shù)據(jù)
PR曲線
我們希望檢測(cè)的結(jié)果P越高越好,R也越高越好,但事實(shí)上這兩者在某些情況下是矛盾的。
所以我們需要做的是找到一種精確率與召回率之間的平衡。其中一個(gè)方法就是畫出PR曲線,然后用PR曲線下方的面積AUC(AreaunderCurve)去判斷模型的好壞。

IOU指標(biāo)
IoU是預(yù)測(cè)框與ground truth的交集和并集的比值。
對(duì)于每個(gè)類,預(yù)測(cè)框和ground truth重疊的區(qū)域是交集,而橫跨的總區(qū)域就是并集。

目標(biāo)檢測(cè)中的PR

04
通過PR曲線,我們可以得到對(duì)應(yīng)的AP值:
在2010年以前,PASCALVOC競(jìng)賽中AP是這么定義的:
首先要對(duì)模型預(yù)測(cè)結(jié)果進(jìn)行排序(即照各個(gè)預(yù)測(cè)值置信度降序排列)。
我們把recall的值從0到1劃分為11份:0、1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0。
在每個(gè)recall區(qū)間(0-0.1,0.1-0.2,2-0.3,…,0.9-1.0)上我們計(jì)算精確率的最大值,然后再計(jì)算這些精確率最大值的總和并平均,就是AP值。
從2010年之后,PASCALVOC競(jìng)賽把這11份recall點(diǎn)換成了PR曲線中的所有recall數(shù)據(jù)點(diǎn)。
對(duì)于某個(gè)recall值r,precision值取所有recall>=r中的最大值(這樣保證了p-r曲線是單調(diào)遞減的,避免曲線出現(xiàn)搖擺)這種方法叫做all-points-interpolation。這個(gè)AP值也就是PR曲線下的面積值。
具體例子:

05
采用的是IOU(用于決定是否為TP)在[0.5:0.05:0.95]計(jì)算10次AP,然后求均值的方法計(jì)算AP。
非極大值抑制
NMS算法一般是為了去掉模型預(yù)測(cè)后的多余框,其一般設(shè)有一個(gè)nms_threshold=0.5,
具體的實(shí)現(xiàn)思路如下:
1. 選取這類box中scores最大的哪一個(gè),記為box_best,并保留它
2. 計(jì)算box_best與其余的box的IOU
3. 如果其IOU>0.5了,那么就舍棄這個(gè)box(由于可能這兩個(gè)box表示同一目標(biāo),所以保
4. 留分?jǐn)?shù)高的哪一個(gè))
5. 從最后剩余的boxes中,再找出最大scores的哪一個(gè),如此循環(huán)往復(fù)
猜您喜歡:
附下載 | 《可解釋的機(jī)器學(xué)習(xí)》中文版
附下載 |《TensorFlow 2.0 深度學(xué)習(xí)算法實(shí)戰(zhàn)》
附下載 |《計(jì)算機(jī)視覺中的數(shù)學(xué)方法》分享
《基于深度學(xué)習(xí)的表面缺陷檢測(cè)方法綜述》
《基于深度神經(jīng)網(wǎng)絡(luò)的少樣本學(xué)習(xí)綜述》
