POST TIME:2021-07-11 22:17
本頁介紹了COCO使用的關鍵點評估指標。此處提供的評估代碼可用于在公開可用的COCO驗證集上獲得結果。它計算下面描述的多個指標。為了在COCO測試集上獲得結果,其中隱藏了實際真值注釋,必須將生成的結果上傳到評估服務器。下面描述的評估代碼用于評估測試集的結果。
COCO關鍵點任務需要同時檢測對象并將其關鍵點定位(對象位置不在測試時間給出)。由于同時檢測和關鍵點估計的任務是相對較新的,我們選擇采用受物體檢測度量啟發的新穎度量。為了簡單起見,我們將這個任務稱為關鍵點檢測,將預測算法稱為關鍵點檢測器。我們建議在繼續之前查看對象檢測的評估指標。
評估關鍵點檢測的核心思想是模擬用于目標檢測的評估指標,即平均精確度(AP,average precision)和平均召回率(AR,average recall)及其變體。這些度量的核心是實際真實對象和預測對象之間的相似性度量。在對象檢測的情況下,IoU(intersection-over-union,叫做交并比)作為這種相似性度量(對于框和片段)。IoU隱含定義了實際真實對象與預測對象之間的匹配,并允許計算精度召回曲線。為了采用AP / AR進行關鍵點檢測,我們只需要定義一個類似的相似性度量。我們通過定義與IoU具有相同作用的對象關鍵點相似度(OKS,object keypoint similarity)來實現這一點。
對于每個對象,實際真值關鍵點具有形式[x1,y1,v1,...,xk,yk,vk],其中x,y是關鍵點位置,v是定義為的可見性標志。v = 0表示未標記,v = 1表示標記但不可見,v = 2表示標記且可見。每個地面真值對象也有一個比例尺s,我們將其定義為物體分段區域的平方根(Each ground truth object also has a scale s which we define as the square root of the object segment area)。有關實際真值格式的詳細信息,請參閱下載頁面。
對于每個對象,關鍵點檢測器都必須輸出關鍵點位置和對象級別的置信度(object-level confidence)。對象的預測關鍵點應該具有與實際真值相同的形式:[x1,y1,v1,...,xk,yk,vk]。然而,在評估過程中,檢測器的預測vi并不是目前使用的,即關鍵點檢測器不需要預測每個關鍵點的可見度或置信度(visibilities or confidences)。
我們將對象關鍵點相似性(OKS)定義為:
OKS = Σi[exp(-di2/2s2κi2)δ(vi>0)] / Σi[δ(vi>0)]
di是每個關鍵點相應的實際真值和檢測到的關鍵點之間的歐幾里德距離,vi是實際真值的可見性標記(檢測器的預測vi不被使用)。為了計算OKS,我們通過一個非標準化的高斯將標準差傳遞給標準偏差sκi,其中s是對象尺度,κi是一個控制衰減的按鍵控制常數。對于每個關鍵點,這產生范圍在0和1之間的關鍵點相似性。這些相似性在所有標記的關鍵點(vi> 0的關鍵點)上被平均。 未標記的預測關鍵點(vi = 0)不影響OKS。完美的預測將有OKS = 1,并且所有關鍵點的偏離超過幾個標準差sκi的預測都會有OKS?0。OKS類似于IoU。考慮到OKS,我們可以計算AP和AR,就像IoU允許我們計算盒/段(box/segment)檢測的這些度量一樣。
我們調整κi使得OKS是一個感知上有意義且易于解釋的相似性度量。首先,在val中使用5000個冗余注釋的圖像,對于每個關鍵點類型i,我們測量關于對象尺度s的每個關鍵點標準偏差σi。那就是我們計算σi2=E[di2/s2]。σi對于不同的關鍵點有很大的不同:人的關鍵點(肩膀,膝蓋,臀部等shoulders, knees, hips)往往比人的頭部(眼睛,鼻子,耳朵eyes, nose, ears)對應的σ大得多。
為了獲得感知上有意義和可解釋的相似性度量,我們設置κi=2σi。通過設定κi,在di/s的一個,兩個和三個標準偏差處,關鍵點相似度exp(-di2/2s2κi2)取值為e-1/8=0.88, e-4/8=0.61 and e-9/8=0.32。正如所料,人類注釋的關鍵點是正態分布的(忽略偶爾的異常值)。因此,回顧68–95–99.7規則,設定κi=2σi意味著人類注釋關鍵點的68%,95%和99.7%分別具有0.88,0.61或0.32或更高的關鍵點相似性(在實踐中百分比是75%,95%和98.7%)。
OKS是所有(標記的)對象關鍵點之間的平均關鍵點相似度。下面我們用κi=2σi來描繪預測的OKS分布,假設每個對象有10個獨立的關鍵點(藍色曲線),以及在雙重注釋數據(綠色曲線)上人類OKS得分的實際分布:
圖像不完全匹配的原因有如下幾個(1)對象關鍵點不是獨立的,(2)每個對象的標記關鍵點的數量是不同的,(3)真實數據包含1-2%的異常值(大部分是是由于注釋者誤將左當成右或當兩個人靠近時注釋錯誤造成的)。不過,這種行為大致如預期的那樣。我們得出一些關于人類表現的結論(1)在0.50的OKS中,人類的表現幾乎完美(95%),(2)人類的中位數為~0.91,(3)在OKS為0.95后人類的表現迅速下降。請注意,此OKS分布可用于預測人類AR(因為AR不依賴于誤報)。
Precision 精確率(查準率)。表示正確識別物體A的個數占總識別出的物體個數n的百分數Precision = TP / (TP+FP)
Recall 召回率(查全率)。表示正確識別物體A的個數占測試集中物體A的總個數的百分數Recall = TP / (TP+FN)
fp :false positive誤報,即預測錯誤
fn :false negative漏報,即沒有預測到
tp:true positive
tn:true negative
iou:intersection-over-union
Accuracy 準確率。正確分類的樣本數除以所有的樣本數,正確率越高,分類器越好。Accuracy=(TP+TN)/ (TP+TN+FP+FN)
以上介紹都是基于2分類的,并不是多分類的
以下10個指標用于表征COCO上的關鍵點檢測器的性能:
Average Precision (AP):
AP % AP at OKS=0.50:0.05:0.95(primary challenge metric)
APOKS=.50 % AP at OKS=0.50 (loose metric)
APOKS=.75 % AP at OKS=0.75 (strict metric)
AP Across Scales:
APmedium % AP for medium objects: 322 < area < 962
APlarge % AP for large objects: area > 962
Average Recall (AR):
AR % AR at OKS=0.50:0.05:0.95
AROKS=.50 % AR at OKS=0.50
AROKS=.75 % AR at OKS=0.75
AR Across Scales:
ARmedium % AR for medium objects: 322 < area < 962
ARlarge % AR for large objects: area > 962
1)除非另有說明,否則AP和AR在多個OKS值(0.50:0.05:0.95)之間取平均值。
2)正如所討論的,我們為每個關鍵點類型i設置κi=2σi。對于人來說,括號內為σ取值,鼻子(0.026,nose),眼睛(0.025,eyes),耳朵(0.035,ears),肩膀(0.079,shoulders),手肘(0.072,elbows),手腕(0.062,wrists),臀部(0.107,hips),膝蓋(0.087,knees),腳踝(0.089,ankles)
3)AP(所有10個OKS閾值的平均值)將決定挑戰勝利者。當考慮COCO的關鍵點性能時,這應該被認為是最重要的一個指標。
4)計算所有度量標準,每個圖像最多允許20個最高得分檢測(我們使用20個檢測,而不是像對象檢測挑戰那樣的100個,因為當前人是唯一具有關鍵點的類別)。
5)小對象(分段區域面積(segment area)<322)不包含關鍵點注釋。
6)對于沒有標注關鍵點的對象(包括人群),我們使用寬松的啟發式方法,以允許根據幻覺關鍵點(hallucinated keypoints)(置于實際真實對象內以便最大化OKS)匹配檢測結果。 這與使用框/段(boxes/segments)來忽略區域的處理非常相似。詳細信息請參閱代碼。
7)無論被標記的還是可見的關鍵點的數量如何,每個對象都具有相同的重要性。我們不過濾只有幾個關鍵點的對象,也不會根據存在的關鍵點的數量來加權對象示例。
評估代碼可在COCO github上找到。 具體來說,分別參見Matlab或Python代碼中的CocoEval.m或cocoeval.py。另請參閱Matlab或Python代碼(demo)中的evalDemo。在運行評估代碼之前,請按結果格式頁面上描述的格式準備結果,建議先看一下這個格式。
除了評估代碼之外,我們還提供了一個函數analyze()來詳細分析多實例關鍵點估計中的錯誤。這在Ronchi等人的多實例姿態估計的基準和誤差診斷中(Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation)被廣泛地描述。代碼生成這樣的圖像。
我們展示了來自Zhe Cao等人的2016年ECCV 2016關鍵挑戰獲勝者Pose Affinity Fields檢測器的分析結果。
該圖總結了所有類型的錯誤對多實例姿態估計算法的性能的影響。它由一系列精確召回(PR,Precision Recall)曲線組成,其中每條曲線保證嚴格地高于前面的曲線,因為該算法的檢測在(任意的)OKS閾值為0.9時被逐步校正。圖例顯示曲線下面積(AUC,Area Under the Curve)。曲線如下(檢查項目頁面的完整說明):
1)Original Dts.:在OKS = 0.9(嚴格的OKS(strict KOS)下的AP)時,原始檢測獲得的PR,對應于APOKS=.9度量的曲線下面積。
2)Miss:在所有遺漏錯誤(miss error)都被糾正之后,OKS = 0.9處的PR(嚴格的OKS下的AP)。缺失(miss)是一個很大的定位誤差:檢測到的關鍵點不在正確的身體部位附近。
3)Swap:在所有交換錯誤(swap errors)都被糾正之后,OKS =0.9處的PR(嚴格的OKS下的AP)。 交換(swap)是由于圖像中不同人的相同身體部分(即右肘right elbow)之間的混淆。
4)Inversion:在所有的逆誤差(inversion errors)被糾正之后,OKS =0.9處的PR(嚴格的OKS下的AP)。 倒置(inversion)是由于同一個人身體部位的混亂(即左右肘)造成的。
5)Jitter:在所有抖動錯誤(jitter errors)被糾正之后,OKS =0.9處的PR(嚴格的OKS下的AP)。 抖動(jitter)是一個小的定位誤差:檢測到的關鍵點在正確的身體部位附近。
6)Opt. Score:所有的檢測算法在評估時使用oracle函數重新計算之后,OKS = 0.9處的PR(AP在嚴格的OKS)。在檢測和實際真值之間匹配的數量重新計分達到最大值。
7)FP:所有背景誤報(fps)被移除后的PR。 FP是一個階躍函數,直到達到最大召回率為1,然后降到0(跨類別平均后曲線更平滑)。
8)FN:刪除所有剩余的錯誤時的PR(微不足道的AP = 1(trivially AP=1))。
在上述檢測器的情況下,OKS = 0.9的整體AP是0.327。糾正所有miss錯誤導致AP的大幅改善到0.415。修正swaps改善到0.488,修正inversions改善到0.545,獲得較小的收益。當jitter錯誤被消除時,獲得另一個大的改進,導致0.859的AUC。這顯示了如果CMU算法具有關鍵點的完美定位,性能將會如何。在定位很好的情況下,置信度得分錯誤(confidence score errors)的影響并不顯著,但仍然導致AUC提高約2%(0.879)。最佳評分檢測大大減少了背景誤報(Background False Positives)的影響,因為檢測很少保持不匹配。最后,去除背景錯報(Background False Negatives)提供了剩余的AUC以獲得完美的表現。總之,在OKS = 0.9時CMU的錯誤主要是不完美的定位,主要是抖動錯誤和錯過檢測(missed detections)。
對于給定的檢測器,代碼共生成180個圖,在3個區域范圍(中,大,全)和10個評估閾值(0.5 :0. 05 :0.95)內分析所有錯誤。分析代碼將自動生成一個PDF報告,其中包含總體性能總結,方法行為對不同類型錯誤的敏感性及其對性能的影響,以及幾個最重要的失敗案例。
注意:analyze()可能需要很長時間才能運行,請耐心等待。因此,我們通常不會在評估服務器上運行此代碼;您必須使用驗證集在本地運行代碼。你可以在這個GitHub repository中找到analyze()函數。
下一篇:電銷機器人目前技術如何?