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中的len()函数的使用
Apr 07 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
python修改FTP服务器上的文件名
Sep 11 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
Python3常用内置方法代码实例
Nov 18 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
pandas DataFrame.shift()函数的具体使用
May 24 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
Window下PHP三种运行方式图文详解
2013/06/11 PHP
php中的静态变量的基本用法
2014/03/20 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
js中function()使用方法
2013/12/24 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python实现电脑自动关机
2018/06/20 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
python通过http下载文件的方法详解
2019/07/26 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
经典c++面试题二
2015/08/14 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
房地产开发项目建议书
2014/05/16 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2016党员党课心得体会
2016/01/07 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
总结Python使用过程中的bug
2021/06/18 Python
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
mybatis 获取更新记录的id
2022/05/20 Java/Android