睿智的目标检测20——利用mAP计算目标检测精确度

  • 学习前言
  • GITHUB代码下载
  • 知识储备
    • 1、IOU的概念
    • 2、TP TN FP FN的概念
    • 3、precision(精确度)和recall(召回率)
    • 4、概念举例
    • 5、单个指标的局限性
  • 什么是AP
  • 绘制mAP

学习前言

好多人都想算一下目标检测的精确度,mAP的概念虽然不好理解,但是理解了就很懂。

GITHUB代码下载

这个是用来绘制mAP曲线的。
https://github.com/Cartucho/mAP
这个是用来获取绘制mAP曲线所需的txt的
https://github.com/bubbliiiing/count-mAP-txt

知识储备

1、IOU的概念

IOU的概念应该比较简单,就是衡量预测框和真实框的重合程度。
下图是一个示例:图中绿色框为实际框(好像不是很绿……),红色框为预测框,当我们需要判断两个框之间的关系时,主要就是判断两个框的重合程度。

计算IOU的公式为:

可以看到IOU是一个比值,即交并比。
在分子部分,值为预测框和实际框之间的重叠区域;
在分母部分,值为预测框和实际框所占有的总区域。


交区域和并区域的比值,就是IOU。

2、TP TN FP FN的概念

TP TN FP FN里面一共出现了4个字母,分别是T F P N。
T是True;
F是False;
P是Positive;
N是Negative。

T或者F代表的是该样本 是否被正确分类。
P或者N代表的是该样本 被预测成了正样本还是负样本。

TP(True Positives)意思就是被分为了正样本,而且分对了。
TN(True Negatives)意思就是被分为了负样本,而且分对了,
FP(False Positives)意思就是被分为了正样本,但是分错了(事实上这个样本是负样本)。
FN(False Negatives)意思就是被分为了负样本,但是分错了(事实上这个样本是这样本)。

在mAP计算的过程中主要用到了,TP、FP、FN这三个概念。

3、precision(精确度)和recall(召回率)

P r e c i s i o n = T P T P + F P Precision= \frac{TP}{TP+FP} Precision=TP+FPTP​
TP是分类器认为是正样本而且确实是正样本的例子,FP是分类器认为是正样本但实际上不是正样本的例子,Precision翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”。

R e c a l l = T P T P + F N Recall= \frac{TP}{TP+FN} Recall=TP+FNTP​
TP是分类器认为是正样本而且确实是正样本的例子,FN是分类器认为是负样本但实际上不是负样本的例子,Recall翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例”。

4、概念举例


如图所示,蓝色的框是 真实框绿色和红色的框是 预测框,绿色的框是正样本,红色的框是负样本。一般来讲,当预测框和真实框IOU>=0.5时,被认为是正样本。
因此对于这幅图来讲。
真实框一共有3个,正样本一共有2个,负样本一共有2个。
此时
P r e c i s i o n = 2 2 + 2 = 1 / 2 Precision= \frac{2}{2+2} = 1/2 Precision=2+22​=1/2
R e c a l l = 2 2 + 1 = 2 / 3 Recall= \frac{2}{2+1} = 2/3 Recall=2+12​=2/3

5、单个指标的局限性

在目标检测算法里面有一个非常重要的概念是置信度,如果置信度设置的高的话,预测的结果和实际情况就很符合,如果置信度低的话,就会有很多误检测。

假设一幅图里面总共有3个正样本,目标检测对这幅图的预测结果有10个,其中3个实际上是正样本,7个实际上是负样本。对应置信度如下。

如果我们将可以接受的置信度设置为0.95的话,那么目标检测算法就会将序号为1的样本作为正样本,其它的都是负样本。此时TP = 1,FP = 0,FN = 2。
P r e c i s i o n = 1 1 + 0 = 1 Precision= \frac{1}{1+0} = 1 Precision=1+01​=1
R e c a l l = 1 1 + 2 = 1 / 3 Recall= \frac{1}{1+2} = 1/3 Recall=1+21​=1/3
此时Precision非常高,但是事实上我们只检测出一个正样本,还有两个没有检测出来,因此只用Precision就不合适。

这个时候如果我们将可以接受的置信度设置为0.35的话,那么目标检测算法就会将序号为1的样本作为正样本,其它的都是负样本。此时TP = 3,FP = 3,FN = 0。
P r e c i s i o n = 3 3 + 3 = 1 / 2 Precision= \frac{3}{3+3} = 1/2 Precision=3+33​=1/2
R e c a l l = 3 3 + 0 = 1 Recall= \frac{3}{3+0} = 1 Recall=3+03​=1
此时Recall非常高,但是事实上目标检测算法认为是正样本的样本里面,有3个样本确实是正样本,但有三个是负样本,存在非常严重的误检测,因此只用Recall就不合适。

二者进行结合才是评价的正确方法。

什么是AP

AP事实上指的是,利用不同的Precision和Recall的点的组合,画出来的曲线下面的面积。
如下面这幅图所示。

当我们取不同的置信度,可以获得不同的Precision和不同的Recall,当我们取得置信度够密集的时候,就可以获得非常多的Precision和Recall。

此时Precision和Recall可以在图片上画出一条线,这条线下部分的面积就是某个类的AP值。

mAP就是所有的类的AP值求平均。

绘制mAP

我们首先在这个github上下载绘制mAP所需的代码。
https://github.com/Cartucho/mAP
在这个代码中,如果想要绘制mAP则需要三个内容。分别是:
detection-results:指的是预测结果的txt。

ground-truth:指的是真实框的txt。

image-optional:指的是图片,有这个可以可视化,但是这个可以没有。

我们需要生成这三个内容,此时下载第二个库,这个是我拿我制作的ssd代码写的一个可以生成对应txt的例子。
https://github.com/bubbliiiing/count-mAP-txt
我们首先将整个VOC的数据集放到VOCdevikit中

然后修改voc2ssd.py里面的trainval_percent,一般用数据集的10%或者更少用于测试。如果大家放进VOCdevikit的数据集不是全部数据,而是已经筛选好的测试数据集的话,那么就把trainval_percent设置成0,表示全部的数据都用于测试。

然后运行voc2ssd.py。
此时会生成test.txt,存放用于测试的图片的名字。

然后依次运行主目录下的get_dr_txt.py和get_gt_txt.py获得预测框对应的txt和真实框对应的txt。
get_dr_txt.py是用来检测测试集里面的图片的,然后会生成每一个图片的检测结果,我重写了detect_image代码,用于生成预测框的txt。
利用for循环检测所有的图片。

get_dr_txt.py是用来获取测试集中的xml,然后根据每个xml的结果生成真实框的txt。
利用for循环检测所有的xml。

完成后我们会在input获得三个文件夹。

此时把input内部的文件夹复制到mAP的代码中的input文件夹内部就可以了,然后我们运行mAP的代码中的main.py,运行结束后,会生成mAP相关的文件。

结果生成在Result里面。

睿智的目标检测20——利用mAP计算目标检测精确度相关推荐

  1. matlab单个像素面积,我用MATLAB计算出了图像目标区域的像素点个数,请问知道了目标区域的像素点怎么计算目标区域的面积?...

    满意答案 下面是一个简单的计算轮廓包含起来的像素点的个数的程序: %% step 1 clear all clc I=imread('test.bmp');%读入图片 bwI=im2bw(I,0.5) ...

  2. 【深度学习】——模型评估指标MAP计算实例计算

    目录 一.知识储备 1.IOU--交集面积与并集面积之比 2.混淆矩阵(TP.FP.FN.TN) 问题1:上面的TP等具体是如何计算得到的? 3.精度precision&召回率recall 二 ...

  3. map平均准确率_第五篇 目标检测评价标准—MAP

    MAP(Mean Average Precision) 网上关于map的帖子,博客,回答有很多,但是描述很不清楚,有的甚至有很多错误,非常难以理解,最近研究了一下map,这里记录总结一下 这里的AP指 ...

  4. 评价目标检测的方法map 新方法 TIDE

    导语     物体检测一般使用**map**来评价目标检测的检测效果,如检测效果不好时,需深入了解哪些数据检测效果不好,如何调试模型的性能以及如何优化它获得更好的性能.这时一个好的开源库 TIDE 则 ...

  5. android计算心率方法,计算目标心率最简单的方法 | 跑者

    摘要 当我们在目标心率区跑步或进行其它锻炼时,我们的身体将会从中获得最大的益处. 当我们在目标心率区跑步或进行其它锻炼时,我们的身体将会从中获得最大的益处.以每分钟心跳次数(bpm)为单位,目标心率是 ...

  6. Azure机器学习——计算目标03:使用 Azure机器学习工作室配置计算目标

    使用 Azure机器学习工作室配置计算目标 查看计算目标 创建计算目标 附加计算目标 使用计算目标 总结 在 Azure机器学习--创建Azure机器学习服务一节中给大家介绍过Azure机器学习工作室 ...

  7. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

  8. 目标框检测中准确率、召回率、AP、mAP计算原理及代码

    1. TP.FP.TN.FN 概念 在对数据进行预测的时候,往往有以下几个概念:TP.FP.TN.FN. 什么意思呢?即预测情况(Positive or Negtive)是否真正反应真实情况的关系: ...

  9. 【目标检测】kera-yolo3模型计算mAP

    这些是GitHub上的源码,下载之后均要修改一下. keras-yolo v3 源码:https://github.com/qqwweee/keras-yolo3 mAP计算代码:https://gi ...

最新文章

  1. codeforces水题100道 第十六题 Codeforces Round #164 (Div. 2) A. Games (brute force)
  2. pthread_create如何传递两个参数以上的参数
  3. VTK:IO之DEMReader
  4. 解决IntelliJ IDEA下Maven报错Unknown lifecycle phase “.test.skip=true“. You must specify a valid lifecycle
  5. 使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证
  6. python历史以及基础知识
  7. 视频跟踪——CMT算法
  8. mysql old key files_mysql出现“Incorrect key file for table”解决办法
  9. C4D电商促销素材模板,让你的工作效率更加高效​!
  10. Doule类型转成十六进制查看
  11. PHP学习记录(数学函数库)
  12. Linux meson + ninja编译安装源码(八)
  13. 计算机桌面设置上时间表,如何在电脑桌面便签上设置日程安排表?
  14. android屏幕点击录制脚本,Android录制屏幕脚本
  15. Python笔记:第三方IP代理服务与爬虫IP代理
  16. 内核函数-assembler.h分析
  17. am相干解调matlab文档,AM调制与相干解调
  18. 单片机中存储器扩展位地址线怎么算_单片机程序存储器的扩展
  19. 杂谈:渐进增强与优雅降级
  20. 官档翻译-启用High Precision Event Timer (HPET) Functionality

热门文章

  1. linux报错Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile解决方法
  2. If I Have One Million
  3. 神操作!“AI程序员”走进偶像剧,网友:我服!
  4. 最大信息系数(MIC)——大数据时代的相关性分析
  5. 2021爱智先行者—红外学习模块(空调遥控器)
  6. 微型计算机中将运算器和芯片,微机的重要特点之一是将计算机硬件中的运算器和控制器集成在一块芯片上,称为微处理器。 - 试题答案网问答...
  7. A2DP音频流在安卓系统中的实现
  8. C#使用mouse_event函数模拟鼠标事件
  9. STM32 - 解决一次下位机偶校验收包乱码的问题
  10. 利用API函数实现图像淡入淡出效果(VB)