代碼倉庫地址:https://github.com/Oneflow-Inc/one-yolov5歡迎star one-yolov5項目 獲取最新的動態。如果您有問題,歡迎在倉庫給我們提出寶貴的意見。如果對您有幫助,歡迎來給我Star呀~
引言
本文主要介紹在 one-yolov5 項目中 計算mAP用到的一些numpy操作,這些numpy操作使用在 utils/metrics.py (https://github.com/Oneflow-Inc/one-yolov5/blob/734609fca9d844ac48749b132fb0a5777df34167/utils/metrics.py)中。這篇文章是《YOLOv5全面解析教程》四,目標檢測模型精確度評估 的補充,希望能幫助到小伙伴們。
用到的 numpy 操作比如:np.cumsum()、np.interp()、np.maximum.accumulate()、np.trapz()等。接下來將在下面逐一介紹。
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 :數組
axis: 軸索引,整型,若a為n維數組,則axis的取值范圍為[0,n-1]
dtype: 返回結果的數據類型,若不指定,則默認與a一致n
out: 數據類型為數組。用來放置結果的替代輸出數組,它必須具有與輸出結果具有相同的形狀和數據緩沖區長度
返回
沿著指定軸的元素累加和所組成的數組,其形狀應與輸入數組a一致
np.cumsum(a)#計算累積和的軸。默認(無)是在展平的數組上計算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()
參數
x: 數組 待插入數據的橫坐標
xp: 一維浮點數序列 原始數據點的橫坐標,如果period參數沒有指定那么就必須是遞增的 否則,在使用xp = xp % period正則 化之后,xp在內部進行排序
fp: 一維浮點數或復數序列 原始數據點的縱坐標,和xp序列等長.
left: 可選參數,類型為浮點數或復數(對應于fp值) 當x < xp[0]時的插值返回值,默認為fp[0].
right: 可選參數,類型為浮點數或復數(對應于fp值),當x > xp[-1]時的插值返回值,默認為fp[-1].
period: None或者浮點數,可選參數 橫坐標的周期 此參數使得可以正確插入angular x-coordinates. 如果該參數被設定,那么忽略left參數和right參數
返回
浮點數或復數(對應于fp值)或ndarray. 插入數據的縱坐標,和x形狀相同
注意!
在沒有設置period參數時,默認要求xp參數是遞增序列
#插入一個值 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()圖片
#插入一個序列 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
計算數組(或數組的特定軸)的累積最大值
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)使用復合梯形規則沿給定軸積分。
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圖片
-
函數
+關注
關注
3文章
4306瀏覽量
62431 -
MAP
+關注
關注
0文章
48瀏覽量
15128
原文標題:《YOLOv5全面解析教程》五,計算mAP用到的numpy函數詳解
文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論