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。

评论

此博客中的热门博文

使用ssh反向代理+shadowsocks实现内网穿透

shadowsocks中转

ubuntu 16.04 reboot命令慢的原因