python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(-代码)

Python是一种功能强大的编程语言,它提供了许多库和工具,用于处理和可视化数据。在本文中,我们将介绍使用Python绘制热力图,并对VOC数据集中的类别标签进行分布及数量统计。

首先,我们需要导入所需的库。使用`numpy`库来处理数据,`matplotlib`库来绘制热力图。

import numpy as np
import matplotlib.pyplot as plt

接下来,我们需要加载VOC数据集并获取类别标签信息。VOC数据集是一个常用的用于目标检测任务的数据集,其中包含了多个类别的物体标注信息。

假设我们已经加载了VOC数据集,并将类别标签保存在一个名为`labels`的列表中。我们可以使用`numpy`库的`unique`函数获取不重复的类别标签,并使用`numpy`库的`count_nonzero`函数统计每个类别的数量。

labels = [...]  # VOC数据集的类别标签unique_labels, label_counts = np.unique(labels, return_counts=True)

现在,我们可以绘制热力图来可视化类别标签的分布情况。热力图可以直观地显示不同类别的数量。

# 创建一个空的矩阵,大小为类别标签的数量
heatmap = np.zeros((len(unique_labels),))# 将每个类别的数量填充到矩阵中
for label, count in zip(unique_labels, label_counts):heatmap[label] = count# 绘制热力图
plt.imshow([heatmap], cmap='hot')
plt.colorbar()
plt.xlabel('Label')
plt.ylabel('Count')
plt.title('VOC Dataset Label Distribution')
plt.show()

运行以上代码,我们就可以得到一个热力图,横轴表示类别标签,纵轴表示数量统计。颜色越深表示数量越多。

通过绘制热力图,我们可以更好地了解VOC数据集中各个类别的分布情况。这对于分析数据集的特点、优化模型的训练等都非常有帮助。

总结起来,本文介绍了如何使用Python绘制热力图,并对VOC数据集中的类别标签进行分布及数量统计。通过可视化数据,我们可以更好地理解和分析数据集,为后续的任务提供指导和参考。

前言

当你需要统计训练数据中每个类别标签有多少,并且想知道坐标中心分布在图像的位置信息时,你可以利用一下脚本进行计算!

步骤

要绘制热力图来分析VOC数据的分布统计,可以按照以下步骤进行:

 

  • 数据处理:首先,你需要读取VOC数据集的标注文件,可以使用Python中的XML解析库(如xml.etree.ElementTree)或者专门用于处理VOC数据集的工具库(如vocparse)来解析XML文件。解析后,你可以获取每个样本的标注信息,包括目标类别、边界框位置等。
  • 统计数据分布:遍历所有样本的标注信息,统计每个类别在图像中出现的次数或占比。根据需要,你可以选择统计全局的数据分布,或者针对特定区域或图像子集进行统计。将统计结果存储在一个二维数组或字典中,以便后续生成热力图。
  • 绘制热力图:根据统计结果,使用Python中的数据可视化库(如matplotlib、seaborn等)来绘制热力图。热力图可以使用颜色来表示数据的密度或占比。一种常见的绘制方法是使用imshow函数,传入统计结果的二维数组,设置合适的颜色映射和标签等。
代码块 
import os
import xml.etree.ElementTree as ET
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt# VOC数据集路径
dataset_path = 'Annotations/'# 存储标签及其对应的目标框数量
label_counts = {}
image_width = 1280
image_height = 960
block_size = 40# 创建一个二维数组,用于存储每个块中目标框的数量
block_counts = np.zeros((image_height // block_size, image_width // block_size))# 遍历数据集中的每个XML文件
i=0
for filename in os.listdir(dataset_path):if filename.endswith('.xml'):# 解析XML文件tree = ET.parse(os.path.join(dataset_path, filename))root = tree.getroot()# 遍历XML文件中的所有目标框for obj in root.findall('object'):label = obj.find('name').textif label=='vehicle':xmin = int(float(obj.find('bndbox/xmin').text))ymin = int(float(obj.find('bndbox/ymin').text))xmax = int(float(obj.find('bndbox/xmax').text))ymax = int(float(obj.find('bndbox/ymax').text))x_pixel = int((xmin + ymin) / 2)y_pixel = ymax# 将底部中心点映射到相应的像素块block_x = x_pixel // block_sizeblock_y = y_pixel // block_size# 统计该像素块中目标框的数量block_counts[block_y, block_x] += 1i+=1
plt.imshow(block_counts, cmap='hot')
plt.colorbar()# 设置坐标轴
plt.xlabel('Blocks (50x50 pixels)')
plt.ylabel('Blocks (50x50 pixels)')
plt.title('Object Distribution Heatmap')# 显示热力图
plt.show()
print(block_counts)
print("该标签有",i)

 

代码讲解

  • 在进行VOC数据集的类别标签分布和数量统计时,有以下几个需要注意的点:
  • 数据集路径:确保设置正确的数据集路径,指向包含XML文件的文件夹。
  • 标签统计:使用一个字典或其他适合的数据结构来存储每个标签及其对应的目标框数量。可以使用标签作为键,目标框数量作为值。
  • XML解析:使用适当的XML解析库(如xml.etree.ElementTree)解析XML文件。检查XML文件中的标签结构,并定位到目标框的位置信息。
  • 目标框位置信息:目标框通常由左上角和右下角的坐标表示(例如xmin、ymin、xmax、ymax)。确保正确提取这些坐标,并转换为适当的格式。
  • 统计目标框数量:根据目标框的位置信息,可以将它们映射到图像的像素块中,并在相应的像素块中递增目标框数量。这样就可以统计每个像素块中目标框的数量。
  • 绘制热力图:使用合适的可视化库(如matplotlib.pyplot)绘制热力图,以展示目标分布情况。热力图的颜色可以根据目标框数量的大小进行渐变。
  • 坐标轴和标题:设置适当的坐标轴标签和标题,以说明热力图的含义和解释。
  • 显示热力图:使用适当的函数(如plt.show())显示生成的热力图。
     
import os  # 导入os模块,用于文件操作
import xml.etree.ElementTree as ET  # 导入xml.etree.ElementTree模块,用于解析XML文件
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块,用于绘图
import numpy as np  # 导入numpy模块,用于科学计算
VOC数据集路径
dataset_path = 'Annotations/'
存储标签及其对应的目标框数量
label_counts = {}
图像的宽度和高度
image_width = 1280
image_height = 960
每个像素块的大小
block_size = 40
创建一个二维数组,用于存储每个块中目标框的数量
block_counts = np.zeros((image_height // block_size, image_width // block_size))
遍历数据集中的每个XML文件
 
i = 0
for filename in os.listdir(dataset_path):if filename.endswith('.xml'):# 解析XML文件tree = ET.parse(os.path.join(dataset_path, filename))root = tree.getroot()
    # 遍历XML文件中的所有目标框for obj in root.findall('object'):label = obj.find('name').text# 判断标签是否为'vehicle'if label == 'vehicle':# 获取目标框的坐标信息xmin = int(float(obj.find('bndbox/xmin').text))ymin = int(float(obj.find('bndbox/ymin').text))xmax = int(float(obj.find('bndbox/xmax').text))ymax = int(float(obj.find('bndbox/ymax').text))# 计算目标框的底部中心点坐标x_pixel = int((xmin + ymin) / 2)y_pixel = ymax# 将底部中心点映射到相应的像素块block_x = x_pixel // block_sizeblock_y = y_pixel // block_size# 统计该像素块中目标框的数量block_counts[block_y, block_x] += 1i += 1

绘制热力图

plt.imshow(block_counts, cmap='hot')
plt.colorbar()

设置坐标轴和标题

plt.xlabel('Blocks (50x50 pixels)')
plt.ylabel('Blocks (50x50 pixels)')
plt.title('Object Distribution Heatmap')

显示热力图 
plt.show()print(block_counts)
print("该标签有", i)#联系 qq 767172261

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

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

相关文章

查找算法(部分)

顺序查找 顺序查找是最简单的了&#xff0c;属于无序查找算法&#xff0c;它的原理就是从前往后一个一个的找&#xff0c;如果找到了就返回它的位置&#xff0c;否则就返回-1。 如果有多个相同元素的话&#xff0c;返回第一个该元素的位置。 代码&#xff1a; #include<…

在 CentOS 中,zip 是一个常用的命令行工具,用于创建和提取 zip 归档文件。

以下是一些常见的 zip 命令用法 创建 zip 归档文件&#xff1a; # 创建包含目录或文件的 zip 归档文件 zip -r archive.zip /path/to/directory_or_file# 创建并压缩 zip 归档文件 zip -r -9 archive.zip /path/to/directory_or_file -r: 递归地包含目录中的文件。-9: 使用最…

VCG 网格简化之移动立方体

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 我们先来回顾一下原始的移动立方体算法,该算法的基本思想是通过找出所有与等值面相交的体素,在这些基础上再分别找出每个体素与等值面相交的交面,最终将这些交面连在一起即是我们所求的曲面。其大致过程如下所述…

Vue3 中使用 Vuex 和 Pinia 对比之 Vuex的用法

本文基于 Vue3 的 composition API 来展开 Vuex 和 Pinia 的用法比较 Pinia传送门 Vuex传送门 Vuex 状态管理的核心概念 状态- 驱动应用的数据源&#xff1b;视图 - 以声明方式将状态映射到视图&#xff1b;操作 - 响应在视图上的用户输入导致的状态变化 下面是源自Vuex 官…

《LIO-SAM阅读笔记》IMU作用总结

LIO-SAM作为一个Lidar和IMU为主的紧耦合框架&#xff0c;两者缺一不可&#xff0c;这里总结一下LIO-SAM中IMU起到的作用&#xff1a; 1.利用当前帧Lidar里程计作为起点&#xff0c;结合IMU预积分&#xff0c;得到IMU里程计信息。 此处IMU里程计是以IMU的频率向外发送位姿估计&…

数据结构之二叉树简介

二叉树 二叉树是一种非线性数据结构&#xff0c;代表“祖先”与“后代”之间的派生关系&#xff0c;体现了“一分为二”的分治逻辑。与链表相似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含值&#xff0c;左子节点的索引&#xff0c;右子节点的索引 /* 二叉树节…

重建大师模型跑出来后,怎么替换另一个工程里面的瓦片?

答&#xff1a;如果只是看模型的话&#xff0c;可以直接把成果osgb合并在一起 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;…

进口零部件三维模型扫描替换抄数建模逆向造型设计服务CASAIM

三维扫描技术在现代制造业中发挥着越来越重要的作用&#xff0c;尤其在零部件建模领域&#xff0c;它能够快速、准确地获取物体的三维数据&#xff0c;为后续的逆向工程和快速原型制造提供了有力支持。 CASAIM三维扫描仪设备通过对零部件进行三维扫描&#xff0c;我们可以获得…

OpenHarmony4.0适配LVDS屏幕驱动

1.概述 手头有一块RK3568的开发板OK3568-C&#xff0c;但是还没有适配OpenHarmony&#xff0c;用的还是LVDS屏幕&#xff0c;但是官方和网上好像还没有OpenHarmony4.0的LVDS屏幕驱动的通用实现&#xff0c;所以决定尝试了一下适配该开发板&#xff0c;完成LVDS屏幕驱动的适配&…

OpenAIOps社区线上宣讲会圆满召开,期待您的加入!

2024年1月12日“OpenAIOps社区”线上宣讲会圆满召开&#xff0c;群体智慧协同创新社区的创立为AIOps领域未来发展注入了活力。OpenAIOps社区是一个AIOps开源社区及创新平台&#xff0c;由中国计算机学会(CCF)、清华大学、南开大学、中科院、国防科大、必示科技等单位共同发起&a…

OC协议和分类

前言 本篇文章介绍OC的分类和协议 分类 分类是这样一种设计&#xff0c;对于一个已经存在的类A&#xff0c;这个类可能是自己写的&#xff0c;或者是第三方的&#xff0c;甚至是系统提供的。这个类对我们很有用&#xff0c;但是&#xff0c;我们有些想要的功能在这个类里却没…

Qt 三维柱状图 Q3DBar 和 三维条形图中的数据序列 QBar3DSeries

(一) 使用 Q3DBars 图形类和 QBar3DSeries 序列类可以绘制三维柱状图 窗口右侧是用 Q3DBars 和 QBar3DSeries 绘制的三维柱状图&#xff0c;这个图只有一个QBar3DSeries序列&#xff0c;数据是按行存储的&#xff0c;可以有多行。水平方向是行坐标轴和列坐标轴&#xff0c;使用…

Windows安装和使用kafka

一、安装kafka 由于kafka依赖jdk和zookeeper&#xff0c;安装kafka之前需要先安装jdk和zookeeper&#xff0c;也可以使用kafka自带的zookeeper。安装jdk可以参考&#xff1a;Windows和Linux安装jdk&#xff0c;此处使用kafka自带的zookeeper&#xff0c;不单独安装。 下面在Wi…

VUE2/3:element ui table表格的显隐列(若依框架)

若依框架自带一个组件&#xff0c;封装了关于表格&#xff0c;展示和隐藏表格列的功能&#xff1b; 使用效果就是这样的&#xff0c;在表格上面&#xff0c;三个框&#xff0c;从左到右分别是隐藏上面搜索&#xff0c;刷新列表&#xff0c;和显隐列的功能&#xff1b; 一、下面…

每日一题 82. 删除排序链表中的重复元素 II(中等,链表)

和昨天差不多&#xff0c;今天的是把所有重复数字的节点都删除&#xff08;昨天留了一个&#xff09; 显然当我们发现重复数字时&#xff0c;需要重复的第一个数字的前一个节点才能把重复数字删完&#xff0c;所有在while循环中我们每次判断 t.next 和 t.next.next 的值是否重复…

MySQL运维实战(4.1) MySQL表存储引擎

作者&#xff1a;俊达 MySQL表的特点 MySQL是一种开源的关系型数据库管理系统&#xff0c;与Oracle、SQL Server等数据库相比&#xff0c;有两个关键的特点&#xff1a; 存储引擎灵活性&#xff1a; MySQL的插件式存储引擎使得用户可以根据具体需求选择不同的引擎&#xff0…

互联网今年都崩盘了gis开发还有前途嘛?

互联网和GIS其实分不开的&#xff0c;尤其是在新兴技术领域。 互联网行业都已经在进军测绘、GIS以及智慧城市、无人驾驶等行业&#xff0c;随着高新技术的发展&#xff0c;互联网和GIS其实结合会越来越紧密。 传统互联网行业已经不能满足大众需求&#xff0c;近十年&#xff…

安装LibreOffice 解决soffice command was not found. Please install libreoffice

速览 1.安装原因1.准备文件1.1下载文件1.2解压文件 2.安装文件3.尝试运行3.1环境变量配置3.2安装附加依赖libxinerama13.3安装附加依赖libcairo23.4安装附加依赖libxt6 4.命令安装好像不行 1.安装原因 在使用LangChain框架时产生错误&#xff1a; soffice command was not fo…

TypeScript基础知识:模块化和命名空间

在现代的软件开发中&#xff0c;模块化和命名空间是构建可维护、可扩展和可重用代码的关键概念。TypeScript 提供了强大的支持来帮助我们组织和管理代码&#xff0c;本文将深入探讨 TypeScript 中的模块化和命名空间&#xff0c;并提供示例代码来帮助读者更好地理解这些概念。 …

如何应对Android面试官->我用RecyclerView实现了吸顶效果

前言 RecyclerView 计划用两个章节来讲解&#xff0c;今天主要是以 itemDecoration 和 实现吸顶效果为主&#xff1b; ItemDecoration ItemDecoration 允许应用给具体的 View 添加具体的图画或者 Layout 的偏移&#xff0c;对于绘制 View 之间的分割线&#xff0c;视觉分组边…