CMC曲线总结
1、概念
CMC曲线全称是Cumulative Match Characteristic (CMC) curve,也就是累积匹配曲线,同ROC曲线Receiver Operating Characteristic (ROC) curve(受试者工作特征曲线)一样,是模式识别系统,如人脸,指纹,虹膜等的重要评价指标,尤其是在生物特征识别系统中,一般同ROC曲线一起给出,能够综合评价出算法的好坏。
2、计算方法
CMC曲线就是算一种top-k的击中概率,主要用闭集测试。比如有n个注册样本,现在想测试性能,测试样本依次和n个注册样本算取一个距离,然后排序,看类类样本位于前top-k,最后统计得到CMC曲线。
注:top-k的意思就是第k次命中
3、举例
参见博客https://www.researchgate.net/post/How_is_CMC_produced_recognition_rate_vs_Rank_for_unknown_faces
①比如说有三个类(class),每个类对应一个测试(test),然后设置了相似函数,越大则越可能为同一类。
情况一: 表1
|
Class1 |
Class2 |
Class3 |
Test1 |
0.9 |
0.8 |
0.7 |
Test2 |
0.8 |
0.9 |
0.8 |
Test3 |
0.7 |
0.6 |
0.9 |
如果存在上述情况(每一类对应的测试在该类测试下识别率都是最大的),则说明rank1=100%,rank2=100%,rank3=100%,可以说一次命中。
情况二: 表1
|
Class1 |
Class2 |
Class3 |
Test1 |
0.8 |
0.9 |
0.7 |
Test2 |
0.9 |
0.8 |
0.7 |
Test3 |
0.7 |
0.6 |
0.9 |
如果存在上面的情况(存在一类对应的测试在其他类上面得到的识别效果比在本类上面的识别效果好),则说明rank1=66.6%,rank2=100%,rank3=100%,可以说前两次命中。
对66.6%的第一种理解:因为提前已经针对三个类提出了三种测试,如果在第一次测试中没有验证到第一类的识别率是最高的,那么可判定T1—C1失败(未命中),而表二中的T2—C2、T3—C3已经确定识别率最高(即命中),换一种说法就是需要两次机会才能 “答对”结果,那么从整体看的话,就是66.6%的准确率。
可以把三类测试当作三次做题的机会,而选项也有三个,那么表二就是使用两次机会答对的前提下第一次答错的几率。
②比如说有五个类(class),每个类对应一个测试(test),然后设置了相似函数,越大则越可能为同一类。
|
Class1 |
Class2 |
Class3 |
Class4 |
Class5 |
Test1 |
0.9 |
0.7 |
0.6 |
0.5 |
0.8 |
Test2 |
0.8 |
0.9 |
0.7 |
0.6 |
0.5 |
Test3 |
0.7 |
0.8 |
0.9 |
0.7 |
0.6 |
Test4 |
0.6 |
0.9 |
0.6 |
0.6 |
0.7 |
Test5 |
0.5 |
0.8 |
0.7 |
0.9 |
0.5 |
如果出现上述较为复杂的情况,T1—C1、T2—C2、 T3—C3(三次一次命中)、 T4—C2、 T5—C4(没有一次命中)。
Rank 1: 60% (tests 1,2,3 are among the N=1 top matches ) 3/5
Rank 2: 80% (test 1,2 ,3 ,4 are among N=2 top matches) 4/5
Rank 3: 80% (test 1,2 ,3 ,4 are among N=3 top matches) 4/5
Rank 4: 100% (test 1,2 ,3 ,4 and 5 are among N=4 top matches) 1
Rank 5: 100% (test 1,2 ,3 ,4 and 5 are among N=5 top matches) 1
3、规律总结
①Rank i 的值是趋于1的。也就是说,给的机会越多(即测试次数越多),那么识别的准确度越好;
②如果每次测试对应的类都是识别率最高的话,那么就是一次命中,即Rank i=100%(i=1,2,3,…);
③如果一个样本按照匹配程度从大到小排列后,到最后一项,才匹配到正确标签,这就说明分类器不太好,把最应匹配的判别成最不应匹配的。
附计算CMC曲线的函数代码:
function accuracy = calrank(distance,rankvalue,info)
for k = 1:length(rankvalue)
count = 0;
for i = 1:size(distance,1)
rankinfo = distance(:,i);
%[score,position] = sort(rankinfo,'ascend');
[score,position] = sort(rankinfo,info);
for j = 1:rankvalue(k);
if (position(j)==i)
count = count + 1;
break;
end
end
accuracy(k) = count/size(distance,1);
end
end
注:distance代表全比对的分数,那么对角线是类类样本的比对分数。info为排列顺序,升序为’ascend’,降序为’descend’。 rankvalue是我们需要选取的top-k的值,可以赋值为rankvalue=[1,2,3,4,5,…,k];
最广泛使用的行人再识别评价方法为累积匹配特性曲线(CMC)的绩效指标。之所以采用这个度量,是因为行人再识别被直观地视为一个排序问题,其中图库中的每个元素都是基于其与探针的比较进行排序的。排列正确的匹配值等于或小于一个特定值的概率被绘制成与图库集大小的关系图。
以下是LZ对CMC曲线top-k的总结