python:目标检测模型预测准确度计算方式(基于IoU)


Posted in Python onJanuary 18, 2020

训练完目标检测模型之后,需要评价其性能,在不同的阈值下的准确度是多少,有没有漏检,在这里基于IoU(Intersection over Union)来计算。

希望能提供一些思路,如果觉得有用欢迎赞我表扬我~

IoU的值可以理解为系统预测出来的框与原来图片中标记的框的重合程度。系统预测出来的框是利用目标检测模型对测试数据集进行识别得到的。

计算方法即检测结果DetectionResult与GroundTruth的交集比上它们的并集,如下图:

蓝色的框是:GroundTruth

黄色的框是:DetectionResult

绿色的框是:DetectionResult ⋂GroundTruth

红色的框是:DetectionResult ⋃GroundTruth

python:目标检测模型预测准确度计算方式(基于IoU)

python:目标检测模型预测准确度计算方式(基于IoU)

基本思路是先读取原来图中标记的框信息,对每一张图,把所需要的那一个类别的框拿出来,与测试集上识别出来的框进行比较,计算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

以上这篇python:目标检测模型预测准确度计算方式(基于IoU)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
Python lambda和Python def区别分析
Nov 30 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
Python实现的字典值比较功能示例
Jan 08 Python
python构建深度神经网络(DNN)
Mar 10 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
Python Flask框架扩展操作示例
May 03 Python
如何在Django配置文件里配置session链接
Aug 06 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 #Python
python实现的Iou与Giou代码
Jan 18 #Python
Python 简单计算要求形状面积的实例
Jan 18 #Python
python实现用类读取文件数据并计算矩形面积
Jan 18 #Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 #Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 #Python
利用setuptools打包python程序的方法步骤
Jan 18 #Python
You might like
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
js常用函数 不错
2006/09/08 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python socket模块方法实现详解
2019/11/05 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
公开服务承诺制度
2014/03/26 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
先进个人评语大全
2015/01/04 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
市级三好生竞选稿
2015/11/21 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL
如何Tomcat中使用ipv6地址
2022/05/06 Servers