【目标检测】计算YOLOv5/7/8/9的TP, FP, FN, Recall和Precision

2024-04-09 08:12

本文主要是介绍【目标检测】计算YOLOv5/7/8/9的TP, FP, FN, Recall和Precision,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 设定IoU和Conf阈值

2. 保存推理结果的txt文件

3. 计算TP, FP, FN

import osclasses = {0: "class 1",1: "class 2"}def iou(box1, box2):box1_x1 = box1[0] - box1[2] / 2box1_y1 = box1[1] - box1[3] / 2box1_x2 = box1[0] + box1[2] / 2box1_y2 = box1[1] + box1[3] / 2box2_x1 = box2[0] - box2[2] / 2box2_y1 = box2[1] - box2[3] / 2box2_x2 = box2[0] + box2[2] / 2box2_y2 = box2[1] + box2[3] / 2inter_x1 = max(box1_x1, box2_x1)inter_y1 = max(box1_y1, box2_y1)inter_x2 = min(box1_x2, box2_x2)inter_y2 = min(box1_y2, box2_y2)inter_area = max(inter_x2 - inter_x1, 0) * max(inter_y2 - inter_y1, 0)box1_area = (box1_x2 - box1_x1) * (box1_y2 - box1_y1)box2_area = (box2_x2 - box2_x1) * (box2_y2 - box2_y1)union_area = box1_area + box2_area - inter_areaiou = inter_area / union_area if union_area > 0 else 0return ioudef read_boxes(file_path):boxes = []confidences = []with open(file_path, 'r') as f:for line in f:parts = line.strip().split()if len(parts) == 6:category = int(parts[0])box = [float(part) for part in parts[1:5]]confidence = float(parts[5])boxes.append((category, box))confidences.append((category, confidence))elif len(parts) == 5:category = int(parts[0])box = [float(part) for part in parts[1:5]]boxes.append((category, box))return boxes, confidencesdef evaluate_folder(annotation_dir, result_dir):stats = {}for annot_file in os.listdir(annotation_dir):annot_path = os.path.join(annotation_dir, annot_file)result_path = os.path.join(result_dir, annot_file)annot_boxes, _ = read_boxes(annot_path)  # 标注不需要置信度result_boxes, result_confidences = read_boxes(result_path) if os.path.exists(result_path) else ([], [])for category, _ in annot_boxes:if category not in stats:stats[category] = {'annotated': 0, 'predicted': 0, 'tp': 0, 'fp': 0, 'fn': 0, 'confidences': []}stats[category]['annotated'] += 1for category, result_box in result_boxes:if category not in stats:stats[category] = {'annotated': 0, 'predicted': 0, 'tp': 0, 'fp': 0, 'fn': 0, 'confidences': []}stats[category]['predicted'] += 1ious = [iou(result_box, box) for cat, box in annot_boxes if cat == category]if max(ious, default=0) >= 0.5:stats[category]['tp'] += 1else:stats[category]['fp'] += 1for category, confidence in result_confidences:stats[category]['confidences'].append(confidence)for category, annot_box in annot_boxes:ious = [iou(annot_box, box) for cat, box in result_boxes if cat == category]if max(ious, default=0) < 0.5:stats[category]['fn'] += 1for category, data in stats.items():confidences = data['confidences']data['min_conf'] = min(confidences, default=0)data['max_conf'] = max(confidences, default=0)data['ave_conf'] = sum(confidences) / len(confidences) if confidences else 0data['precision'] = data['tp'] / (data['tp'] + data['fp']) if data['tp'] + data['fp'] > 0 else 0data['recall'] = data['tp'] / (data['tp'] + data['fn']) if data['tp'] + data['fn'] > 0 else 0del data['confidences']  # 为了清晰,删除置信度列表return stats# path
annotation_dir = 'labels/test'
result_dir = 'runs/detect/exp/labels'# calculate TP, FP, FN
stats = evaluate_folder(annotation_dir, result_dir)
print("index | class | Instance | Detection | TP | FP | FN | Precision | Recall | Min Conf | Max Conf | Ave Conf")
for category, data in sorted(stats.items()):print(f"{category} | {classes[category]} | {data['annotated']} | {data['predicted']} | {data['tp']} | {data['fp']} | {data['fn']} | {data['precision']:.2f} | {data['recall']:.2f} | {data['min_conf']:.2f} | {data['max_conf']:.2f} | {data['ave_conf']:.2f}")

这篇关于【目标检测】计算YOLOv5/7/8/9的TP, FP, FN, Recall和Precision的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887620

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou