【小知识】目标检测各类指标概念总结

news2024/11/17 19:46:23

文章目录

  • 前言
  • 一、AP(Average Precision)
    • 1.1 TP(True Positive)、FP(False Positive)、FN(False Negative)
    • 1.2 Precision(查准率)、Recall(召回率/查全率)
    • 1.3 PR曲线
    • 1.4 mAP(mean Average Precision)
  • 二、FLOPs、FLOPS
  • 三、FPS
  • 四、MACs


前言

目标检测论文中出现过很多容易混淆的评价指标,比如FLOPS、FLOPs、 GFLOPS,包括最基本的AP、mAP这些定义,索性将这些基本概念搞清楚,做个总结。


一、AP(Average Precision)

1.1 TP(True Positive)、FP(False Positive)、FN(False Negative)

TP:与真实目标框GT(Ground Truth)的 IoU大于指定阈值(比如0.5)的预测框(一个GT只计算一个TP

FP:与真实目标框GT(Ground Truth)的 IoU小于等于指定阈值(比如0.5)的预测框(多余的TP也被认为是FP

FN: 没有TP的真实目标框GT(Ground Truth)

一个GT只会计算一个TP,一个GT即使有5个IoU大于0.5的预测框,TP也只能等于1,剩下的4个都被认为是FP。按置信度排序选最大的作为TP

在这里插入图片描述

举个例子,以单张图片为例(目标检测任务中是所有的验证集图片),计算人这一类别的TP、FP、FN。首先,TP、FP、FN都是针对某一个类别来说(AP的计算也是如此),比如上图中车这个目标也是我们要检测出来的,所以车也可以计算TP、FP、FN。

将类别为人的预测框全部筛选出来(绿框表示),红色的为GT。预测框1与GT1的IoU大于0.5,故预测框1属于TP;预测框2与GT1的IoU小于0.5,故预测框2属于FP;预测框3与GT1的IoU大于0.5但已经有一个TP了,故预测框3属于FP;GT2没有TP,故属于FN。

故TP=1,FP=2,FN=1。

1.2 Precision(查准率)、Recall(召回率/查全率)

Precision= TP / (TP + FP)
Recall=TP / (TP + FN)

-预测为正类预测为负类
正类TPFN
负类FPTN

(TP + FP)就是所有生成的预测框数量,(TP + FN)在目标检测中就是GT的数量(因为一个GT只计算一个TP)。所以可以通俗的理解: Precision就是衡量误检程度,Recall是衡量漏检程度

你可以让模型尽可能多地生成预测框,可以提高Recall。因为Recall只和GT和TP的数量有关。多生成预测框我每个GT都有一个TP的机会也更大,极端一点整张图片生成100000个预测框,保证每个GT都有一个TP,此时Recall为1,我的Recall仍然可以很大。

你可以让模型尽可能少地生成预测框,可以提高Precision。因为Precision只和 (TP + FP)就是所有生成的预测框数量有关。比如我只有一个TP,但是我总共只预测了2个框,我的Precision是0.5;如果我总共预测了4个框,我的Precision是0.25。

所以单一用Precision或者Recall是没有意义的,并不能实际反映出模型检测效果的好坏。

1.3 PR曲线

单一用Precision或者Recall是没有意义的,所以要综合考虑两者,也就是PR曲线:纵轴是Precision,横轴是Recall。用PR曲线下方的面积来衡量检测效果,也就是AP(Average Precision)

AP是衡量单个类别检测效果的指标

在这里插入图片描述

以上图为例增加一个预测框,计算Precision和Recall,每预测一个框都会改变两者的值。
大概步骤如下:

节选自:知乎

我会依次遍历每个类别,在同一个类别下,按照置信度分数给你的pred_bbox从大到小排序,然后用一个匹配规则去确定你的pred_bbox中哪些是TP,哪些是FP,以及我的gt_bbox中哪些是FN。

为什么要按置信度排序?因为这样绘制出来的precision-recall曲线下的面积比按你直接给我的pred_bbox的顺序要大。毕竟我和你的目标是一样,你希望你的得分越高,我也希望你的得分越高,所以我就这样做了。

按照1步骤,我就可以逐个bbox计算出precision和recall,进而绘制出precision-recall曲线。
举个简单的例子,假设一共5个pred_bbox和4个gt_bbox,经过步骤1,5个pred_bbox被判定为「TP,TP,FP,TP,FP」,那么逐个bbox计算出的precision=「1/1,2/2,2/3,3/4,3/5」,recall=「1/4,2/4,2/4,3/4,3/4」。Precision和Recall组成坐标,得到逐个bbox的precision-recall曲线,我就可以计算这个曲线下的面积了,得到ap了。

-置信度TP or FPPrecisionRecall
预测框10.9TP10.5
预测框40.8TP11
预测框30.7FP0.661
预测框20.6FP0.51

可以看出随着预测框数量的增加,Precision是减少的,Recall是增加的。
但是PR曲线下面积的计算方式还有很多种做法(VOC和COCO数据集计算方法不一样),有插值、平滑,可以自行参考知乎问答:知乎问答

1.4 mAP(mean Average Precision)

PR曲线下方的面积就是AP(Average Precision),mAP就是所有类别的AP取平均就是mAP。比如Person的AP是0.6,Car的AP是0.8,那mAP就是(0.6+0.8)/2=0.7

AP是衡量单个类别检测效果的指标,mAP是衡量所有类别检测效果的指标

注:在COCO数据集中的AP就相当于mAP,COCO计算的AP就是所有类别的。
AP(mAP):COCO的AP是将以IoU阈值(即判断为TP的阈值)为0.5开始,以0.05递增到0.95,也就是以(0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95)为阈值共10个mAP取均值计算得来的。阈值越高,对模型精度要求也越高。
AP50:以IoU阈值为0.5判定为TP下的AP
AP75:以IoU阈值为0.75判定为TP下的AP
APs:小物体的AP
APm:中物体的AP
APL:大物体的AP
在这里插入图片描述

二、FLOPs、FLOPS

FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

但是目前计算FLOPs还没有统一的标准,在torch中可以利用torchstat来计算复杂度。
安装使用参考github:torchstat

三、FPS

FPS就是目标网络每秒可以处理(检测)多少帧(多少张图片),FPS简单来理解就是图像的刷新频率,也就是每秒多少帧。假设目标检测网络处理1帧(一张图片)要0.02s,此时FPS就是1/0.02=50。以基础的DETR模型为例,FPS为28,那么处理一张图片要1/28s。

四、MACs

MACs(Multiply–Accumulate Operations):乘加累积操作数,常常被人们与FLOPs概念混淆实际上1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs。通常MACs与FLOPs存在一个2倍的关系。


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

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

相关文章

【LeetCode】Day201-重新安排行程

题目 332.重新安排行程【困难】 题解 这道题的几个难点: 一个行程中,如果航班处理不好容易变成一个圈,成为死循环有多种解法,字母序靠前排在前面,应该如何记录映射关系?使用回溯法,终止条件…

贪心 376. 摆动序列

376. 摆动序列 难度中等827 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9,…

opencv的图像基本操作_3

模板匹配 模板匹配和卷积很像,模板在原图像上滑动,并在滑过的区域上计算匹配数值,通过匹配数值衡量模板匹配程度,opencv中有6种计算方法,从原点开始计算,将每次计算的结果放到一个矩阵,最后输出…

CSS 加载进度条

CSS 加载进度条 环形加载条 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>环形加载条</title><style type"text/css">.box {width: 200px;height: 200px;border: 1px solid silver;display: flex…

永磁同步电机全速域控制指南

一直都想知道永磁同步电机的转速从零增加到极限这个过程会发生什么&#xff0c;这篇文章介绍一下永磁同步电机全速域矢量控制的全过程&#xff0c;即电机的转速从零开始逐渐增加&#xff0c;如何设计电流环电流使得电机输出恒定转矩&#xff0c;且保持转速稳定。能把这个过程想…

ruoyi-vue版本(七)定时任务 相关的源码解析,也就是ruoyi-quartz 模块的解析

目录1 需求2 解析2.1 工具类里面的关系2.2 新增定时任务2.3 回显定时任务2.4 修改定时任务3 总结1 需求 我们打开若依项目&#xff0c;看到页面上有一个定时任务模块 我们接下来就是解析若依项目和定时任务相关的所有的文件&#xff0c;以及他是如何实现定时的&#xff0c;背…

Kubernetes 资源监控

Kubernetes 资源监控一、前言二、使用三、实现原理3.1 数据链路3.2 kube-aggregator3.3 监控体系 ❤️3.4 kubelet3.5 cadvisor3.6 cgroup四、问题4.2 kubectl top pod 内存怎么计算&#xff0c;包含 pause容器吗4.3 kubectl top node 怎么计算&#xff0c;和节点上直接 top 有…

C语言深度剖析 -- 32个关键字(上)

文章目录C语言关键字我们人生中第一个C语言程序变量的定义与声明变量的作用域与生命周期最宽宏大量的关键字 -- auto最快的关键字 -- register&#xff08;寄存器变量&#xff09;最名不符实的关键字 -- static基本内置数据类型 -- char、short、int、long、float、double最冤枉…

transformers学习笔记2

pipeline快速使用from transformers import pipelineclassifier pipeline("sentiment-analysis") classifier(["Ive been waiting for a HuggingFace course my whole life.","I hate this so much!",] )[{label: POSITIVE, score: 0.959804713…

概述.runoob.html

<!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> 元素包含了文档的元&#xff08;meta&#xff09;数据&#xff0c;如 <meta charset"utf-8"> 定义网页编码格式为 utf-8。<title> 元素描述了文档的标题<…

【Linux线程安全】

Linux线程安全Linux线程互斥进程线程间的互斥相关背景概念互斥量mutex互斥量的接口互斥量实现原理探究可重入VS线程安全概念常见的线程不安全的情况常见的线程安全的情况常见的不可重入的情况常见的可重入的情况可重入与线程安全联系可重入与线程安全区别常见锁概念死锁死锁的四…

套接字编程基础

文章目录IPV4套接字地址结构IPv6套接字地址结构字节排序函数地址转换函数IPV4套接字地址结构 IPv4套接字定义在<netinet/in.h> 投文件中&#xff0c;定义如下&#xff1a; struct in_addr {in_addr_t s_addr; } struct sockaddr_in {uint8_t sin_len; // 长度字段sa_fa…

【青训营】性能优化和自动内存管理

本文整理自&#xff1a;第五届字节跳动青年训练营 后端组 什么是性能优化 提高软件系统处理能力&#xff0c;减少不必要消耗&#xff0c;充分利用计算机算力 业务层优化 针对特定场景和具体问题容易获得较大收益 语言运行时优化 面向全公司的优化&#xff0c;非特定场景解决更…

力扣55.跳跃游戏(比较简单)

文章目录力扣55.跳跃游戏&#xff08;比较简单&#xff09;题目描述算法思路代码实现力扣55.跳跃游戏&#xff08;比较简单&#xff09; 题目描述 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度…

Tailscale-搭建异地局域网开源版中文部署指南

目前国家工信部在大力推动三大运营商发展 IPv6&#xff0c;对家用宽带而言&#xff0c;可以使用的 IPv4 公网 IP 会越来越少。有部分地区即使拿到了公网 IPv4 地址&#xff0c;也是个大内网地址&#xff0c;根本不是真正的公网 IP&#xff0c;访问家庭内网的资源将会变得越来越…

SQL注入之联合查询注入与报错注入

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 SQL注入之联合查询 sql注入简单演示 1. 判断sq注入 2. 闭合然后爆列 3. 查看显示列 …

vue中实现后台系统权限管理的功能

一、前言 后台管理系统的权限控制对于前端来说是经常用到的知识点&#xff0c;也比较重要&#xff0c;最近梳理一下写成文章&#xff0c;方便以后查阅。 项目中实现菜单的动态权限控制使用到了两种技术&#xff0c;一种是Vue Router&#xff0c;另一种是vue3官方推荐使用的专属…

蓝桥杯嵌入式第十届学习记录

1&#xff1a;拷贝LCD工程代码作为模板2&#xff1a;注意放置代码得顺序3&#xff1a;注意公共头函数键盘4&#xff1a;串口配置出来方便dubug模式正常接收数据5:记得打定时器中断&#xff08;去历程定时器里面寻找&#xff01;&#xff09;6&#xff1a;细节地方7;LCD每个位置…

[hive]数仓分层|用户纬度拉链表|维度建模

https://www.modb.pro/404?redirect%2Fdb%2F241289一、数仓分层1、ODS层&#xff1a;原始数据层ODS(Ooriginal Ddata Sstore)1)设计要点存储来自多个业务系统、前端埋点、爬虫获取的一系列数据源的数据。我们要做三件事&#xff1a;【1】保持数据原貌不做任何修改&#xff0c;…

一阶高通滤波器学习

导读&#xff1a;本期文章主要介绍一阶高通滤波器。一阶高通滤波器与一阶低通滤波器很相似&#xff0c;都是利用电容阻低频信号通高频信号&#xff0c;电感阻高频信号通低频信号的特点。一、一阶高通滤波器介绍滤波器是作为一种选频装置&#xff0c;是信号处理中的一个重要的概…