Person_reID_baseline_pytorch 源码解析之 evaluate_gpu.py

脚本 evaluate_gpu.py 被用来评估行人重识别模型的效果。evaluate_gpu.py 根据 test.py 提取到的图片特征,将图片按照相似度排序,然后根据排序结果计算 mAP 和 rank-k 等评估指标。

1. 计算 Cosine similarity

Cosine similarity 就是余弦相似度,有时也与余弦距离混用,用夹角余弦来度量两个向量方向上的差异。两个向量之间的夹角余弦越小,向量间的方向就越一致。当夹角为零时,两个向量同向。向量间的余弦相似度值越大,向量就越相似。

欧式距离也常被用来进行相似度度量,计算公式如下所示。
在这里插入图片描述
相比欧式距离,余弦相似度更注重方向上的差异而不是距离。

余弦相似度在高维的情况下依然保持“相同时为1,正交时为0,相反时为-1”的性质。
欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

因此,在深度学习中,经常使用余弦相似度计算向量间相似度。余弦相似度的计算方法如下:
在这里插入图片描述
evaluate_gpu.py 中就使用了余弦相似度计算向量间相似度。evaluate_gpu.py 使用通过 test.py 提取到的 L2 归一化的特征进行评估计算。因此 cos(θ) 的分母部分相当于为 1 ,只需要进行向量乘法。

下面给出相似度计算部分代码,并进行逐行解析。

# Evaluate
def evaluate(qf,ql,qc,gf,gl,gc):
	# 改变 query 特征的shape,将最后一维置为 1
    query = qf.view(-1,1)
    print(query.shape)
    # 计算 gallery 和 query 特征的余弦相似度,即计算矩阵 gf 和 query 的矩阵乘法
    score = torch.mm(gf,query)
    score = score.squeeze(1).cpu()
    score = score.numpy()
    # 向量按照余弦相似度值从小到大排序
    # argsort 返回从小到大排序的数组索引
    index = np.argsort(score)  #from small to large
    # 余弦相似度值越大,向量就越相似
    # 余弦相似度值倒序,按照向量间的相似性从大到小排列,
    # 数组中最开始的 gallery feature 和 query feature 最相似
    index = index[::-1]

2. 计算 mAP 和 ra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值