? 基本在目標(biāo)檢測(cè)算法中會(huì)碰到一些評(píng)估指標(biāo)、常見(jiàn)的指標(biāo)參數(shù)有:IoU(交并比)、Precision(精確度)、Recall(召回率)、AP(平均正確率)、mAP(平均類(lèi)別AP)等。這些評(píng)估指標(biāo)是在評(píng)估階段評(píng)價(jià)訓(xùn)練的網(wǎng)絡(luò)好壞的重要依據(jù)。
1、IOU(交并比)
計(jì)算方法
IoU: 用來(lái)評(píng)價(jià)目標(biāo)檢測(cè)算法的對(duì)象定位精度,IoU是目標(biāo)檢測(cè)的預(yù)測(cè)框和標(biāo)簽框之間的重疊面積與它們面積并集的比值,數(shù)值越大,說(shuō)明目標(biāo)檢測(cè)算法定位越準(zhǔn)確。 在實(shí)際過(guò)程中一般會(huì)設(shè)定一個(gè)IoU閾值(比如:0.5),如果大于等于0.5,對(duì)象將被識(shí)別為“成功檢測(cè)”,否則將被識(shí)別為“錯(cuò)誤”。
I
o
U
=
兩個(gè)矩形框相交的面積
/
兩個(gè)矩形框相并的面積
IoU = 兩個(gè)矩形框相交的面積 / 兩個(gè)矩形框相并的面積
IoU=兩個(gè)矩形框相交的面積/兩個(gè)矩形框相并的面積
如下圖所示:
指標(biāo)作用
- 訓(xùn)練時(shí)
由于在訓(xùn)練過(guò)程中,會(huì)對(duì)同一個(gè)目標(biāo)生成很多不同的檢測(cè)框,以yolov1目標(biāo)檢測(cè)算法為例子,由于在訓(xùn)練過(guò)程中,會(huì)對(duì)每個(gè)grid cell預(yù)測(cè)生成很多不同的bounding box。在訓(xùn)練中我們挑選預(yù)測(cè)的bounding box與ground truth box的IOU最大的bounding box做為最優(yōu)的box,但是在網(wǎng)絡(luò)訓(xùn)練完成后,部署網(wǎng)絡(luò)預(yù)測(cè)的過(guò)程中并沒(méi)有g(shù)round truth box,怎么才能挑選最優(yōu)的bounding box呢?
所以在yolov3模型訓(xùn)練階段中,會(huì)通過(guò)結(jié)合損失函數(shù)去訓(xùn)練網(wǎng)絡(luò)預(yù)測(cè)一個(gè)參數(shù)-置信度C,用來(lái)表示預(yù)測(cè)框中是否含有要檢測(cè)目標(biāo)的可信程度,在訓(xùn)練過(guò)程中,每個(gè)預(yù)測(cè)出來(lái)的bounding box都需要計(jì)算出一個(gè)真實(shí)的置信度,同時(shí)訓(xùn)練的網(wǎng)絡(luò)要預(yù)測(cè)出一個(gè)置信度,通過(guò)損失函數(shù)約束真實(shí)置信度與預(yù)測(cè)置信度之間的差距,如yolov1的損失函數(shù)所示:
? 在yolov1中,會(huì)將一張圖片分成77個(gè)小方格(損失函數(shù)中ss=7*7),每個(gè)小方格稱(chēng)為grid cell,yolov1官方代碼中是對(duì)20個(gè)類(lèi)別進(jìn)行分類(lèi),所以每個(gè)grid cell會(huì)預(yù)測(cè)生成兩個(gè)bounding box(損失函數(shù)中B=2),每個(gè)bounding box會(huì)預(yù)測(cè)一個(gè)置信度C,置信度C代表該bounding box中含有20個(gè)類(lèi)別目標(biāo)中的任一目標(biāo)的置信度。其圖如下:
網(wǎng)絡(luò)其中1^obj(i,j)表示第i個(gè)grid cell的第j個(gè)bounding box是否含有檢測(cè)目標(biāo),是否含有目標(biāo)的判斷就是根據(jù)bounding box與ground truth box的IOU值是否超過(guò)0.5來(lái)判斷。如果超過(guò)0.5為1,否則為0;
? 同時(shí)C^(i)表示真實(shí)的置信度,其值為第i個(gè)grid cell中第j個(gè)bounding box與ground truth box的IOU值,C(i)為網(wǎng)絡(luò)預(yù)測(cè)出來(lái)的值,通過(guò)模型訓(xùn)練不斷迭代訓(xùn)練使得C(i)不斷擬合C^(i)真實(shí)值 。
- NMS(非最大抑制)
在目標(biāo)檢測(cè)中會(huì)出現(xiàn)同一個(gè)目標(biāo)被多個(gè)bounding box檢測(cè)到,如下圖,為解決這個(gè)問(wèn)題就需要用到NMS(非最大抑制)算法保留一個(gè)bounding box。
先假設(shè)有6個(gè)矩形框,根據(jù)分類(lèi)器類(lèi)別分類(lèi)概率做排序,從小到大分別屬于車(chē)輛的概率分別為A、B、C、D、E、F。NMS具體流程如下:
(1)從最大概率矩形框F開(kāi)始,分別判斷A~E與F的重疊度IOU是否大于某個(gè)設(shè)定的閾值;
(2)假設(shè)B、D與F的重疊度超過(guò)閾值,那么就扔掉B、D;并標(biāo)記第一個(gè)矩形框F,是我們保留下來(lái)的。
(3)從剩下的矩形框A、C、E中,選擇概率最大的E,然后判斷E與A、C的重疊度,重疊度大于一定的閾值,那么就扔掉;并標(biāo)記E是我們保留下來(lái)的第二個(gè)矩形框。就這樣一直重復(fù),找到所有被保留下來(lái)的矩形框
2、Precision(精確度)
Precision: 精確度指目標(biāo)檢測(cè)模型判斷該圖片為正類(lèi),該圖片確實(shí)是正類(lèi)的概率。在這里需要明白什么是正類(lèi),如表二所示:
精確度衡量的是一個(gè)分類(lèi)器預(yù)測(cè)出真正例的概率,計(jì)算公式如下圖:
在圖像的目標(biāo)檢測(cè)中精確度的計(jì)算公式還可以表示如下:
由于在目標(biāo)檢測(cè)的測(cè)試階段,所有預(yù)測(cè)出來(lái)的框都是機(jī)器認(rèn)為的正樣本,上式中all detections就是預(yù)測(cè)標(biāo)記為某一類(lèi)的所有bounding box的數(shù)目,TP就是bounding box與ground truth box計(jì)算IOU值后大于閾值的框的數(shù)目(經(jīng)過(guò)NMS算法,理論上每個(gè)ground truth box最多只有一個(gè)bounding box與之對(duì)應(yīng),也可以把TP理解為ground truth box被準(zhǔn)確預(yù)測(cè)出來(lái)的個(gè)數(shù)),F(xiàn)P就是計(jì)算IOU值后小于閾值的框的數(shù)目(錯(cuò)誤的被認(rèn)為屬于這一類(lèi)的框的數(shù)目)。
目標(biāo)檢測(cè)一般不區(qū)分TN和FN。因?yàn)樨?fù)樣本根本沒(méi)有顯示出來(lái),也不存在區(qū)分真假的問(wèn)題。因此,目標(biāo)檢測(cè)中,TN和FN無(wú)意義。
為了更好理解精確度,舉個(gè)例子,假如說(shuō)有100個(gè)人中有50個(gè)好人,與50個(gè)壞人,結(jié)果分類(lèi)器識(shí)別出來(lái)了59個(gè)好人,41個(gè)壞人。這59個(gè)人中有11個(gè)真正的壞人,41個(gè)人中有兩個(gè)好人。所以如下:
T
P
=
59
?
11
=
48
TP=59-11=48
TP=59?11=48
T N = 41 ? 2 = 38 TN=41-2=38 TN=41?2=38
F P = 11 FP=11 FP=11
F N = 2 FN=2 FN=2
所以該分類(lèi)器的精確度P=48/(48+11)=0.814,可以看到這個(gè)分類(lèi)器如果分類(lèi)后的FP(假好人)越多,精確度就會(huì)越低,反之FP(假好人)越少,精確度就會(huì)越高,所以精確度表示了模型對(duì)于負(fù)樣本(嚴(yán)格識(shí)別出壞人)的區(qū)分能力,精確率越高,則模型對(duì)負(fù)樣本區(qū)分能力越強(qiáng)(越容易識(shí)別出每一個(gè)壞人)。
3、Recall(召回率)
Recall: 召回率是指分類(lèi)器判為正類(lèi)且真實(shí)類(lèi)別也是正類(lèi)的圖像數(shù)量/真實(shí)類(lèi)別是正類(lèi)的圖像數(shù)量,計(jì)算公式為:
同樣、在在圖像的目標(biāo)檢測(cè)中精確度的計(jì)算公式還可以表示如下:
在目標(biāo)檢測(cè)中FN可以理解為測(cè)試數(shù)據(jù)集中g(shù)round truth box沒(méi)有被檢測(cè)出來(lái)的數(shù)量,TP理解為ground truth box被準(zhǔn)確預(yù)測(cè)出來(lái)的數(shù)量,所以TP+FN=all ground truth,all ground truth就是測(cè)試樣本中某一類(lèi)別中的所有真實(shí)框的數(shù)目。
召回率衡量的是一個(gè)分類(lèi)器能把所有的正類(lèi)都找出來(lái)的能力,衡量的就是一個(gè)分類(lèi)器能夠把所有的好人都識(shí)別為好人,不冤枉一個(gè)好人的能力。由此可得上面的例子的召回率R=48/(48+2)=0.96。可以看到這個(gè)分類(lèi)器的召回率還是很高的,但是我們也明顯發(fā)現(xiàn)一個(gè)問(wèn)題,雖然分類(lèi)器把50個(gè)好人識(shí)別出來(lái)的數(shù)量高達(dá)48個(gè),但是同時(shí)把11個(gè)壞人也識(shí)別成了好人,11個(gè)假好人的出現(xiàn)可不是什么好事情,但是單單從召回率的數(shù)值看并不能分析出這個(gè)分類(lèi)器是一個(gè)優(yōu)秀的分類(lèi)器,他只是能夠最大程度保證96%的好人可以識(shí)別出來(lái)。所以我們還需要其他指標(biāo)參數(shù)輔助分析。
召回率高,意味著分類(lèi)器盡可能將有可能為正樣本的樣本預(yù)測(cè)為正樣本,這意味著召回率能夠很好的體現(xiàn)模型對(duì)于正樣本的區(qū)分能力,召回率越高,則模型對(duì)正樣本的區(qū)分能力越強(qiáng)
精確率與召回率的關(guān)系
精確率與召回率是此消彼長(zhǎng)的關(guān)系, 在圖像的目標(biāo)檢測(cè)過(guò)程中,precision表示的是預(yù)測(cè)出來(lái)的檢測(cè)框定位的準(zhǔn)確率,就是我們得到了這么多框到底有多少個(gè)是好的(iou>5),比如我們一共有5個(gè)目標(biāo)你給出了200個(gè)框(測(cè)試階段,不對(duì)預(yù)測(cè)出來(lái)的框進(jìn)行非最大抑制),同時(shí)這200個(gè)框中都包含了這5個(gè)目標(biāo),可以得到該模型的Recall=1,但是其他的195個(gè)框都是沒(méi)用的,從而導(dǎo)致精確率低,這樣無(wú)疑是很蠢的。那么recall怎么解釋呢,recall是表征我們到底找到了多少個(gè)目標(biāo)物的量,比如我們一共有200個(gè)目標(biāo),我們最后給出的檢測(cè)框是20個(gè)而且這20個(gè)里面竟然有19個(gè)都是TP那么無(wú)疑我們的precision是很高的有95%,但是我們發(fā)現(xiàn)我們還有181個(gè)目標(biāo)沒(méi)有找到,也就是我們的recall是很低的,這肯定不行啊,比如我要通過(guò)雷達(dá)找導(dǎo)彈,一共12個(gè)導(dǎo)彈你就找到3個(gè),好了夠你死好幾回了。所以我們可以看到無(wú)論是precision還是recall在目標(biāo)檢測(cè)中都是很重要的,但是我們發(fā)現(xiàn)我們多取一些框那么recall就可能比較的高,但是這樣就可能會(huì)使得precision降低,所以在模型如果不是特別特別精確的情景下,這兩個(gè)量是相互矛盾的,所以我們對(duì)于不同的場(chǎng)景可能就必須要選擇到底要照顧那一邊。那么對(duì)于普適的情況下我們就要綜合考慮二者的取一個(gè)平衡,也就有了我們的AP這個(gè)指標(biāo)。好吧下面來(lái)介紹AP的計(jì)算過(guò)程。
4、AP
AP的計(jì)算方法相對(duì)來(lái)說(shuō)比較復(fù)雜,要綜合上面的所有指標(biāo),所以下面的文字和代碼,大家不要怕啰嗦,我保證你看我還不懂的話(huà),可以打死我。
AP: 平均正確率就是得出每個(gè)類(lèi)的檢測(cè)好壞的結(jié)果,它的計(jì)算方法我們舉例子說(shuō)明,首先我們假設(shè)這個(gè)數(shù)據(jù)集中的某個(gè)類(lèi)別一共有7張圖像,然后這些圖像中綠色的框是ground truths然后紅色的框是我們得到的bounding box。
然后我們首先我們按置信度(confidence)來(lái)給這些bounding box排個(gè)序,就像下面這樣,然后我們要看下這些框到底是TP還是FP,怎么判斷我們上都有解釋過(guò),但是這里有一個(gè)問(wèn)題就是對(duì)于同一個(gè)ground truth我們可能同時(shí)有多個(gè)框都和它的IOU都大于閾值,那么我么把它們都當(dāng)做TP嗎?肯定不是啊,這個(gè)時(shí)候我們就從這些框里面選一個(gè)和我們的ground truth重合率最大的一個(gè)框作為T(mén)P剩下的作為FP,注意這里是重合率大的留下而不是置信度(confidence)大的留下。其實(shí)我感覺(jué)這樣也不太合理重合率大的作為T(mén)P沒(méi)問(wèn)題但是小的作為FP就不合理了,應(yīng)該直接跳過(guò)這個(gè)框就好了不是TP也不是FP。好吧反正就是這么算。
然后得到了每個(gè)框是TP還是FP之后我們來(lái)計(jì)算 precision和recal序列,針對(duì)precision和recall序列,我這里在詳細(xì)介紹一下。
precision序列
我們?cè)谟?jì)算AP的時(shí)候要首先要計(jì)算precision。在我們實(shí)際計(jì)算的時(shí)候是一個(gè)序列,如果我們一共有N個(gè)bounding box那么它就是一個(gè)長(zhǎng)度維N的序列,我們計(jì)算Precision的時(shí)候是針對(duì)某一個(gè)類(lèi)別的,首先確定一個(gè)類(lèi)別,然后對(duì)這個(gè)類(lèi)別的所有的檢測(cè)結(jié)果按他們得到的分?jǐn)?shù)也就是confidence進(jìn)行從大大小排序,然后我們每次取一個(gè)結(jié)果出來(lái)不管這個(gè)detection是TP還是FP,all detections都要加1也就是在實(shí)際計(jì)算的過(guò)程中上述的公式中的all detections是一個(gè)遞增變化的數(shù),每次取一個(gè)框就加1,然后每次取一個(gè)框出來(lái)如果這個(gè)框是TP那么TP的數(shù)目就加1,然后TP和all detections比值作為當(dāng)前的precision,這樣取完所有的框就有了N個(gè)precision組成的一個(gè)序列。
recall序列
與precision對(duì)應(yīng)的recall也是一個(gè)長(zhǎng)度維N的序列,其中N是我們得到bounding box的數(shù)目,我們沒(méi)取出來(lái)一個(gè)框如果這個(gè)框是TP,那么TP的數(shù)目就加1,然后我們用當(dāng)前的TP數(shù)目來(lái)除以all ground truths來(lái)得到當(dāng)前的recall,這里要注意all ground truths就是我們這數(shù)據(jù)集中所有的這個(gè)類(lèi)別的目標(biāo)的數(shù)目,對(duì)于一個(gè)特定的數(shù)據(jù)集的一個(gè)特定的類(lèi)別這是一個(gè)定值。
最后這一類(lèi)別計(jì)算的precision和recall序列如下所示:
然后怎么算我們已經(jīng)說(shuō)過(guò)了現(xiàn)在我們?cè)诤?jiǎn)單提下看最前面的兩個(gè)框。取到第一個(gè)框的時(shí)候我們的all detections就是1正好我我們這個(gè)框就是TP,所以我們這里的precision就是1咯,然后在取一個(gè)框,但是這個(gè)框是FP,所有我們的TP數(shù)目還是1,但是我們的all detections就變成2了所以我們的precision這個(gè)時(shí)候變成了0.5,然后我們看下recall我們一共有15個(gè)groundtrus然后我們的recall只有在我們?nèi)〉搅艘粋€(gè)TP之后才會(huì)變化對(duì)吧,好了這個(gè)很明顯了我不想寫(xiě)了。
然后有了recall和precision序列了然后我們?cè)趺锤悖珹P的計(jì)算有兩套標(biāo)準(zhǔn),一套是07年的標(biāo)準(zhǔn),一套是后面的標(biāo)準(zhǔn)我們一般現(xiàn)在使用的都是新的標(biāo)準(zhǔn)。
第一種方是根據(jù)recall將我們的得到的那個(gè)序列分成11段
就是首先我們?nèi)〕鰜?lái)所有的recall在0到0.1這個(gè)區(qū)間內(nèi)的所有的recall以及對(duì)應(yīng)的那些precision,然后我們從這些precision中找到最大值作為這個(gè)區(qū)間內(nèi)precision的代表,然后我們?cè)谑O碌?0個(gè)區(qū)間內(nèi)也分別找到最大的precision,最后把這11個(gè)數(shù)求均值就作為我們的AP。如果沒(méi)懂沒(méi)關(guān)系,我們先看方法一在例子中的運(yùn)用。
運(yùn)用方法一求解例子的AP的展示如下圖:
我們可以看到我們上面只是取了11個(gè)recall的區(qū)間,這樣做其實(shí)也可以但是總是感覺(jué)太粗糙了些,所以后面大家就提出了一種新的AP的計(jì)算方法,我們可以把所有的recall取值都取一遍,仔細(xì)觀察下我們會(huì)發(fā)現(xiàn)其實(shí)在recall序列中有些位置都是相等的,因?yàn)橹挥形覀內(nèi)〉搅艘粋€(gè)TP的時(shí)候recall的數(shù)值才會(huì)發(fā)生變化。
好了我們結(jié)合上面的公式來(lái)看看到底怎么算,首先我們?nèi)〉搅说趎種recall的取值,然后我們我們?cè)谕罂粗钡桨l(fā)現(xiàn)出現(xiàn)了不同的recall,我們?nèi)缓笪覀冊(cè)谶@個(gè)區(qū)間里找到最大的precision,然后用這個(gè)最大的precision和這個(gè)區(qū)間長(zhǎng)度相乘作為這段區(qū)間的AP,然后我們遍歷所有的區(qū)間然后把每段的AP加起來(lái)就得到了最后的AP。如果還是沒(méi)有看懂我們看個(gè)例子,看完下面例子你一定就懂了。
如上圖,就是每個(gè)recall區(qū)間做相應(yīng)的計(jì)算,即每個(gè)recall的區(qū)間內(nèi)我們只取這個(gè)區(qū)間內(nèi)precision的最大值然后和這個(gè)區(qū)間的長(zhǎng)度做乘積,所以最后體現(xiàn)出來(lái)就是一系列的矩形的面積,上面的那個(gè)例子,我們一共有recall一共變化了7次,我們就有7個(gè)recall區(qū)間要做計(jì)算,然后實(shí)際我們計(jì)算的時(shí)候人為的要把這個(gè)曲線(xiàn)變化成單調(diào)遞減的,也就是對(duì)現(xiàn)有的precision序列要做一些處理,具體的處理我結(jié)合代碼說(shuō)明一下:
def voc_ap(rec, prec, use_07_metric=False):
""" ap = voc_ap(rec, prec, [use_07_metric])
Compute VOC AP given precision and recall.
If use_07_metric is true, uses the
VOC 07 11 point method (default:False).
"""
if use_07_metric:
# 11 point metric
ap = 0.
for t in np.arange(0., 1.1, 0.1):
if np.sum(rec >= t) == 0:
p = 0
else:
p = np.max(prec[rec >= t])
ap = ap + p / 11.
else:
# correct AP calculation
# first append sentinel values at the end
mrec = np.concatenate(([0.], rec, [1.]))
mpre = np.concatenate(([0.], prec, [0.]))
print(mpre)
# compute the precision envelope
for i in range(mpre.size - 1, 0, -1):
mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])
# to calculate area under PR curve, look for points
# where X axis (recall) changes value
i = np.where(mrec[1:] != mrec[:-1])[0]
ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])
print(mpre)
return ap
這個(gè)代碼在任何一個(gè)目標(biāo)檢測(cè)的代碼里應(yīng)該都可以找到的,下面我們看下這個(gè)代碼做了哪些事情:首先我們輸入的序列是我們得到的:
rec:[0.0666,0.0666,0.1333,0.1333,0.1333,0.1333,0.1333,0.1333,0.1333,0.2,0.2,0.2666,0.3333 ,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4666,0.4666],
然后是我們的pre:[1,0.5,0.6666,0.5,0.4,0.3333,0.2857,0.25,0.2222,0.3,0.2727,0.3333,0.3846,0.4285,0.4,0.375,0.3529, 0.3333,0.3157,0.3,0.2857,0.2727,0.3043,0.2916]。
代碼里首先是判斷是不是用11點(diǎn)的方法,我們這里不用所以跳轉(zhuǎn)到下面的代碼:
mrec = np.concatenate(([0.], rec, [1.]))
mpre = np.concatenate(([0.], prec, [0.]))
那么這一步呢就是相當(dāng)于把我們的recall的開(kāi)區(qū)間給補(bǔ)上了,補(bǔ)成了閉合的閉區(qū)間。mpre也是做了對(duì)應(yīng)的補(bǔ)償使得一一對(duì)應(yīng)。np.concatenate()
函數(shù),concatenate
在英文中是級(jí)聯(lián)的意思,我們可以簡(jiǎn)單地理解為連接。具體用法大家可以自己去了解,
for i in range(mpre.size - 1, 0, -1):
mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])
那這一步呢就是在做我們上面說(shuō)到的人為地把這個(gè)pre-rec曲線(xiàn)變成單調(diào)遞減的,為什么這么做呢,我也不太清楚。我們這里可以看到他就是在做一個(gè)比較,就是后一項(xiàng)要是比前一項(xiàng)大的話(huà)那么就把這個(gè)大的值賦值給前一項(xiàng)。做完這一步后的pre就變成了:[1. 1. 0.6666 0.6666 0.5 0.4285 0.4285 0.4285 0.4285 0.4285 0.4285 0.4285 0.4285 0.4285 0.4285 0.4 0.375 0.3529 0.3333 0.3157 0.3043 0.3043 0.3043 0.3043 0.2916 0. ]我們發(fā)現(xiàn)與之前的[0. 1. 0.5 0.6666 0.5 0.4 0.3333 0.2857 0.25 0.2222 0.3 0.2727 0.3333 0.3846 0.4285 0.4 0.375 0.3529 0.3333 0.3157 0.3 0.2857 0.2727 0.3043 0.2916 0. ]對(duì)比那些在0.4285之前出現(xiàn)的但是比0.4285小的數(shù)值都被替換成了0.4285.,相當(dāng)于強(qiáng)行把這個(gè)曲線(xiàn)給填的鼓了起來(lái)。
做完這個(gè)操作后,我們就要按rec區(qū)間去計(jì)算ap了,準(zhǔn)確來(lái)說(shuō)是用rec的區(qū)間長(zhǎng)度乘以這個(gè)區(qū)間上的最大的pre(注意這里是處理后的pre)。代碼實(shí)現(xiàn)起來(lái)就是:
i = np.where(mrec[1:] != mrec[:-1])[0]#獲取rec區(qū)間變化的點(diǎn)
ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])#(mrec[i + 1] - mrec[i])這里得到rec區(qū)間的
#長(zhǎng)度,mpre[i + 1]這里是這個(gè)區(qū)間上對(duì)應(yīng)的pre數(shù)值(處理后的)
我們這里分別輸出一下:
print((mrec[i + 1] - mrec[i]))
print(mpre[i + 1])
結(jié)果是:[0.0666 0.0667 0.0667 0.0666 0.0667 0.0667 0.0666 0.5334]和[1. 0.6666 0.4285 0.4285 0.4285 0.4285 0.3043 0. ]我們看一下首先是0.0666他代表第一個(gè)rec0.0666到0的區(qū)間長(zhǎng)度,然后呢這個(gè)區(qū)間上出現(xiàn)的最大的pre是1,第二項(xiàng)0.0667代表0.0666到0.1333的區(qū)間長(zhǎng)度是0.0667,在rec取0.1333這段區(qū)間上最大額pre是0.4285(變化后的),后面的以此類(lèi)推這塊還有疑問(wèn)的建議結(jié)合這上面的那個(gè)表和pre處理后的序列看一下哈,。為啥pre輸出的最后一項(xiàng)是0呢,是因?yàn)檫@段區(qū)間實(shí)際上recall是沒(méi)有達(dá)到過(guò)的我們最大的rec也就只到了0.4666就結(jié)束了。
那么對(duì)于這個(gè)例子就是通過(guò)上面的就可以算出來(lái)了,其實(shí)還是蠻直觀的。恩到這里我們就把怎么算AP講完了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-849784.html
5、mAP
到這里mAP的計(jì)算方法就非常簡(jiǎn)單了,mAP是啥呢,其實(shí)m就是mean均值的意思我們AP不是算個(gè)一個(gè)類(lèi)別的嗎,mAP就是把所有的類(lèi)別的AP都算出來(lái)然后求個(gè)均值就可以了,然后至于代碼github上面或者你看faster-RCNN這些都有現(xiàn)成的,恩希望大家看完這個(gè)就能理解AP咋算的啦,有不懂的地方好好看看這個(gè)例子肯定是可以看懂的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-849784.html
到了這里,關(guān)于目標(biāo)檢測(cè)擴(kuò)(六)一篇文章徹底搞懂目標(biāo)檢測(cè)算法中的評(píng)估指標(biāo)計(jì)算方法(IoU(交并比)、Precision(精確度)、Recall(召回率)、AP(平均正確率)、mAP(平均類(lèi)別AP) )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!