利用mAP计算yolo精确度

当将yolo算法移植部署在嵌入式设备上,为了验证算法的准确率。将模型测试的结果保存为txt文件(每一个txt文件,对应一个图片)。此外,需要将数据集中的标签由[x,y,w,h]转为[x1,y1,x2,y2]。最后,运行验证代码

标签格式转换

yolo格式的txt文件,保存的坐标信息是中心点和框的高宽。如果我们要进行训练和验证的话,那么需要将yolo格式的坐标进行转换成框的左上角的坐标和右下角的坐标。
在这里插入图片描述
转换原理和公式如下:
在这里插入图片描述

下面的代码-将数据集中的标签由[x,y,w,h]转为[x1,y1,x2,y2]

import cv2
import os
import numpy as npdef Xmin_Ymin_Xmax_Ymax(img_path,txt_path,save_path):""":param img_path: 图片文件的路径:param txt_path: 坐标文件的路径:return:"""img = cv2.imread(img_path)# 获取图片的高宽h, w, _ = img.shapewith open(save_path, "w+") as file:pass  # 什么都不写入文件,把txt文件的内容清空# 坐标转换,原始存储的是YOLOv5格式# from [x, y, w, h] normalized to [x1, y1, x2, y2]with open(txt_path, "r") as file:for line in file:# 在这里处理每一行的内容contline=line.split(' ')   #计算框的左上角坐标和右下角坐标,使用strip将首尾空格去掉xmin=float((contline[1]).strip())-float(contline[3].strip())/2xmax=float(contline[1].strip())+float(contline[3].strip())/2ymin = float(contline[2].strip()) - float(contline[4].strip()) / 2ymax = float(contline[2].strip()) + float(contline[4].strip()) / 2#将坐标(0-1之间的值)还原回在图片中实际的坐标位置---因此YOLOv5格式保存到x, y, w, h都是归一化后xmin,xmax=w*xmin,w*xmaxymin,ymax=h*ymin,h*ymaxdatasets=str(contline[0])+' '+str(xmin)+' '+str(ymin)+' '+str(xmax)+' '+str(ymax)+'\n'with open(save_path,'a') as fp:fp.write(datasets)# #打印查看保存后txt的内容# with open(save_path, "r") as file:#     for line in file:#         contline=line.split(' ')   #         print(contline)return (contline[0],xmin,ymin,xmax,ymax)#将所有转换之后的实际坐标保存到新的txt文件当中
def writeXYToTxt():""":return:"""imgsPath='input/images-optional'txtsPath='input/ground-truth_zxd'save_path='input/ground-truth/'imgs=os.listdir(imgsPath)txts=os.listdir(txtsPath)for img_,txt_ in zip(imgs,txts):img_path=os.path.join(imgsPath,img_)txt_path=os.path.join(txtsPath,txt_)Xmin_Ymin_Xmax_Ymax(img_path=img_path,txt_path=txt_path,save_path = save_path+txt_)if __name__ == '__main__':writeXYToTxt()

参考链接:LabelImg标注的YOLO格式txt标签中心坐标和物体边界框长宽的转换

测试结果验证

使用PASCAL VOC 2012比赛中定义的mAP标准进行评判。通过计算真实标签中存在的每个类别的平均精度(AP),并计算mAP(平均精度)值以作为算法精度的性能指标。

TP TN FP FN的概念

  • TP(True Positives)意思就是被分为了正样本,而且分对了。
  • TN(True Negatives)意思就是被分为了负样本,而且分对了,
  • FP(False Positives)意思就是被分为了正样本,但是分错了(事实上这个样本是负样本)。
  • FN(False Negatives)意思就是被分为了负样本,但是分错了(事实上这个样本是正样本)。

mAP,其中代表P(Precision)精确率。AP(Average precision)单类标签平均(各个召回率中最大精确率的平均数)的精确率,mAP(Mean Average Precision)所有类标签的平均精确率。
备注:

  • mAP@0.5: mean Average Precision(IoU=0.5)。即将IoU设为0.5时,计算每一类的所有图片的AP,然后所有类别求平均,即mAP。
  • mAP@.5:.95(mAP@[.5:.95])表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。

准确率=预测正确的样本数/所有样本数,即预测正确的样本比例(包括预测正确的正样本和预测正确的负样本,不过在目标检测领域,没有预测正确的负样本这一说法,所以目标检测里面没有用Accuracy的)。

精确率也称查准率,Precision翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”。

召回率Recall:和Precision一样,脱离类别是没有意义的。说道Recall,一定指的是某个类别的Recall。Recall表示某一类样本,预测正确的与所有Ground Truth的比例。
Recall翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例”。
在这里插入图片描述

AP指单个类别平均精确度,而mAP是所有类别的平均精确度
AP事实上指的是,利用不同的Precision和Recall的点的组合,画出来的曲线下面的面积。
在这里插入图片描述
当我们取不同的置信度,可以获得不同的Precision和不同的Recall,当我们取得置信度够密集的时候,就可以获得非常多的Precision和Recall。此时Precision和Recall可以在图片上画出一条线,这条线下部分的面积就是某个类的AP值。
mAP就是所有的类的AP值求平均。

绘制mAP

第一:首先在github上下载绘制mAP所需的代码:https://github.com/Cartucho/mAP
第二:在下载的代码中,将模型预测结果的txt文件放在detection-results文件夹中。其中,预测标签的格式<class_name>
要注意的是:模型预测的置信度阈值要设置低一点,可以设置为0.05。
在这里插入图片描述
第二:在下载的代码中,将真实标签结果的txt文件放在ground-truth文件夹中。其中,真实标签的格式<class_name> []
在这里插入图片描述
第三:在下载的代码中,将原始图片放在image-optional文件夹中。其中,图片用于可视化,但是如果不需要可视化,可以不放在图片。
在这里插入图片描述

参考链接:
1、睿智的目标检测20——利用mAP计算目标检测精确度
2、史上最全AP、mAP详解与代码实现

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

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

相关文章

Secureboot从入门到精通

关键词&#xff1a;trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频&#xff0c;cache视频、mmu视频&#xff0c;armv8视频、armv9视频 FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺&#xff0c;baron&#xff0…

把握现在,热爱生活

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 厨艺房价琐事计划随想 今年的中秋国庆假期放8天&#xff0c;比春节假期…

Centos7配置firewalld防火墙规则

这里写自定义目录标题 欢迎使用Markdown编辑器一、简单介绍二、特点和功能2.1、区域&#xff08;Zone&#xff09;2.2、运行时和永久配置2.3、服务和端口2.4、动态更新2.5、连接跟踪2.6、D-Bus接口 三、设置规则3.1、启动防火墙服务3.2、新建防火墙规则的服务&#xff0c;添加端…

分布式链路追踪--SkyWalking7.0.0+es7.0.0

分布式链路追踪–SkyWalking ​ 微服务的出现&#xff0c;的确解决了一些业务痛点&#xff0c;但是也造成了新的问题比如随着调用链的拉长&#xff0c;如果想要知道请求为什么这么慢&#xff0c;这个请求到底经历了哪些环节&#xff0c;又依赖了哪些东西&#xff0c;在微服务架…

亲测可用国产GPT人工智能

分享一些靠谱、可用、可以白嫖的GPT大模型。配合大模型&#xff0c;工作效率都会极大提升。 清华大学ChatGLM 官网&#xff1a; 智谱清言中国版对话语言模型&#xff0c;与GLM大模型进行对话。https://chatglm.cn/开源的、支持中英双语的1300亿参数的对话语言模型&#xff0…

【MATLAB】字体美化和乱码

文章目录 前言首先说说说字体美化乱码到底是怎么导致的&#xff1f;1 字体导致的乱码2 编码导致的乱码总结 前言 最近打开MATLAB&#xff0c;又发现了一个问题&#xff1a;编辑器中的中文输入在命令行或者说终端输出竟然是乱码&#xff0c;然后赶紧翻阅了一下此前的博客以及未发…

使用VBA实现快速模糊查询数据

实例需求&#xff1a;基础数据保存在Database工作表中&#xff0c;如下图所示。 基础数据有37个字段&#xff0c;上图仅展示部分字段内容&#xff0c;下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字&#xff0c;包…

【数据结构--八大排序】之归并排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Armv9 Cortex-A720的L2 memory system 和 L2 Cache

9 L2 memory system Cortex-A720核心的L2内存系统通过CPU bridge连接core与DynamIQ Shared Unit-120,其中包括私有的L2缓存。 L2缓存是统一的,每个Cortex-A720核心在一个集群中都有私有的L2缓存。 L2内存系统包括使用虚拟地址(VA)和程序计数器(PC)的数据预取引擎。不同…

【2023研电赛】华东赛区一等奖:电动叉车永磁同步电机MTPA及弱磁控制研究

本文为2023年第十八届中国研究生电子设计华东赛区一等奖竞赛作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&a…

Kakfa高效读写数据

1.概述 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff1a;一是 Producer 生产的数据存到 broker&#xff0c;二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了&#xff0c;本文也是从这两个方面去剖析Kafk…

nodejs+vue健身服务应用elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性&#xff1a;技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性&#xff1a; 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…

数据结构与算法-(7)---栈的应用-(3)表达式转换

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

华为云云耀云服务器 L 实例评测:快速建站的新选择,初创企业和开发者的理想之选

华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选 文章目录 华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选导语&#xff1a;摘要&#xff1a; 正文产品概述部署简易性步…

在Windows11家庭中文版中启用Copilot(预览版)

1、下载ViveTool-vx.x.x.zip 2、解压下载的压缩包ViveTool-vx.x.x.zip 3、复制ViveTool文件夹的路径 4、按下wins&#xff0c;打开搜索 5、输入cmd&#xff0c;并选择“以管理员身份运行” 6、在cmd中输入以下命令&#xff0c;进入ViveTool文件夹&#xff1a; cd ViveTool…

BI神器Power Query(26)-- 使用PQ实现表格多列转换(2/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…

接雨水问题

接雨水问题 问题背景 LeetCode 42. 接雨水 接雨水问题是一个经典的计算雨水滞留量的问题&#xff0c;通常使用柱状图来表示不同高度的柱子。在下雨的情况下&#xff0c;柱子之间的凹陷部分能够存储雨水&#xff0c;问题的目标是计算这些柱子所能接收的雨水总量。 相关知识 …

windows系统利用powershell查看系统支持那些Windows功能选项

在PowerShell中&#xff0c;我们可以使用Get-WindowsOptionalFeature cmdlet命令来查看Windows功能选项。 打开PowerShell 输入以下命令&#xff1a;将结果输出到1.log Get-WindowsOptionalFeature -Online >1.log 可以看到在指定路径下看到生成了文件 打开查看内容&…

BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…

Halcon中灰度直方图的使用与学习

目录 第一步:当前打开窗口的显示灰度图或者mono图片第二步:激活后,我们可以去调整调整右边直方图灰阶值的中蓝色和红色竖线,获取左边图上的灰阶值的范围内的特征显示。第三步:插入代码:总结:它的直观目的,就是查看灰度的分布情况!灰度直方图,是我们经常使用,抓取不同…