当你需要统计训练数据中每个类别标签有多少,并且想知道坐标中心分布在图像的位置信息时,你可以利用一下脚本进行计算!
要绘制热力图来分析VOC数据的分布统计,可以按照以下步骤进行:
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').text
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_size
block_y = y_pixel // block_size
# 统计该像素块中目标框的数量
block_counts[block_y, block_x] += 1
i+=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数据集的类别标签分布和数量统计时,有以下几个需要注意的点:
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模块,用于科学计算
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))
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_size
block_y = y_pixel // block_size
# 统计该像素块中目标框的数量
block_counts[block_y, block_x] += 1
i += 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 1309399183