cmc计算
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。