【模式识别9】python计算目标检测IoU、TP、FP、FN、Precision、Recall指标

news2024/11/24 14:47:09

python计算目标检测IoU、TP、FP、FN、Precision、Recall指标

  • 1. 基础概念
    • 1.1 TP、TN、FP、FN
    • 1.2 IoU
    • 1.3 Precision(P)、Recall(R)、F1-score
  • 2. python代码
  • 3. 总结


代码资源:IoU_P_R.py


1. 基础概念

1.1 TP、TN、FP、FN

在这里插入图片描述

1.2 IoU

在这里插入图片描述

1.3 Precision(P)、Recall(R)、F1-score

  • 查准率 Precision(P): P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
  • 查全率 Recall(R): R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
  • F1-score: F 1 = 2 × P × R P + R \begin{aligned} &F_1=\frac{2\times P\times R}{{P+R}} \end{aligned} F1=P+R2×P×R

根据IoU可以计算Precision(P)、Recall(R),若真实框和预测框的IoU大于IoU阈值,则视为TP,否则视为FP,则FN=真实框数-TP

2. python代码

 
# Calculate precision and recall for object detection
def calculate_precision_recall(detected_boxes, true_boxes, iou_threshold):
    """
    Calculate precision and recall for object detection
    :param detected_boxes: list of detected bounding boxes in format [xmin, ymin, xmax, ymax]
    :param true_boxes: list of true bounding boxes in format [xmin, ymin, xmax, ymax]
    :param iou_threshold: intersection over union threshold for matching detected and true boxes
    :return: precision and recall
    """
    num_true_boxes = len(true_boxes)
    num_detected_boxes = len(detected_boxes)
    true_positives = 0
    false_positives = 0
    false_negatives = 0
    for detected_box in detected_boxes:
        max_iou = 0
        for true_box in true_boxes:
            iou = calculate_iou(detected_box, true_box)
            if iou > max_iou:
                max_iou = iou
        if max_iou >= iou_threshold:
            true_positives += 1
        else:
            false_positives += 1
    false_negatives = num_true_boxes - true_positives
    precision = true_positives / (true_positives + false_positives)
    recall = true_positives / (true_positives + false_negatives)
    return precision, recall

def calculate_iou(box1, box2):
    """
    Calculate intersection over union (IoU) between two bounding boxes
    :param box1: bounding box in format [xmin, ymin, xmax, ymax]
    :param box2: bounding box in format [xmin, ymin, xmax, ymax]
    :return: IoU between box1 and box2
    """
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])
    intersection = max(0, x2 - x1) * max(0, y2 - y1)
    area_box1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area_box2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    union = area_box1 + area_box2 - intersection
    iou = intersection / union
    return iou

3. 总结

  • 本文介绍了用python计算目标检测中的IoU以及TP、FP、FN、precision、recall等指标的方法和原理。
  • IoU是交并比,表示预测框和真实框之间的重叠程度,用交集面积除以并集面积得到。
  • TP、TN、FP、FN分别表示真正例、真负例、假正例和假负例,用于评估分类器的正确性。
  • Precision是预测为正例的样本中的准确率,Recall是预测正确的正例占所有正例的比例,二者需要综合考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/526530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/5/14总结

哈夫曼树 哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,则称该二叉树为哈夫曼树,也被称为最优二叉树。 怎样才能使带权路径长度最短:根据…

CTF-PHP反序列化漏洞5-反序列化字符逃逸

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

简单聊聊微前端

简单聊聊微前端 介绍微前端的优点应用间相互独立,互不依赖可以同时使用不同的技术栈可拓展性高可维护性更强,减少代码量提高开发和部署的效率团队的高度自主权错误隔离 微前端的缺点依赖项冗余CSS样式冲突和重叠性能比较差应用间的通信不够便捷 实现微前…

CSS的基础知识讲解

文章目录 一.什么是CSS二. 选择器2.1 标签选择器2.2 类名选择器2.3 ID选择器2.4 属性选择器2.5 子选择器2.6 后代选择器2.7 伪类选择器 三.盒子模型3.1 什么是盒子模型3.2 盒子的组成部分边框内边距外边距 四.弹性盒子布局4.1 什么是块级元素和行内元素块级元素行内元素行内元素…

◆ 前端工程化 ◆ webpack 的基本使用 ◆ webpack 中的插件 ◆ webpack 中的 loader ◆ 打包发布 ◆ Source Map

◆ 前端工程化 ◆ webpack 的基本使用 ◆ webpack 中的插件 ◆ webpack 中的 loader ◆ 打包发布 ◆ Source Map ◆ 前端工程化◆ webpack 的基本使用◆ webpack 中的插件◆ webpack 中的 loader1. loader 概述打包处理css文件打包处理less文件打包处理样式表中与url路径相关的…

Python——2

一、循环 1.range() 函数 用于生成一个整数序列,返回的是一个迭代对象,可用 in / not in查看。 (1)range(stop) 创建一个 [0,stop) 的整数序列,步长为1。 (2)range(start, stop) 创建一个 [s…

面试谎报了职级,本来是6,谎报成7,已经到HR这一步了,怎么了?

面试时谎报职级,公司能查出来吗? 一位网友说,自己在业务面时谎报了职级,把6报成7,现在已经到hr这一步了,该怎么办?是继续编吗? 有人不明白,为什么要谎报职级?…

Pycharm 安装教程,及常用快捷键,附教程

简介 PyCharm是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能&a…

有史以来最强的5G入门科普!

一个简单且神奇的公式 今天的故事,从一个公式开始讲起。 这是一个既简单又神奇的公式。说它简单,是因为它一共只有3个字母。而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数的人都在为之魂牵梦绕。…

CloudCompare二次开发之如何配置PCL点云库?

文章目录 0.引言1.修改两个CMakeLists.txt文件2.源码编译3.测试PCL 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据分析处理,查阅现有网络资料,实现了VisualStudio2015(x86)配置PCL1.8.1点云库(见:VisualStud…

基于卷积的图像分类识别(七):SENet

系列文章目录 本专栏介绍基于深度学习进行图像识别的经典和前沿模型,将持续更新,包括不仅限于:AlexNet, ZFNet,VGG,GoogLeNet,ResNet,DenseNet,SENet,MobileN…

网络编程 lesson3 UDP基础编程

目录 UDP介绍 UDP编程 函数接口 recvfrom sendto 小练习:实现服务器和客户端相连(使用UDP实现) client server UDP介绍 UDP(User Datagram Protocol,用户数据报协议)是一种在计算机网络中常用的传输…

C++常量成员函数(类成员函数后加const、类成员函数参数列表后加const)常量对象(类名前加const)和非常量对象

文章目录 常量对象和非常量对象(常量对象不能调用非常量成员函数)常量成员函数(常量成员函数不能修改类的数据成员;常量成员函数只能调用常量成员函数,不能调用非常量成员函数) 常量对象和非常量对象&#…

网络编程 lesson1 网络概念

目录 网络发展史(了解) 局域网和广域网 局域网 广域网 IP地址 IP地址划分(IPV4) IP地址取址范围: 特殊地址 子网掩码 子网号(注意和前面进行区分) 练习 练习1: 练习2&…

MySQL 数据库之 MMM 高可用架构构建

一、MMM 概述 1. 什么是 MMM   MMM(Master-Master replication manager for MySQL,MySQL 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发,主要从来监控和管理 MySQL Master-Master&a…

工厂模式中简单工厂模式、工厂方法模式、抽象工厂模式的分析与总结

工厂模式 工厂模式有许多变体,其中最常见的有三种 简单工厂模式工厂方法模式抽象工厂模式 简单工厂代码分析 UML图中我们可以清晰的看到代码结构 ,首先我们创建一个Car的汽车接口,定制汽车的基本规范,汽车可以的方法是可以跑,所以我们定义了一个抽象的run方法. 定义汽车接口…

【sed编辑器】

目录 一、sed编辑器二、sed的命令格式操作命令1.1、命令演示 二、替换三、插入 一、sed编辑器 1、sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 2、sed编辑器可以根据命令来处理数据流中的数据,这些命令要么…

OSC Liblo Window10配置

OpenSoundControl一种网络通讯协议,想了解详情的自行打开网站。 liblo 是最知名的OSC库, 功能完整,用 C 和 LGPL 许可编写。 下载请前往GitHub库。 解压后安装过程如下,需要用到CMake: 1.选择源代码文件和构建工程的文…

一文读懂“生成式 AI”

一、前言 本文基于谷歌的:《Introduction to Generative AI》 并且借助 ChatGPT 整理而成,帮助大家理解生成式 AI 这个概念。 主要包括 4 个部分: 生成式 AI 的定义生成式 AI 的工作原理生成式 AI 模型的分类生成式 AI 的应用 二、生成式…

【数据结构】双向带头循环链表的实现

目录 全部代码 图例(双向带头循环链表) 各个功能的实现 创建该链表的节点 创建初始链表 链表的头插 链表的尾插 链表的随机插入 链表的头删 链表的尾删 链表的随机删除 链表的销毁 链表是否为空的判断 链表节点的创建 总结 全部代码 typ…