yolov测试各项指标的流程

news2024/11/25 4:37:03

# yolov测试各项指标的流程:

  1. 载入模型, 其中包括类别数等;

  2. 按照 batch_size 逐张图片进行预测

    1. 得到预测标签: predn 和 实际标签 labelsn, 其中 末尾的 n 表示经过了原图适配的 bbox坐标.

      predn: {tensor: (3,6)},表示预测到了3个标签, 表示[x1, y1, x2, y2, confidence, class]
          
      tensor([[754.00000,  86.00000, 767.00000, 104.00000,   1.00000,   0.00000],
              [676.00006, 241.00000, 689.00006, 260.00000,   1.00000,   0.00000],
              [731.00000, 311.00000, 752.00000, 327.00000,   1.00000,   0.00000]], device='cuda:0')
      
      labelsn: {tensor: (3, 5)}, 实际有3个标签, 表示[class, x1, y1, x2, y2]
      
      tensor([[  0.00000, 731.00000, 311.00000, 752.00000, 327.00000],
              [  0.00000, 676.00006, 241.00000, 689.00006, 260.00000],
              [  0.00000, 754.00000,  86.00000, 767.00000, 104.00000]], device='cuda:0')
      
    2. 计算混淆矩阵, confusion_matrix.process_batch(predn, labelsn)

      1. iou = box_iou(labels[:, 1:], detections[:, :4]) # 调用general中计算iou的方式计算iou

        假设两个 bbox 分别为: (突然心生疑问: 这个坐标怎么疑似表示为了 左下右上 的方式. 以往都是 左上右下 , 什么时候转成这样的呢?)

        如果你也有这样的疑问, 那你就大错特错了…因为: 坐标系不一样. 如下图所示, 看到这个你就明白了.

        所以, 坐标表示还是 左上右下 的! 切记.

        https://img-blog.csdnimg.cn/202012071625010.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29xcUVOdlkxMg==,size_16,color_FFFFFF,t_70

        # 实际box
        box1: {tensor:(3, 4)}
        
        tensor([[731.00000, 311.00000, 752.00000, 327.00000],
                [676.00006, 241.00000, 689.00006, 260.00000],
                [754.00000,  86.00000, 767.00000, 104.00000]], device='cuda:0')
        
        # 预测box
        box2: {tensor:{3, 4}}
            
        tensor([[754.00000,  86.00000, 767.00000, 104.00000],
                [676.00006, 241.00000, 689.00006, 260.00000],
                [731.00000, 311.00000, 752.00000, 327.00000]], device='cuda:0')
        
        # 首先利用 box 的转置矩阵, 方便求面积, 
        box1.T
        tensor([[731.00000, 676.00006, 754.00000],
                [311.00000, 241.00000,  86.00000],
                [752.00000, 689.00006, 767.00000],
                [327.00000, 260.00000, 104.00000]], device='cuda:0')
        
        box2.T
        tensor([[754.00000, 676.00006, 731.00000],
                [ 86.00000, 241.00000, 311.00000],
                [767.00000, 689.00006, 752.00000],
                [104.00000, 260.00000, 327.00000]], device='cuda:0')
        

        则得到:
        b o x 1 的 a r e a 1 = ( b o x 1 [ 2 ] . T − b o x 1 [ 0 ] ) ∗ ( b o x 1 [ 3 ] − b o x 1 [ 1 ] ) = t e n s o r ( [ 336. , 247. , 234. ] ) 同理求得 a r e a 2 = t e n s o r ( [ 234. , 247. , 336. ] ) box1 的 area1 = (box1[2].T - box1[0]) * (box1[3] - box1[1]) = tensor([336., 247., 234.]) \\ 同理求得 area2 = tensor([234., 247., 336.]) box1area1=(box1[2].Tbox1[0])(box1[3]box1[1])=tensor([336.,247.,234.])同理求得area2=tensor([234.,247.,336.])

        然后一番操作, 就求出来了 IOU…

重点关注的几个变量:

targets: (真实标签) 存储此次 batch_size 中的所有变量, [当前BS中bbox数量, 6], 其中6维度依次是: [img_index, class, x, y, w, h]

out: 模型训练的结果, 包括所有的 bbox 以及置信度等,

  • out: 经过NMS, 得到筛选过的 bbox, 成为了一个list, len(list) 表示图片的数量, 也就是 BS.
  • out[0]: 此个 BS 中 第一张图片的预测结果, [bbox 数量, 6], 其中6维度依次是: [x1, y1, x2, y2, confidence, class]

依次遍历 targets 和 out, 分别得到 labels 和 pred,

pred: 此张图片预测的结果, 也就是 out[index]

predn: 经过 scale_coords 将预测的坐标信息 (pred的 bbox) 转换回相对原图尺度. 注意: 是 xyxy 格式的坐标信息转化为相对于原图的坐标信息.

labels: 第 i 个BS中真实标签信息, 也就是第 i 张图片

labelsn: 真实标签信息 xywh2xyxy, 然后再经过 scale_coords 转为相对原图的坐标信息

因此, 存在一个问题… yolo格式标签原来就是相对于原图的坐标信息, 什么时候转化为了 不是归一化后的[x,y, w,h] 呢?

原来是在 dataloader 中, 坐标是根据训练图像大小转化过 坐标信息的. LoadImagesAndLabels -> xywhn2xyxy

自定义性能测试文件

如果我想要更改 test.py / val.py 文件为从已有的两组标签中衡量性能, 我该如何做呢?

数据准备:

├─MOT16-02
│  ├─det
│  │  └─det.txt
│  ├─gt
│  │  └─gt.txt
│  ├─img1
│  │  ├─000001.jpg
│  │  ├─000002.jpg
│  │  ├─000003.jpg

其中, det/det.txt 文件包括 10列, 分别为:

1,-1,1359.1,413.27,120.26,362.77,2.3092,-1,-1,-1
1,-1,571.03,402.13,104.56,315.68,1.5028,-1,-1,-1
1,-1,650.8,455.86,63.98,193.94,0.33276,-1,-1,-1
1,-1,721.23,446.86,41.871,127.61,0.27401,-1,-1,-1
1,-1,454.06,434.36,97.492,294.47,0.20818,-1,-1,-1

<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z>
<第几帧>, <轨迹编号, 在这里都是-1>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <MOT3D_x>, <MOT3D_y>, <MOT3D_z>
注意: 最后三列是 MOT3D 用到的内容,2D检测总是为-1.

其中, gt/gt.txt 文件包括 10列, 分别为:

1,1,912,484,97,109,0,7,1
2,1,912,484,97,109,0,7,1
3,1,912,484,97,109,0,7,1
4,1,912,484,97,109,0,7,1
5,1,912,484,97,109,0,7,1

<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <flag>, <class>, <visibility ratio>
<frame>, <运动轨迹ID号, 也就是第几个人>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <目标轨迹是否进入考虑范围内的标志,0表示忽略,1表示active>, <该轨迹对应的目标种类>, <目标可见比例, box的visibility ratio>

image

其中, seqinfo.ini 文件主要介绍视频的帧率、分辨率等基本信息。

其中有几个字段还是不清楚, 因此先根据标签画一下图片, 可视化一下标签和图片的匹配度.

  1. 分别载入 det/gt 格式标签;

    1. det: [x1, y1, x2, y2, confidence, class]
    2. gt: [img_index, class, x, y, x, y]
  2. 然后就可以直接根据坐标画框了. 关于 name 是可选的, 可以传入一个 list

  3. 首先根据上面重点关注的几个变量出发, 找到入口处, 也就是循环遍历开始的地方.

  4. 准备好标签文件, 类型为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IO重定向

文章目录 IO重定向概念3个标准文件描述符“最低可用文件描述符”原则 默认的连接&#xff1a;tty使用close then open将stdin定向到文件使用open..close..dup..close将stdin定向到文件使用open..dup2..close将stdin重定向到文件课上实验 IO重定向 大多数的程序不接收输出文件名…

Deformable Transformer论文笔记

原文链接 [2010.04159] Deformable DETR: Deformable Transformers for End-to-End Object Detection (arxiv.org)https://arxiv.org/abs/2010.04159 原文笔记 What 作者结合了可变形卷积的稀疏空间采样和 Transformer 的关系建模能力的优点。提出了Deformable Detr Defor…

算法笔记(十三)——BFS 解决最短路问题

文章目录 迷宫中离入口最近的出口最小基因变化单词接龙为高尔夫比赛砍树 BFS 解决最短路问题 BFS(广度优先搜索) 是解决最短路径问题的一种常见算法。在这种情况下&#xff0c;我们通常使用BFS来查找从一个起始点到目标点的最短路径。 迷宫中离入口最近的出口 题目&#xff1a;…

can 总线入门———can简介硬件电路

文章目录 0. 前言1. CAN简介2. 主流通讯协议对比3. CAN 硬件电路4. CAN 电平标准5. CAN 收发器 0. 前言 博客内容来自B站上CAN总线入门教程视频讲解&#xff0c;博客中的插图和内容均为视频中的内容。视频链接 CAN总线入门教程 1. CAN简介 先来看看一它名字的意思&#xff0c…

Redis 缓存策略详解:提升性能的四种常见模式

在现代分布式系统中&#xff0c;缓存是提升性能和减轻数据库负载的关键组件。Redis 作为一种高性能的内存数据库&#xff0c;被广泛应用于缓存层。本文将深入探讨几种常用的 Redis 缓存策略&#xff0c;包括旁路缓存模式&#xff08;Cache-Aside Pattern&#xff09;、读穿透模…

强化学习入门到不想放弃-4

上回的地址&#xff1a;强化学习入门到不想放弃-3 (qq.com) 上上回地址&#xff1a;强化学习入门到不想放弃-2 (qq.com) 上上上回地址&#xff1a;强化学习入门到不想放弃-1 (qq.com) 好久没更新了&#xff0c;也是不知道写啥啊&#xff0c;&#xff08;有些文章刚写了就被有些…

鸽笼原理与递归 - 离散数学系列(四)

目录 1. 鸽笼原理 鸽笼原理的定义 鸽笼原理的示例 鸽笼原理的应用 2. 递归的定义与应用 什么是递归&#xff1f; 递归的示例 递归与迭代的对比 3. 实际应用 鸽笼原理的实际应用 递归的实际应用 4. 例题与练习 例题1&#xff1a;鸽笼原理应用 例题2&#xff1a;递归…

三、Python基础语法(注释、三种波浪线、变量)

一、注释 注释是对代码进行解释说明的文字&#xff0c;不会被解释器执行&#xff0c;可以更方便阅读代码和了解代码的作用。 1.单行注释 使用#开头的文字就是注释&#xff0c;可以使用快捷键Ctrl / 2.多行注释 多行注释就是注释的内容&#xff0c;可以换行书写&#xff0c…

集智书童 | 用于时态动作检测的预测反馈 DETR !

本文来源公众号“集智书童”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;用于时态动作检测的预测反馈 DETR ! 视频中的时间动作检测&#xff08;TAD&#xff09;是现实世界中的一个基本且具有挑战性的任务。得益于 Transformer …

提升 CI/CD 稳定性:Jenkins 开机自检与推送通知

简介&#xff1a;Jenkins 是一个广泛使用的开源自动化服务器&#xff0c;常用于持续集成和持续交付。在某些情况下&#xff0c;服务器重启可能导致 Jenkins 构建任务中断或失败。为了解决这个问题&#xff0c;可以使用一个自检服务&#xff0c;定期检查系统的启动时间&#xff…

3559 pcie配置流程

目录 EP配置 uboot配置 uboot代码修改 内核代码修改 带宽配置 带宽查看 硬件管脚配置 EP配置 uboot配置 1)make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_emmc_defconfig 2) make menuconfig CROSS_COMPILE=aarch64-himix100-linux- 修改配置: 3) 合入…

一种将RAG、KG、VS、TF结合增强领域LLM性能的框架

SMART-SLIC框架&#xff1a;旨在将RAG结合向量存储&#xff08;Vector Stores&#xff09;、知识图谱&#xff08;Knowledge Graphs&#xff09;和张量分解&#xff08;Tensor Factorization&#xff09;来增强特定领域的大型语言模型&#xff08;LLMs&#xff09;的性能。 SM…

codetop标签动态规划大全C++讲解(二)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o

一篇只有十题左右&#xff0c;写少一点好复习 1.目标和2.分割等和子集3.完全平方数4.比特位计数5.石子游戏6.预测赢家7.不同的二叉搜索树8.解码方法9.鸡蛋掉落10.正则表达式匹配11.通配符匹配12.交错字符串 1.目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中…

01-python+selenium自动化测试-基础学习

前言 基于python3和selenium3做自动化测试&#xff0c;俗话说&#xff1a;工欲善其事必先利其器&#xff1b;没有金刚钻就不揽那瓷器活&#xff0c;磨刀不误砍柴工&#xff0c;因此你必须会搭建基本的开发环境&#xff0c;掌握python基本的语法和一个IDE来进行开发&#xff0c…

短剧系统源码短剧平台开发(H5+抖小+微小)部署介绍流程

有想法加入国内短剧赛道的请停下脚步&#xff0c;耐心看完此篇文章&#xff0c;相信一定会对您有所帮助的&#xff0c;下面将排序划分每一个步骤&#xff0c;短剧源码、申请资料、服务器选择、部署上架到正常运行等几个方面&#xff0c;整理了一些资料&#xff0c;来为大家举例…

中广核CGN25届校招网申SHL测评题库、面试流程、招聘对象,内附人才测评认知能力真题

​中国广核集团校园招聘在线测评攻略&#x1f680; &#x1f393; 校园招聘对象 2024届、2025届海内外全日制应届毕业生&#xff0c;大专、本科、硕士、博士&#xff0c;广核集团等你来&#xff01; &#x1f4c8; 招聘流程 投递简历 简历筛选 在线测评&#xff08;重点来啦…

C++ 算法学习——1.6 前缀和与二维前缀和算法

前缀和算法&#xff08;Prefix Sum Algorithm&#xff09;&#xff1a; 概念&#xff1a;前缀和算法通过在遍历数组时计算前缀和&#xff08;从数组的第一个元素开始累加到当前元素的和&#xff09;&#xff0c;可以在O(1)时间内得到任意区间的子数组和&#xff0c;而不需要重复…

告别音乐小白!字节跳动AI音乐创作工具,让你一键变作曲家!

还在羡慕别人能创作动听的音乐&#xff1f;五音不全的你&#xff0c;也梦想着谱写属于自己的乐章&#xff1f;现在&#xff0c;机会来了&#xff01;字节跳动推出了一款AI音乐创作工具——抖音推出的海绵音乐&#xff0c;它能让你轻松一键创作音乐&#xff0c;即使是“音乐小白…

海外科技新闻媒体与商业媒体:垂直网站的魅力与软文分发

海外科技新闻媒体与商业媒体&#xff1a;垂直网站的魅力与软文分发 在信息爆炸的时代&#xff0c;如何有效地传递品牌信息并提高知名度成为了许多企业的重要课题。在这个过程中&#xff0c;海外科技新闻媒体与商业媒体的垂直网站扮演了重要角色&#xff0c;而软文分发则因其独特…

笔试题总结

1.对于线性表的描述&#xff1a;存储空间不一定是连续&#xff0c;且各元素的存储顺序是任意的 2.虚函数的定义&#xff1a;函数的返回值参数不定&#xff0c; 声明&#xff1a; 类型&#xff0c;返回这类型 名字&#xff08;&#xff09;&#xff1b; 例如声明一个虚函数&a…