python:目标检测模型预测准确度计算方式(基于IoU)
作者:sestien 发布时间:2023-04-17 08:51:19
标签:python,目标检测,准确度计算,IoU
训练完目标检测模型之后,需要评价其性能,在不同的阈值下的准确度是多少,有没有漏检,在这里基于IoU(Intersection over Union)来计算。
希望能提供一些思路,如果觉得有用欢迎赞我表扬我~
IoU的值可以理解为系统预测出来的框与原来图片中标记的框的重合程度。系统预测出来的框是利用目标检测模型对测试数据集进行识别得到的。
计算方法即检测结果DetectionResult与GroundTruth的交集比上它们的并集,如下图:
蓝色的框是:GroundTruth
黄色的框是:DetectionResult
绿色的框是:DetectionResult ⋂GroundTruth
红色的框是:DetectionResult ⋃GroundTruth
基本思路是先读取原来图中标记的框信息,对每一张图,把所需要的那一个类别的框拿出来,与测试集上识别出来的框进行比较,计算IoU,选择最大的值作为当前框的IoU值,然后通过设定的阈值(漏检0, 0.3, 0.5, 0.7)来进行比较统计,最后得到每个阈值下的所有的判定为正确检测(IoU值大于阈值)的框的数量,然后与原本的标记框的数量一起计算准确度。
其中计算IoU的时候是重新构建一个背景为0的图,设定框所在的位置为1,分别利用原本标注的框和测试识别的框来构建两个这样的图,两者相加就能够让重叠的部分变成2,于是就可以知道重叠部分的大小(交集),从而计算IoU。
构建代码如下:
#读取txt-标准txt为基准-分类别求阈值-阈值为0. 0.3 0.5 0.7的统计
import glob
import os
import numpy as np
#设定的阈值
threshold1=0.3
threshold2=0.5
threshold3=0.7
#阈值计数器
counter0=0
counter1=0
counter2=0
counter3=0
stdtxt=''#标注txt路径
testtxt=''#测试txt路径
txtlist=glob.glob(r'%s\*.txt' %stdtxt)#获取所有txt文件
for path in txtlist:#对每个txt操作
txtname=os.path.basename(path)[:-4]#获取txt文件名
label=1
eachtxt=np.loadtxt(path) #读取文件
for line in eachtxt:
if line[0]==label:
#构建背景为0框为1的图
map1=np.zeros((960,1280))
map1[line[2]:(line[2]+line[4]),line[1]:(line[1]+line[3])]=1
testfile=np.loadtxt(testtxt + txtname + '.txt')
c=0
iou_list=[]#用来存储所有iou的集合
for tline in testfile:#对测试txt的每行进行操作
if tline[0]==label:
c=c+1
map2=np.zeros((960,1280))
map2[tline[2]:(tline[2]+tline[4]),tline[1]:(tline[1]+tline[3])]=1
map3=map1+map2
a=0
for i in map3:
if i==2:
a=a+1
iou=a/(line[3]*line[4]+tline[3]*tline[4]-a)#计算iou
iou_list.append(iou)#添加到集合尾部
threshold=max(iou_list)#阈值取最大的
#阈值统计
if threshold>=threshold3:
counter3=counter3+1
elif threshold>=threshold2:
counter2=counter2+1
elif threshold>=threshold1:
counter1=counter1+1
elif threshold<threshold1:#漏检
counter0=counter0+1
来源:https://blog.csdn.net/malvas/article/details/84957820


猜你喜欢
- 什么是字符串格式化,为什么需要这样做?我们有时候刷抖音/B站看到封面很好看,但是进入直播发现,不过如此!想必主播通过某种方式把输出转换为读者
- 前言Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"
- 目录1. 递归函数与回溯深搜的基础知识2. 求子集 (LeetCode 78)3. 求子集2 (LeetCode 90)4. 组合数之和(L
- template代码:<template> <div class="hello"> <ul
- 本文实例讲述了PHP变量作用域(全局变量&局部变量)&global&static关键字用法。分享给大家供大家参考,具
- PHP simplexml_load_string() 函数实例转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然
- 1. 概念1.1 基本概念时间,对于我们来说很重要,什么时候做什么?什么时候发生什么?没有时间的概念,生活就乱了。在日常的运维当中,我们更关
- 前言在前端编程中,事件的应用十分广泛,DOM上的各种事件。在Ajax大规模应用之后,异步请求更得到广泛的认同,而Ajax亦是基于事件机制的。
- Django分页功能的实现打开命令行窗口,创建Django工程,使用以下命令:django-admin startproject djpag
- 上回书说到了对人脸的检测,这回就开始正式进入人脸识别的阶段。关于人脸识别,目前有很多经典的算法,当我大学时代,我的老师给我推荐的第一个算法是
- 1、在mysql 中建立一个数据库 test1 语句:create database test1 2、创建表examinfo create
- 1. 卡住是怎么办按照以下步骤, 前提是你需要懂点英文:尽可能自己想办法解决仔细阅读相关文档, 确保不错过任何相关内容在Google, 百度
- (5)SELECT (5-2) DISTINCT(5-3)TOP(<top_specification>)(5-1) <s
- 本文目标:使用selenium3.0+python3操纵浏览器,打开百度网站。(相当于selenium的hello world)环境基础:p
- 接口性能测试时,接口请求参数是根据一定的规则拼接后进行MD5加密后再进行传参,因此借助于python脚本实现,则可以有效提升测试效率。1.分
- post, put请求的参数有两种形式一种是把参数拼接在url中 对应postman第二种是把参数放在body中 对应postman在Pyt
- HTTP请求是无状态的,我们通常会使用cookie或session对其进行状态保持,cookie存储在客户端,容易被用户误删,安全性不高,s
- 什么是图像平滑处理在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程我们称之为图像的平滑处理,所得到的图像称为平滑图像。那么什么
- Python是一种面向对象的语言,但它不像C++一样把标准类都封装到库中,而是进行了进一步的封装,语言本身就集成一些类和函数,比如print
- 函数:strip() lstrip() rstrip()作用:去除字符串中的空格或指定字符一、默认用法:去除空格st