机器学习算法五之 目标检测评价指标 IOU 准确率 召回率等

news2024/11/26 16:56:59

机器学习算法五之 目标检测评价指标 IOU 准确率 召回率等

  • 在目标检测算法中,训练出一个模型,想要知道这个模型的效果怎么样,主要是从模型的指标得出的,指标不仅在论文还是在自己学习的过程中,都是十分重要的,下边就来详细介绍一下指标的这个概念。

一、准确率(Accuracy)

定义:正确识别的目标数量与总目标数量的比率。

目标数量:图像中实际存在的目标数量,列如物体、人、车辆等,列如给出一张照片,其中有100个人,这100个人是总目标数量,然后预测出来了90个并且是正确的,那准确率就为90%。

二、IOU交并比

1、IoU计算的是“预测的边框”和“真实的边框”的交叠率,即它们的交集和并集的比值。

2、IoU等于“预测的边框”和“真实的边框”之间交集和并集的比值。

在这里插入图片描述

简单说,交集面积与并集面积之比,值越接近于1表示两个边界框的的重叠程度越高。

计算方法:

  1. 计算两个边界框的相交区域的面积。
  2. 计算两个边界框的并集区域的面积。
  3. 将相交区域的面积除以并集区域的面积,得到IoU值。

代码:

def calculate_iou(bbox1, bbox2):
    # bbox: [x1, y1, x2, y2]
    x1 = max(bbox1[0], bbox2[0])
    y1 = max(bbox1[1], bbox2[1])
    x2 = min(bbox1[2], bbox2[2])
    y2 = min(bbox1[3], bbox2[3])
    #上述是得出了交集的对角线的坐标
    # 计算交集的面积
    intersection_area = max(0, x2 - x1 + 1) * max(0, y2 - y1 + 1)
    # 计算并集区域的面积
    area_bbox1 = (bbox1[2] - bbox1[0] + 1) * (bbox1[3] - bbox1[1] + 1)
    area_bbox2 = (bbox2[2] - bbox2[0] + 1) * (bbox2[3] - bbox2[1] + 1)
    union_area = area_bbox1 + area_bbox2 - intersection_area
    # 加一的目的是为了避免重合的时候的情况
    # 计算IoU值
    iou = intersection_area / union_area
    return iou
 
bbox1 = [10, 20, 50, 60] # 左上角和右下角坐标
bbox2 = [30, 40, 70, 80]
iou = calculate_iou(bbox1, bbox2)
print("IoU:", iou)
  • C++ 实现
#include <iostream>
 
struct Rect {
    int x;
    int y;
    int width;
    int height;
};
 
float CalculateIOU(const Rect& rect1, const Rect& rect2) {
    int overlap_x = std::max(std::min(rect1.x + rect1.width, rect2.x + rect2.width) - std::max(rect1.x, rect2.x), 0);
    int overlap_y = std::max(std::min(rect1.y + rect1.height, rect2.y + rect2.height) - std::max(rect1.y, rect2.y), 0);
    int overlap_area = overlap_x * overlap_y;
    int union_area = rect1.width * rect1.height + rect2.width * rect2.height - overlap_area;
    return overlap_area / float(union_area);
}
 
int main() {
    Rect rect1 = {0, 0, 10, 10};
    Rect rect2 = {5, 5, 10, 10};
    std::cout << "IOU: " << CalculateIOU(rect1, rect2) << std::endl;
    return 0;
}

三、TP、TN、FP、FN

T是True,F是False,P是positive,N是negative

在这里插入图片描述

关于这四个词的概念,我就通俗易懂的讲一下:

假如,  原始图片中有10张人脸,输入到一个人脸检测模型,检测的结果是9张人脸,然后9张人脸的框,有8个和原图是相似对应的,有1个框里面啥也没有,没有人脸。那计算这个情况下的四个值。

TP:就是预测人脸然后预测正确了的,这个题就知道有8个。

FP:就是将一个不是标签的给预测出来,预测的结果是标签,这次 预测中,有一个是空气但是预测成人脸了,所以的值就为1了。

FN:就是模型判断错了,他是标签,但是没有预测出来,这个题的结果为2,因为有两个人脸没有预测出来。

TN:这个概念的意思就是说,就如有一张照片,这张照片没有人脸,然后模型也没有给出任何的结果,对于这种情况下,TN的值就是1.

对于上述表中,对内容进行详细地解释一下。

       首先,感到的第一个疑惑的地方就是,是如何判断自己到底预测的是对的还是错的,也就是表中的正负样本的这些概念,个人理解是会去计算预测框和真实的框( GT)的IOU,然后和阈值进行比较,大于阈值的时候,然后看这个框内物体的类别有没有预测正确,如果预测正确就是正样本,这样理解起来应该通俗易懂了。然后还有四个指标的解释,下边分标题来讲解,并且给出代码。

四、准确率、召回率、F1-Score、

在这里插入图片描述

给出上述指标的代码,代码如下:

def calculate_precision_recall_f1(predicted_boxes, ground_truth_boxes, threshold=0.5):
    true_positives = 0
    false_positives = 0
    false_negatives = 0
 
    for pred_box, pred_class, pred_confidence in predicted_boxes:
        best_iou = 0
        for gt_box, gt_class in ground_truth_boxes:
            iou = calculate_iou(pred_box, gt_box)
            if iou > best_iou and pred_class == gt_class:
                best_iou = iou
        if best_iou >= threshold:
            true_positives += 1
        else:
            false_positives += 1
 
    for gt_box, gt_class in ground_truth_boxes:
        best_iou = 0
        for pred_box, pred_class, pred_confidence in predicted_boxes:
            iou = calculate_iou(pred_box, gt_box)
            if iou > best_iou and pred_class == gt_class:
                best_iou = iou
        if best_iou < threshold:
            false_negatives += 1
 
    precision = true_positives / max((true_positives + false_positives), 1)
    recall = true_positives / max((true_positives + false_negatives), 1)
    f1_score = 2 * (precision * recall) / max((precision + recall), 1)
 
    return precision, recall, f1_score

五、ROC曲线、PR曲线

ROC曲线

在这里插入图片描述

P-R曲线(查准率-查全率曲线)

在这里插入图片描述

六 AP、 MAP

在这里插入图片描述

七、参考文献

1. https://blog.csdn.net/m0_74055982/article/details/138613520
2. https://blog.csdn.net/caip12999203000/article/details/129342661?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E7%AE%97%E6%B3%95%E6%8C%87%E6%A0%87%E8%AE%B2%E8%A7%A3&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduweb~default-0-129342661.nonecase&spm=1018.2226.3001.4450

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

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

相关文章

第十五届蓝桥杯青少组省赛成绩查询及国赛考试安排

刚刚&#xff0c;蓝桥杯青少组官网发布了“关于第十五届蓝桥杯大赛青少组省赛成绩查询及全国总决赛参赛证下载的通知”&#xff0c;第十五届蓝桥杯大赛青少组将开通省赛成绩查询通道&#xff0c;获得省赛一等奖的选手晋级全国总决赛&#xff0c;全国总决赛比赛时间为9月7日。 关…

全球大脑外滩“论剑”:2024年科技人文十大热点问题揭晓

当越来越多工作岗位可能被AI替代&#xff0c;如何实现人的劳动诉求和人生价值&#xff1f;当AI开始弥补甚至取代情感陪伴这一曾经独属于人类的体验&#xff0c;将带来哪些新可能和新问题&#xff1f; 9 月 3 日&#xff0c;外滩大会官微发布2024 Inclusion外滩大会科技人文十大…

高端控制台使用过程中如何保证用电安全

在数字化时代&#xff0c;高端控制台作为数据中心、监控室及正规工作站的核心设备&#xff0c;其稳定运行对于保障业务连续性至关重要。而用电安全&#xff0c;则是这一稳定运行不可或缺的前提。高端控制台集成了大量精密电子设备&#xff0c;对电力供应的质量与稳定性有着极高…

Spring Boot源码阅读——spring.factories的加载机制

Spring Boot源码阅读——spring.factories的加载 提到 SpringBoot 的自动装配&#xff0c;不管是文章还是视频&#xff0c;都会提到 spring.factories 这个文件&#xff0c;这篇文章就来简单讲讲 spring.factories 的作用&#xff0c;以及它是怎么被加载的 简介 位置 以 Sprin…

交换机自动化备份配置(H3C_无人值守)

介绍&#xff1a; 在日常运维过程中&#xff0c;需要定时备份设备的配置&#xff0c;在设备数量过于庞大的情况下&#xff0c;对我们的运维工作会造成极大地不便&#xff0c;通过python自动化能够完美解决人工手动保存设备配置的问题。而且自动化运维在未来也一定是大势所趋&a…

集成电路学习:什么是IEEE电气和电子工程师学会

IEEE&#xff1a;电气和电子工程师学会 IEEE&#xff0c;全称是Institute of Electrical and Electronics Engineers&#xff0c;即电气和电子工程师学会&#xff0c;是一个国际性的电子技术与信息科学工程师的协会&#xff0c;也是目前全球最大的非营利性专业技术学会。IEEE成…

2024版mybatis基础入门学习详情(上)

目录 1、mybatis简介 2、mybatis日志设置 3、取值符号#{}和${}的区别 4、mybatis数据传入 4.1传入单个简单类型 4.2传入实体对象 4.3传入多个简单类型参数 4.4传入Map类型参数 5、mybatis数据返回 5.1返回单个简单类型 5.2返回单个自定义实体类型 5.3返回Map类型 …

快速申请代码签名证书

在当今的互联网世界中&#xff0c;软件开发者面临着越来越高的安全要求。为了保护用户免受恶意软件的侵害&#xff0c;并保证自己的应用程序不会被篡改&#xff0c;许多开发者选择为他们的软件进行代码签名。代码签名证书是确保软件来源真实性和完整性的一种重要工具。下面是申…

pyro ExponentialLR 如何设置优化器 optimizer的学习率 pytorch 深度神经网络 bnn,

第一。pyro 不支持 “ReduceLROnPlateau” &#xff0c;因为需要Loss作为输入数值&#xff0c;计算量大 第二 &#xff0c;svi 支持 scheduler注意点&#xff0c; 属于 pyro.optim.PyroOptim的有三个 AdagradRMSProp ClippedAdam DCTAdam&#xff0c;但是还是会报错&#xff…

号外!软考刷题小工具助力软考和 PMP 等级考试

一. 背景 四年前&#xff0c;我通过培训机构学习了 PMP&#xff0c;系统的学习了项目管理知识体系&#xff0c;说实话&#xff0c;学完感觉确实是有用的&#xff0c;尤其在项目管理方面&#xff0c;一些管理思维确实能够帮助到自己。 如果说 PMP 是国外的项目管理知识体系认证…

数据安全新纪元:Ftrans跨网跨域数据安全交换创新方案

随着业务的不断扩张和发展&#xff0c;大型组织企业&#xff0c;需要在不同的地理区域建设分支机构或办事处&#xff0c;用以覆盖更广泛的市场和客户群体&#xff0c;因此必然存在跨网跨域数据安全交换的场景需求。企业内部会同时存在下述一个或多个跨域文件交换场景&#xff1…

淘宝/天猫的拍立淘API:taobao.item_search_img返回值

淘宝/天猫的拍立淘&#xff08;Taobao Image Search&#xff09;功能允许用户通过上传图片来搜索相似的商品。然而&#xff0c;直接通过API使用这个功能&#xff08;如taobao.item_search_img&#xff09;在淘宝/天猫的官方API中并不直接提供。淘宝/天猫的开放平台&#xff08;…

k8s中pod基础及https密钥、horber仓库

一、pod基础&#xff1a; 1.pod是k8s里面最小单位&#xff0c;pod也是最小化运行容器的资源对象&#xff1b;容器是基于pod在k8s集群中工作&#xff1b;在k8s集群当中&#xff0c;一个pod就代表着一个运行进程&#xff0c;k8s的大部分组件都是围绕pod进行的&#xff0c;对pod进…

转换器和其他运放电路(恒流源+电压-电流/电流-电压转换器+峰值检测器)+故障检测(比较器故障+求和器故障)

2024-9-3&#xff0c;星期二&#xff0c;7:20&#xff0c;天气&#xff1a;阴转多云&#xff0c;心情&#xff1a;目前晴。又是上班的一天&#xff0c;没啥说的&#xff0c;加油上班&#xff0c;加油学习。 今天完成了第八章的学习&#xff0c;主要学习内容为&#xff1a;转换…

探索LLM大模型奥秘,新书《大模型入门:技术原理与实战应用》助你快速上手(附PDF下载)

随着大模型技术的不断完善和普及&#xff0c;我们将进入一个由数据驱动、智能辅助的全新工作模式和生活模式。个人和企业将能够利用大模型来降本增效&#xff0c;并创造全新的用户体验。 人工智能是人类探索未来的重要领域之一&#xff0c;以GPT为代表的大模型应用一经推出在短…

网站建设完成后, 做seo必须知道的专业知识之--robots协议

robots协议&#xff0c;也称为爬虫协议或机器人排除标准&#xff0c;是一种用于指导搜索引擎蜘蛛如何在网站上抓取和访问内容的协议。 网站建设完成后&#xff0c; 做seo必须知道的专业知识之--robots协议 通过这个协议&#xff0c;网站可以告诉搜索引擎哪些页面可以抓取&…

轴承知识大全,详细介绍(附3D图纸免费下载)

轴承一般由内圈、外圈、滚动体和保持架组成。对于密封轴承&#xff0c;再加上润滑剂和密封圈&#xff08;或防尘盖&#xff09;。这就是轴承的全部组成。 根据轴承使用的工作状况来选用不同类型的轴承&#xff0c;才能更好的发挥轴承的功能&#xff0c;并延长轴承的使用寿命。我…

设计模式 -- 迭代器模式(Iterator Pattern)

1 问题引出 编写程序展示一个学校院系结构&#xff1a;需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c; 一个学院有多个系 传统方式实现 将学院看做是学校的子类&#xff0c;系是学院的子类&#xff0c;这样实际上是站在…

CPU性能对比 Intel 海光 鲲鹏920 飞腾2500

横向对比一下x86和ARM芯片&#xff0c;以及不同方案权衡下的性能比较 CPU基本信息 海光 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #lscpu Architecture: x86_64 CPU…

ssm基于微信小程序的食堂线上预约点餐系统论文源码调试讲解

2系统相关技术 2.1 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景&…