AP单类平均准确率

ops/2025/2/4 19:05:31/
        P_true   N_true
P_pred    TP      Fp
N_pred    FN      TNP       N
  1. TP(真正样本,与真实框IoU大于阈值的框) FP(假正样本,与真实框IoU小于阈值的框) TN(真负样本,背景) FN(假负样本,没有检测出的正样本)
  2. IoU:(A and B)/(A or B) A与B的交集除以A与B的并集
  3. precision:准确率,查全率。TP/(TP+FP)= TP/num_pred,数值越大,说明FP数量越少,准确率越高,但是没有考虑FN(可能有漏检)。
  4. recall:召回率,查准率。TP/(TP+FN)= TP/num_sample,数值越大,说明被检测到的正样本越多,效果越好,但是没有考虑FP(如果把背景也判断成前景,则效果不好)。
  5. F score:几何平均分,(BB+1)PR/(BBP+R),B用来调节PR的权重,当B=1,F1 score。 是precision和recall的加权,考虑两个评价指标的优劣。precision和recall是此消彼长的关系。
  6. Average Precision:单类平均准确率。是PR曲线的面积。
样本     置信度       正负样本    累计tp   累计fp   precision   recall
1 		 0.97 		 True 		 1 		 0 		 1.0 		 0.1
2 		 0.87 		 True 		 2 		 0 		 1.0 		 0.2
3 		 0.84 		 True 		 3 		 0 		 1.0 		 0.3
4 		 0.8 		 True 		 4 		 0 		 1.0 		 0.4
5 		 0.69 		 False 		 4 		 1 		 0.8 		 0.4
6 		 0.58 		 True 		 5 		 1 		 0.83 		 0.5
7 		 0.43 		 False 		 5 		 2 		 0.71 		 0.5
8 		 0.19 		 True 		 6 		 2 		 0.75 		 0.6
9 		 0.02 		 False 		 6 		 3 		 0.67 		 0.6
10 		 0.03 		 False 		 6 		 4 		 0.6 		 0.6

在这里插入图片描述

import numpy as np
img_ids = None
class_recs = None
BB = Nonend = len(img_ids)
thred = 0.5
npos = 100
tp = np.zeros(nd)
fp = np.zeros(nd)
for d in range(nd):R = class_recs[img_ids[d]]bb = BB[d,:].astype(float)      # 按照置信度排好序idx = -np.infBBGT = R['bbox'].astype(float)  # 真实框if BBGT.size>0:# 计算IoUx1y1 = np.maximum(BBGT[:,:2],bb[:2])x2y2 = np.maximum(BBGT[:, 2:], bb[2:])wh = np.maximum(x2y2-x1y1+1,0)inters = wh[0]*wh[1]bb_areas = (bb[2]-bb[0]+1.0)*(bb[3]-bb[1]+1.0)BBGT_ares = (BBGT[:,2]-BBGT[:,0]+1.0)*(BBGT[:,3]-BBGT[:,1]+1.0)ious = inters/(bb_areas+BBGT_ares-inters)iou = np.max(ious)idx = np.argmax(ious)if idx>thred:if not R['difficult'][idx]:if not R['det'][idx]:tp[d]=1.R['det'][idx]=1else:fp[d] = 1.else:fp[d] = 1.fp = np.cumum(fp)
tp = np.cumum(tp)
rec = tp/float(npos)
prec = tp/np.maximum(tp+fp,np.finfo(np.float64).eps)def voc_ap(rec,prec):mrec = np.concatenate(([0.],rec,[1.]))mpre = np.concatenate(([0.],prec,[0.]))for i in range(mpre.size-1,0,-1):mpre[i-1]=np.maximum(mpre[i-1],mpre[i])i = np.where(mpre[1:] != mpre[:-1])[0]ap = np.sum((mrec[i+1]-mrec[i])*mrec[i+1])return ap

http://www.ppmy.cn/ops/155652.html

相关文章

【C语言】填空题/程序填空题1

1. 下列程序取出一个整数x的二进制表示中,从第p位开始的n位二进制,并输出所表示的整数值。如: 输入:-17 5 3 输出:5 【说明】整数-17的32位二进制表示为:11111111 11111111 11111111 11101111,…

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

DDD - 领域事件_解耦微服务的关键

文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题 EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念 领域事件&a…

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …

在AWS上使用Flume搜集分布在不同EC2实例上的应用程序日志具体流程和代码

在AWS上使用Flume搜集日志的一个典型应用案例涉及将分布在不同EC2实例上的应用程序日志实时收集并集中存储到Amazon S3或Amazon HDFS(如果已部署)中,以供后续分析和处理。以下是该案例的详细步骤: 环境准备 • 确保在AWS上有一组…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

数据的添加、更新与删除

一,添加数据 INSERT INTO 表名 VALUES(); 存在两种书写形式: (1)自主填写 自主填写的形式: ①根据创建表的字段结构,依次填入数据。 ②填入数据时,自己指明字段结构,依据就近…

【数据结构】_链表经典算法OJ:链表判环问题

目录 1. 题目1:环形链表判环是否存在 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 关于快慢指针的追击问题 2.1 试分析快指针步长为2的可行性? 2.2 试分析快指针步长为3的可行性? 3. 题目2:环形链表判环是否存在并返回入…