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使用random和tertools模块解一些经典概率问题
Jan 28 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python数字图像处理之高级形态学处理
Apr 27 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python实现代码统计器
Sep 19 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
Django如何创作一个简单的最小程序
May 12 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 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
如何正确理解PHP的错误信息
2006/10/09 PHP
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
日期和时间问题
2015/01/04 面试题
中学生在校期间的自我评价分享
2013/11/13 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
二审答辩状范文
2015/05/22 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
vue修饰符.capture和.self的区别
2022/04/22 Vue.js