化妝品網(wǎng)站設計報告怎么網(wǎng)上推廣自己的產(chǎn)品
目錄
- 1 準確率和召回率
- 2 P-R曲線的繪制
- 3 AP R11與AP R40標準
- 4 實際案例
1 準確率和召回率
首先給出 T P TP TP、 F P FP FP、 F N FN FN、 T N TN TN的概念
- 真陽性
True Positive
T P TP TP
預測為正(某類)且真值也為正(某類)的樣本數(shù),可視為 I o U > I o U t h r e s h o l d \mathrm{IoU>IoU_{threshold}} IoU>IoUthreshold?的檢測框數(shù)量 - 假陽性
False Positive
F P FP FP
預測為正(某類)但真值為負(另一類)的樣本數(shù),可視為 I o U ≤ I o U t h r e s h o l d \mathrm{IoU\le IoU_{threshold}} IoU≤IoUthreshold?的檢測框數(shù)量 - 真陰性
True Negative
T N TN TN
預測為負(不是某類)且真值也為負(不是某類)的樣本數(shù) - 假陰性
False Negative
F N FN FN
預測為負(不是某類)但真值為正(某類)的樣本數(shù),即在真值區(qū)域沒有給出檢測框
基于上述概念給出準確率和召回率的計算方法
- 準確率
Precision
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP?
- 召回率
Recall
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP?
準確率 P P P又稱為查準率,反映了目標檢測的正確性;召回率 R R R又稱為查全率,反映了目標檢測的泛化性。
2 P-R曲線的繪制
P-R性能也稱為準確率-召回率性能,或稱查準率-查全率性能,常用于信息檢索、Web推薦引擎等應用中。體現(xiàn)P-R性能的主要是P-R曲線,P-R曲線是用于評估二分類模型性能的重要工具,它展示了在不同閾值下模型的準確率和召回率之間的變化關系
P-R曲線的繪制過程是:將預測置信度從高到低排序,依次選擇置信度為預測閾值(即大于該閾值的判定為正樣本,否則為負樣本),計算該閾值下的TP、FN、FP,從而得到準確率和召回率,從高到低移動閾值形成P-R曲線
以一個實例說明繪制過程
假設有10個樣本,其中正負樣本各5個,按照預測置信度從高到低排序,依次計算準確率和召回率
將形成的(Precision, Recall)坐標對畫到坐標系上可得
隨著樣本增加,折現(xiàn)會趨于曲線
3 AP R11與AP R40標準
P-R曲線圍成的面積稱為平均準確率(Average Precision, AP),用于衡量模型的綜合性能
對于面積的計算,一種方法是積分,但由于曲線形態(tài)各異,積分比較耗費計算資源;另一種方法是離散化求和,即用若干個矩形面積來近似曲線下面積
具體的公式為
A P ∣ R = 1 ∣ R ∣ ∑ r ∈ R ρ i n t e r ( r ) AP\mid_{R}^{}=\frac{1}{\left| R \right|}\sum_{r\in R}{\rho _{\mathrm{inter}}\left( r \right)} AP∣R?=∣R∣1?r∈R∑?ρinter?(r)
其中 R = { r 1 , r 2 , ? , r n } R=\left\{ r_1,r_2,\cdots ,r_n \right\} R={r1?,r2?,?,rn?}是等間隔的召回率點, R 11 R_{11} R11?和 R 40 R_{40} R40?分別指
R 11 = { 0 , 1 10 , 2 10 , ? , 1 } R 40 = { 1 40 , 2 40 , 3 40 , ? , 1 } R_{11}=\left\{ 0,\frac{1}{10},\frac{2}{10},\cdots ,1 \right\} \\ R_{40}=\left\{ \frac{1}{40},\frac{2}{40},\frac{3}{40},\cdots ,1 \right\} R11?={0,101?,102?,?,1}R40?={401?,402?,403?,?,1}
相當于把召回率等分為 ∣ R ∣ \left| R \right| ∣R∣個矩形,高度為P-R曲線在該召回率點的準確度。但問題是可能原曲線在該點沒有計算準確度指(因為本質(zhì)上還是離散曲線),因此就引入準確度插值函數(shù)
ρ i n t e r ( r ) = max ? r ′ : r ′ > r ρ ( r ′ ) \rho _{\mathrm{inter}}\left( r \right) =\max _{r':r'>r}\rho \left( r' \right) ρinter?(r)=r′:r′>rmax?ρ(r′)
就是取召回率為 r ′ r' r′的位置之后所有準確率的最大值,作為該點的插值準確率,相當于把P-R曲線化成階梯矩形,如下圖藍色曲線所示,接著按公式計算即可
R 40 R_{40} R40?一定程度上削弱了 R 11 R_{11} R11?在準確率很低時,AP結果仍然很高的情況,舉例而言
假設一個場景中有20個
Ground Truth
,但是算法只給出了一個檢測結果,且檢測的IoU大于閾值,即這是一個TP樣本。該置信度下, P r e c i s i o n = 1.0 Precision=1.0 Precision=1.0, R e c a l l = 1 20 = 0.05 Recall=\frac{1}{20}=0.05 Recall=201?=0.05
- 計算 A P ∣ R 11 = 1 11 = 0.0909 AP\mid_{R_{11}}^{}=\frac{1}{11}=0.0909 AP∣R11??=111?=0.0909,這里的1對應 R 11 R_{11} R11?中召回點0,而這個準確率已經(jīng)超過了很多單目3D檢測算法的準確率,顯然不合理
- 計算 A P ∣ R 40 = 1 + 1 40 = 0.05 AP\mid_{R_{40}}^{}=\frac{1+1}{40}=0.05 AP∣R40??=401+1?=0.05,這里的1對應 R 40 R_{40} R40?中召回點 1 40 \frac{1}{40} 401?和 2 40 \frac{2}{40} 402?
目前KITTI官方也認可了 A P ∣ R 40 AP\mid_{R_{40}}^{} AP∣R40??指標,后續(xù)基本也采用 A P ∣ R 40 AP\mid_{R_{40}}^{} AP∣R40??進行實驗評估
以下是KITTI數(shù)據(jù)集AP檢測的實例
Car AP@0.70, 0.70, 0.70:
bbox AP:90.7769, 89.7942, 88.8813
bev AP:90.0097, 87.9282, 86.4528
3d AP:88.6137, 78.6245, 77.2243
aos AP:90.75, 89.66, 88.66
Car AP_R40@0.70, 0.70, 0.70:
bbox AP:95.5825, 94.0067, 91.5784
bev AP:92.4184, 88.5586, 87.6479
3d AP:90.5534, 81.6116, 78.6108
aos AP:95.55, 93.85, 91.33
解釋如下:
-
第一行
Car AP@0.70, 0.70, 0.70
Car
表示類別,AP
表示基于AP R11
的平均準確率,后面三個0.70
分別指代2D檢測框、BEV檢測框和3D檢測框的IoU
閾值,即大于這個閾值才認為是正樣本 -
第二、三、四行
每一行指代一種檢測模式,即2D檢測框、BEV檢測框和3D檢測框,每一行的三個數(shù)值分別對應Easy
、Moderate
和Hard
三種檢測難度的的結果,難度越大(例如遮擋嚴重),檢測準確度越小 -
第五行
aos
表示平均朝向相似度(average orientation similarity),用于評價預測輸出的朝向與真實框朝向的相似程度
4 實際案例
在KITTI數(shù)據(jù)集中,按以下步驟計算AP數(shù)值
-
計算IoU,這部分原理參考3D目標檢測實戰(zhàn) | 詳解2D/3D檢測框交并比IoU計算(附Python實現(xiàn))
frame_overlaps, parted_overlaps, gt_num, dt_num = iou(gt_annos, dt_annos, method, num_parts)
-
以0置信度閾值計算置信度列表,即只要IoU符合條件的都視為TP樣本,提取其置信度評分
rets = compute(frame_overlaps[i], gt_data_list[i], dt_data_list[i],ignored_gts[i], ignored_dts[i], min_overlap=min_overlap, thresh=0.0) _, _, _, _, scores_i = rets
-
對置信度列表均勻采樣41個點,得到40個召回點對應的置信度閾值
thresholds = getThresholds(np.array(scores), valid_gt_num)def getThresholds(scores: np.ndarray, num_gt, num_sample_pts=41):scores.sort()scores = scores[::-1]current_recall = 0thresholds = []for i, score in enumerate(scores):l_recall = (i + 1) / num_gtif i < (len(scores) - 1):r_recall = (i + 2) / num_gtelse:r_recall = l_recallif (((r_recall - current_recall) < (current_recall - l_recall))and (i < (len(scores) - 1))):continuethresholds.append(score)current_recall += 1 / (num_sample_pts - 1.0)return thresholds
-
遍歷每個閾值,計算該閾值下的TP、FP和FN,從而計算準確率和召回率
for i in range(len(thresholds)):recall[m, l, k, i] = pr[i, 0] / (pr[i, 0] + pr[i, 2])precision[m, l, k, i] = pr[i, 0] / (pr[i, 0] + pr[i, 1])if compute_aos:aos[m, l, k, i] = pr[i, 3] / (pr[i, 0] + pr[i, 1])
-
取PR曲線外接矩形
for i in range(len(thresholds)):precision[m, l, k, i] = np.max(precision[m, l, k, i:], axis=-1)recall[m, l, k, i] = np.max(recall[m, l, k, i:], axis=-1)if compute_aos:aos[m, l, k, i] = np.max(aos[m, l, k, i:], axis=-1)
-
計算AP
def mAP(prec):sums = 0for i in range(0, prec.shape[-1], 4):sums = sums + prec[..., i]return sums / 11 * 100def mAPR40(prec):sums = 0for i in range(1, prec.shape[-1]):sums = sums + prec[..., i]return sums / 40 * 100
本文完整工程代碼請通過下方名片聯(lián)系博主獲取
🔥 更多精彩專欄:
- 《ROS從入門到精通》
- 《Pytorch深度學習實戰(zhàn)》
- 《機器學習強基計劃》
- 《運動規(guī)劃實戰(zhàn)精講》
- …