想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss rate = 1 - true positive rate

true positive rate毕竟是一个rate,是一个比值。是谁和谁比呢?P

要从TP、FP、TN、FN讲起。 
考虑一个二分类问题:一个item,它实际值有0、1两种取值,即负例、正例;而二分类算法预测出来的结果,也只有0、1两种取值,即负例、正例。我们不考虑二分类算法细节,当作黑箱子就好;我们关心的是,预测的结果和实际情况匹配、偏差的情况。

TP:true positive,实际是正例,预测为正例 
FP:false positive,实际为负例,预测为正例 
TN:true negative,实际为负例,预测为负例 
FN:false negative,实际为正例,预测为负例

也就是说:我们不仅考虑算法的预测结果对不对,还要考虑是“哪一种对”;我们还考虑算法预测错的情况,并且我们深究“是哪一种错”: 

OK,既然把TP、FP、TN、FN搞清楚了,那么看几个rate的定义。 
TPR:true positive rate, 等于,又叫precision rate 
FPR:false positive rate,等于 
TNR:true negative rate,等于 
FNR:false negative rate,等于,又叫miss rate 
观察后不难发现,每个rate的公式,都是前,#表示number,即统计数量。 
而结合前面画的那张图,容易发现,每个rate公式还可以通过画图理解:每个rate都等于,虽然这么说起来不严谨,赫赫但是形象化的理解更容易记住。 
还有一点:fnr+tpr=1, fpr+tnr=1 
其实后面使用到的,更多的是fnr,俗称miss rate,作为ROC曲线的纵坐标;而横坐标则取fpr

理解阈值 
再次考虑二分类问题。你说,真实世界会存在严格的二分类吗?就说人的性取向,有的人也是“徘徊不定”的,这样的人真是让人头疼但是必须想办法处理掉。因此设定一个阈值:根据这个人的一系列举动,给ta的性别累计打分并最终映射到[0,1]区间(得到score),然后比如设定阈值t为0.5,若score>t=0.5,那么ta是男的;否则是女的。 
回到理论上,每一个需要预测的变量,其取值都可以根据阈值进行划分。对于二分类,我设定阈值t,当某个item取值大于t,就判定为正例(positive),否则判定为负例(negative)。 
也就是说,我手头有一堆预测得到的数据(甭管我用的是哪种机器学习算法),我通过设定不同的阈值,能得到不同的TP、FP、TN、FN取值,相应的TPR、FPR、TNR、FNR取值也产生变化。那么这种变化我就可以通过图像显示出来:对于一个确定的阈值t,FPR和TPR是确定的,得到一个(fpr,tpr)元组;将阈值从0到1变化,当t=0时所有预测结果都大于0都是Positive所以FP=TP=1,FN=TN=0,fpr=tpr=1,得到(1,1)点,当t=1时所有预测结果都小于0都是Negative所以FP=TP=0,FN=TN=1,fpr=tpr=0,得到(0,0)点,t取(0,1)上的值时则fpr和tpr都在0到1之间变化,且不难发现:当t增加,#FP也减小,#TN增加,则fpr减小;当t增加,#TP减小,#FN增加,则tpr减小。也就是说,当阈值t从0变化到1,fpr和tpr也单调减小,从(1,1)减小到(0,0)

呃,这里不知道为什么,大多数我看到的文献,都是画出fpr和tpr的图像,而把阈值本身省掉了,得到ROC曲线: 

Anyway,我们继续,我们的目标是搞清楚行人检测评估中的miss rate怎么算。等等,好像已经出来了:miss rate = 1 - true positive rate,那么对应的YoX图像,也就是miss rate - false positive rate图像,就应当是单调下降的曲线。

绘图 
干巴巴的说什么单调增加单调下降缺少直观印象,有代码有绘图才是正道~ 
我使用的是Caltech行人检测数据集网站主页提供的matlab工具,因为想要搞明白的miss rate是在pedestrian检测中作为评价标准出现,而这个Caltech数据集以及matlab工具都是行人检测中会用到的工具。废话不多说,下载好这个toolbox后打开并添加到path中,进入matlab目录调用plotRoc函数就能玩了,比如:

1.k=2; x=0:.0001:1; data1 = [1-x; (1-x.^k).^(1/k)]‘;2.k=3; x=0:.0001:1; data2 = [1-x; (1-x.^k).^(1/k)]‘;3.hs(1)=plotRoc(data1,struct(‘color‘,‘g‘,‘marker‘,‘s‘));4.hs(2)=plotRoc(data2,struct(‘color‘,‘b‘,‘lineSt‘,‘--‘));5.legend( hs, {‘roc1‘,‘roc2‘} ); xlabel(‘fp‘); ylabel(‘fn‘);

图中纵坐标标记为fn,其实是fnr(false negative rate),也就是1-tnr。fnr俗称miss rate。而横坐标fpr(false positive rate),也可以用FPPI(False Positive Per Image)或者FPPW(False Positive Per Window)来表示。

OK,总算搞懂了:要想绘制行人检测的evaluation阶段的miss rate - FPPI图像(roc曲线),需要有带annotation的测试图片(提供作为ground truth的object window的bbox坐标),并且用某个算法(各种机器学习模型都行,看效果了)对每个测试图片算出若干bbox坐标:前者()作为“实际取值”,后者()作为“预测取值”,当阈值t从0变化到1,每个预测取值也会变化,从{TP,FP,TN,FN}中取值,而在任意一个t的取值上,FPR、FNR(miss rate)都可以通过统计#TP,#FP,#TN,#FN后算出,因而就能得到plotRoc绘图函数所需的参数D,进而绘制出ROC曲线勒~



行人检测算法评估标准相关推荐

  1. 行人检测算法(ICF DPM)CCV(A Morden Computer Vision Library)的使用VisualBox下使用Ubuntu

    文章搬家到了ICF,DPM等行人检测算法实践,CSDN上的博客不在进行维护,谢谢. 由于最近要用到ICF,DPM等新的行人检测算法,找到了开源库CCV http://libccv.org/tutori ...

  2. 红外视频图像行人检测算法综述

    http://www.doc88.com/p-1137822192539.html 2018年西安邮电大学学报 <改进的YOLOv3红外视频图像行人检测算法> 对于红外视频图像行人检测算法 ...

  3. 【SIGAI综述】行人检测算法

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 本文为S ...

  4. 【SIGAI综述】行人检测算法(转)

    原文链接:https://cloud.tencent.com/developer/article/1441230 小白导读 行人检测是计算机视觉中的经典问题,也是长期以来难以解决的问题.和人脸检测问题 ...

  5. NVIDIA-TLT训练行人检测模型(一)----算法模型的训练(finetuning)

    前言 在博客阅读前需要说明,本博文为系列文章,通过阅读文章,您将会学习到如下内容: 使用NVIDIA Transfer Learning Toolkit 工具训练(finetuning)出一个行人检测 ...

  6. sift行人检测matlab,干货!一文读懂行人检测算法

    原标题:干货!一文读懂行人检测算法 1引言 行人检测可定义为判断输入图片或视频帧是否包含行人,如果有将其检测出来,并输出bounding box 级别的结果.由于行人兼具刚性和柔性物体的特性 ,外观易 ...

  7. 深度学习阅读导航 | 05 基于光照感知深度神经网络的多光谱数据融合行人检测

    文章目录 摘要 一.引言 二.相关研究 2.1 可见光和热感行人检测 2.2 多光谱行人检测 三.我们的方法 3.1 建议模型概述 3.2 光照全连接神经网络(IFCNN) 3.3 光照感知双流深度卷 ...

  8. 行人检测资源综述文献

    from: http://blog.csdn.net/GarfieldEr007/article/details/50866089 pedestrian-detection-resource-1-su ...

  9. 利用Hog特征和SVM分类器进行行人检测

    1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...

最新文章

  1. zabbix3.2.6.1升级3.4.4图文心得
  2. httpclient3.1的多线程处理
  3. Control.BeginInvoke 和 Delegate.BeginInvoke 备忘
  4. 这些让人抓狂的烂代码,你碰到几种?
  5. 深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
  6. ActivityManager: Warning: Activity not started, its current task has been brought to the front
  7. java继承原理内存角度_Java基础知识巩固
  8. mysql tableveiw与表格,javafx将数据库内容输出到tableview表格
  9. duilib消息事件产生和分发解释
  10. 再有人问你Java内存模型是什么,就把这篇文章发给他。
  11. VC 2008 Express 编译OpenCV2.0/2.1
  12. android log长字符串显示不全,如何解决Android的Log显示不全的问题
  13. Qt 学习之路 2(84):Repeater
  14. 2020年最值得关注的28款区块链游戏
  15. 图书租赁管理系统——数据流程图
  16. 使用MapReduce计算Pi
  17. mysql数据库查询语句_mysql数据库查询语句
  18. html5中扇形的绘制
  19. Keil警告和报错处理
  20. Clickhouse副本的特性

热门文章

  1. 智能工厂的与众不同之处到底在哪?
  2. 图片滚动插件jquery bxslider
  3. IAR工程编译报错Warning[Pe223]: function “Get_Tempreture“ declared implicitly......
  4. 率土之滨服务器维护需要多久,率土之滨赛季多久一次,赛季更新维护需要多久...
  5. c语言无法跳出while语句,c语言while语句的用法 该循环永远不会结束
  6. 基于java+ssm+jsp的同城蔬菜配送管理系统
  7. 蓝海创意云获批立项 2022年国家重点研发计划
  8. idea篇:idea快捷键设置
  9. Python批量爬取游戏卡牌信息
  10. golang goroutine实现_Go goroutine理解