person reid评价指标——CMC原理及代码解析,mAP

CMC是行人重识别的经典评价指标,表示识别结果相似性降序排列中前n个结果包含目标的识别率。mAP则是平均精度均值,涉及Precision和Recall的计算,衡量检索效果。本文详细解释了CMC曲线的计算原理,并提供了相关代码解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CMC

CMC全程是Cumulative Matching Characteristics, 是行人重识别问题中的经典评价指标。该曲线的横坐标为rank,纵坐标为识别率百分比。rank n表示识别结果相似性降序排列中前n个结果包含目标。识别率是rank n 的数目#(rank n)占总的query样本数的比例。如下图

CMC曲线图来源 https://blog.youkuaiyun.com/m0_37240250/article/details/79942939 

 

代码解释

先贴代码

代码来源 [港中文Xiaogang Wang教授 主页]

下载链接

function C = cmc(D, varargin)
% CMC computes the Cumulative Match Characteristic.
%   C = CMC(D) computes the CMC of given distance matrix D between each pair
%   of gallery and probe person. Both gallery and probe persons are
%   assumed to be unique, i.e., the i-th gallery person matches only to
%   the i-th probe person. D(i, j) should be the distance between
%   gallery instance i and probe instance j.
%   单个参数C = CMC(D)时表示gallery和probe中的identity都是独一无二的,
%   即gallery中第i个person只匹配probe set第i个person
%
%   C = CMC(D, G, P) comput
### 行人重识别中的临时CMC曲线 在行人重识别ReID)领域,累积匹配特性(Cumulative Match Characteristic, CMC)曲线用于评估模型性能。该曲线展示了不同排名位置下的正确匹配率。对于特定查询图像,在测试集中找到正确身份的概率随着返回结果列表长度增加而变化。 #### 实现临时CMC曲线的方法 为了计算并绘制临时CMC曲线,可以采用如下方法: 1. **准备数据集**:确保拥有足够的训练样本和验证/测试样本。 2. **提取特征向量**:利用预训练好的卷积神经网络(CNN),如ResNet或DenseNet,来获取每张图片对应的高维特征表示[^1]。 3. **距离度量**:通过欧氏距离或其他相似性测度比较两个特征之间的差异程度。 4. **排序检索结果**:基于上述得到的距离分数对候选对象按升序排列。 5. **统计命中情况**:记录每次查询时首次遇到目标个体的位置索引。 6. **构建CMC曲线图**:以横轴代表rank值,纵坐标则对应于相应等级上的平均精度均值(mean Average Precision, mAP)或者直接显示准确率。 以下是Python代码片段展示如何创建一个简单的CMC曲线可视化工具: ```python import numpy as np from sklearn.metrics import average_precision_score import matplotlib.pyplot as plt def compute_cmc(distmat, q_pids, g_pids, max_rank=50): num_q, num_g = distmat.shape if num_g < max_rank: max_rank = num_g print("Note: number of gallery samples is quite small.") indices = np.argsort(distmat, axis=1) matches = (g_pids[indices] == q_pids[:, np.newaxis]) all_cmc = matches.cumsum(axis=1) pos = np.arange(1, max_rank + 1) cmc_curve = all_cmc.mean(axis=0)[:max_rank] return cmc_curve, pos # 假设已经获得了distances矩阵以及query和gallery的身份标签 cmc_curve, ranks = compute_cmc(distance_matrix, query_ids, gallery_ids) plt.plot(ranks, cmc_curve * 100., '-o', label='Temporary CMC Curve') plt.xlabel('Rank') plt.ylabel('Matching Accuracy (%)') plt.title('Person Re-ID Performance Evaluation via Temporary CMC Curve') plt.legend() plt.grid(True) plt.show() ``` 此脚本定义了一个`compute_cmc()`函数用来处理输入的距离矩阵及其相应的身份标签,并输出CMC数值;接着调用了Matplotlib库来进行绘图操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值