cmc计算
行人重识别中,计算cmc曲线代码的理解
假设我们已经通过网络得到query和gallery中每个行人的特征,并据此计算出对应的距离矩阵,为了方便,我们假设query和gallery中各有5个行人,因此得到的distmat大小为5*5。
distmat=
[[0 1 2 3 4]
[2 1 3 5 4]
[4 0 6 3 5]
[1 3 7 2 4]
[0 3 4 1 5]]
对每一行从小到大排序,返回对应元素的位置,
indices = np.argsort(distmat, axis=1)
indices=
[[0 1 2 3 4]
[1 0 2 4 3]
[1 3 0 4 2]
[0 3 1 4 2]
[0 3 1 2 4]]
理想的情况下,对应每一行,我们希望最小的出现在第一个,例如对于第一行,id=0,因此距离最小的index也应该是0;同理,对于第三行,id=2,希望最小的index=2出现在最前面的位置。matches要得到的是正确匹配的idx出现的位置。
matches = (g_pids[indices] == q_pids[:, np.newaxis]).astype(np.int32)
orig_cmc = matches[q_idx][keep]
orig_cmc =
[1 0 0 0 0]
[1 0 0 0 0]
[0 0 0 0 1]
[0 1 0 0 0]
[0 0 0 0 1]
从orig_cmc我们已经可以看到,第一列中只出现两个1,因此rank-1就是2/5=0.4。前两列中出现3个1,rank-2就是3/5=0.6。
评论
发表评论