代碼倉(cāng)庫(kù)地址:https://github.com/Oneflow-Inc/one-yolov5歡迎star one-yolov5項(xiàng)目 獲取最新的動(dòng)態(tài)。如果您有問(wèn)題,歡迎在倉(cāng)庫(kù)給我們提出寶貴的意見。如果對(duì)您有幫助,歡迎來(lái)給我Star呀~
引言
本文主要介紹在 one-yolov5 項(xiàng)目中 計(jì)算mAP用到的一些numpy操作,這些numpy操作使用在 utils/metrics.py (https://github.com/Oneflow-Inc/one-yolov5/blob/734609fca9d844ac48749b132fb0a5777df34167/utils/metrics.py)中。這篇文章是《YOLOv5全面解析教程》四,目標(biāo)檢測(cè)模型精確度評(píng)估 的補(bǔ)充,希望能幫助到小伙伴們。
用到的 numpy 操作比如:np.cumsum()、np.interp()、np.maximum.accumulate()、np.trapz()等。接下來(lái)將在下面逐一介紹。
importnumpyasnp
np.cumsum()
返回元素沿給定軸的累積和。
numpy.cumsum(a, axis=None, dtype=None, out=None) 源碼(https://github.com/numpy/numpy/blob/v1.23.0/numpy/core/fromnumeric.py#L2497-L2571)
a :數(shù)組
axis: 軸索引,整型,若a為n維數(shù)組,則axis的取值范圍為[0,n-1]
dtype: 返回結(jié)果的數(shù)據(jù)類型,若不指定,則默認(rèn)與a一致n
out: 數(shù)據(jù)類型為數(shù)組。用來(lái)放置結(jié)果的替代輸出數(shù)組,它必須具有與輸出結(jié)果具有相同的形狀和數(shù)據(jù)緩沖區(qū)長(zhǎng)度
返回
沿著指定軸的元素累加和所組成的數(shù)組,其形狀應(yīng)與輸入數(shù)組a一致
np.cumsum(a)#計(jì)算累積和的軸。默認(rèn)(無(wú))是在展平的數(shù)組上計(jì)算cumsum。
array([ 1, 3, 6, 10, 15, 21])
a=np.array([[1,2,3],[4,5,6]]) np.cumsum(a,dtype=float)#指定輸出的特定的類型
array([ 1., 3., 6., 10., 15., 21.])
np.cumsum(a,axis=0)#3列中每一列的行總和
array([[1, 2, 3], [5, 7, 9]])
x=np.ones((3,4),dtype=int) np.cumsum(x,axis=0)
array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
np.cumsum(a,axis=1)#2行中每行的列總和
array([[ 1, 3, 6], [ 4, 9, 15]])
np.interp()
參數(shù)
x: 數(shù)組 待插入數(shù)據(jù)的橫坐標(biāo)
xp: 一維浮點(diǎn)數(shù)序列 原始數(shù)據(jù)點(diǎn)的橫坐標(biāo),如果period參數(shù)沒有指定那么就必須是遞增的 否則,在使用xp = xp % period正則 化之后,xp在內(nèi)部進(jìn)行排序
fp: 一維浮點(diǎn)數(shù)或復(fù)數(shù)序列 原始數(shù)據(jù)點(diǎn)的縱坐標(biāo),和xp序列等長(zhǎng).
left: 可選參數(shù),類型為浮點(diǎn)數(shù)或復(fù)數(shù)(對(duì)應(yīng)于fp值) 當(dāng)x < xp[0]時(shí)的插值返回值,默認(rèn)為fp[0].
right: 可選參數(shù),類型為浮點(diǎn)數(shù)或復(fù)數(shù)(對(duì)應(yīng)于fp值),當(dāng)x > xp[-1]時(shí)的插值返回值,默認(rèn)為fp[-1].
period: None或者浮點(diǎn)數(shù),可選參數(shù) 橫坐標(biāo)的周期 此參數(shù)使得可以正確插入angular x-coordinates. 如果該參數(shù)被設(shè)定,那么忽略left參數(shù)和right參數(shù)
返回
浮點(diǎn)數(shù)或復(fù)數(shù)(對(duì)應(yīng)于fp值)或ndarray. 插入數(shù)據(jù)的縱坐標(biāo),和x形狀相同
注意!
在沒有設(shè)置period參數(shù)時(shí),默認(rèn)要求xp參數(shù)是遞增序列
#插入一個(gè)值 importnumpyasnp importmatplotlib.pyplotasplt x=2.5 xp=[1,2,3] fp=[3,2,0] y=np.interp(x,xp,fp)#1.0 plt.plot(xp,fp,'-o') plt.plot(x,y,'x')#畫插值 plt.show()圖片
#插入一個(gè)序列 importnumpyasnp importmatplotlib.pyplotasplt x=[0,1,1.5,2.72,3.14] xp=[1,2,3] fp=[3,2,0] y=np.interp(x,xp,fp)#array([3.,3.,2.5,0.56,0.]) plt.plot(xp,fp,'-o') plt.plot(x,y,'x') plt.show()圖片
np.maximum.accumulate
計(jì)算數(shù)組(或數(shù)組的特定軸)的累積最大值
importnumpyasnp d=np.random.randint(low=1,high=10,size=(2,3)) print("d: ",d) c=np.maximum.accumulate(d,axis=1) print("c: ",c)
d: [[1 9 5] [2 6 1]] c: [[1 9 9] [2 6 6]]
np.trapz()
numpy.trapz(y, x=None, dx=1.0, axis=- 1)使用復(fù)合梯形規(guī)則沿給定軸積分。
importmatplotlib.pyplotasplt importnumpyasnp y=[1,2,3];x=[i+1foriinrange(len(y))] print(np.trapz(x)) plt.fill_between(x,y) plt.show()#(1+3)*(3-1)/2=4
4.0圖片
importmatplotlib.pyplotasplt importnumpyasnp y=[1,2,3] x=[4,6,8] print(np.trapz(y,x)) plt.fill_between(x,y) plt.show()#(3+1)*(8-4)/2=8
8.0圖片
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62325 -
MAP
+關(guān)注
關(guān)注
0文章
48瀏覽量
15121
原文標(biāo)題:《YOLOv5全面解析教程》五,計(jì)算mAP用到的numpy函數(shù)詳解
文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論