热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测性能评估:召回率、精确率与交并比分析

摘要在训练YOLOv2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等。为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下。这一文章首先假设一个测试集,然

摘要

在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等。为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下。 
这一文章首先假设一个测试集,然后围绕这一测试集来介绍这几种度量方式的计算方法。

大雁与飞机

假设现在有这样一个测试集,测试集中的图片只由大雁和飞机两种图片组成,如下图所示: 
这里写图片描述

假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片。

现在做如下的定义: 
True positives : 飞机的图片被正确的识别成了飞机。 
True negatives: 大雁的图片没有被识别出来,系统正确地认为它们是大雁。 
False positives: 大雁的图片被错误地识别成了飞机。 
False negatives: 飞机的图片没有被识别出来,系统错误地认为它们是大雁。

假设你的分类系统使用了上述假设识别出了四个结果,如下图所示: 
这里写图片描述

那么在识别出的这四张照片中: 
True positives : 有三个,画绿色框的飞机。 
False positives: 有一个,画红色框的大雁。

没被识别出来的六张图片中: 
True negatives : 有四个,这四个大雁的图片,系统正确地没有把它们识别成飞机。 
False negatives: 有两个,两个飞机没有被识别出来,系统错误地认为它们是大雁。

Precision 与 Recall

Precision其实就是在识别出来的图片中,True positives所占的比率: 
这里写图片描述 
其中的n代表的是(True positives + False positives),也就是系统一共识别出来多少照片 。 
在这一例子中,True positives为3,False positives为1,所以Precision值是 3/(3+1)=0.75。 
意味着在识别出的结果中,飞机的图片占75%。

Recall 是被正确识别出来的飞机个数与测试集中所有飞机的个数的比值: 
这里写图片描述 
Recall的分母是(True positives + False negatives),这两个值的和,可以理解为一共有多少张飞机的照片。 
在这一例子中,True positives为3,False negatives为2,那么Recall值是 3/(3+2)=0.6。 
意味着在所有的飞机图片中,60%的飞机被正确的识别成飞机.。

调整阈值

你也可以通过调整阈值,来选择让系统识别出多少图片,进而改变Precision 或 Recall 的值。 
在某种阈值的前提下(蓝色虚线),系统识别出了四张图片,如下图中所示: 
这里写图片描述 
分类系统认为大于阈值(蓝色虚线之上)的四个图片更像飞机。

我们可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择让系统识别能出多少个图片,当然阈值的变化会导致Precision与Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就是说让系统只识别出最上面的那张飞机图片,那么Precision的值就是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片下面,也就是说让系统只识别出最上面的前两张图片,那么Precision的值还是100%,而Recall的值则增长到是40%。

IoU

IoU这一值,可以理解为系统预测出来的框与原来图片中标记的框的重合程度。 
计算方法即检测结果Detection Result与 Ground Truth 的交集比上它们的并集,即为检测的准确率: 

IoU=DetectionResultGroundTruthDetectionResultGroundTruth

如下图所示: 
蓝色的框是:GroundTruth 
黄色的框是:DetectionResult 
绿色的框是:DetectionResult  GroundTruth 
红色的框是:DetectionResult  GroundTruth

这里写图片描述

备注:博客来源-http://blog.csdn.net/hysteric314/article/details/54093734



推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
author-avatar
大街上
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有