【统计数据集GT的分布情况】

news/2024/11/8 6:37:37/
# 1、统计数据集中小、中、大 GT的个数
# 2、统计某个类别小、中、大 GT的个数
# 3、统计数据集中ss、sm、sl GT的个数
import os
from pathlib import Path
import matplotlib.pyplot as plt# 设置中文字体为微软雅黑
plt.rcParams['font.sans-serif'] = 'SimHei'def getGtAreaAndRatio(label_dir):"""得到不同尺度的gt框个数:params label_dir: label文件地址:return data_dict: {dict: 3}  3 x {'类别':{’area':[...]}, {'ratio':[...]}}"""data_dict = {}assert Path(label_dir).is_dir(), "label_dir is not exist"txts = os.listdir(label_dir)  # 得到label_dir目录下的所有txt GT文件for txt in txts:  # 遍历每一个txt文件with open(os.path.join(label_dir, txt), 'r') as f:  # 打开当前txt文件 并读取所有行的数据lines = f.readlines()for line in lines:  # 遍历当前txt文件中每一行的数据temp = line.split()  # str to list{5}coor_list = list(map(lambda x: x, temp[1:]))  # [x, y, w, h]area = float(coor_list[2]) * float(coor_list[3])  # 计算出当前txt文件中每一个gt的面积# center = (int(coor_list[0] + 0.5*coor_list[2]),#           int(coor_list[1] + 0.5*coor_list[3]))ratio = round(float(coor_list[2]) / float(coor_list[3]), 2)  # 计算出当前txt文件中每一个gt的 w/hif temp[0] not in data_dict:data_dict[temp[0]] = {}data_dict[temp[0]]['area'] = []data_dict[temp[0]]['ratio'] = []data_dict[temp[0]]['area'].append(area)data_dict[temp[0]]['ratio'].append(ratio)return data_dictdef getSMLGtNumByClass(data_dict, class_num):"""计算某个类别的小物体、中物体、大物体的个数params data_dict: {dict: 3}  3 x {'类别':{’area':[...]}, {'ratio':[...]}}params class_num: 类别  0, 1, 2return s: 该类别小物体的个数  0 < area <= 32*32m: 该类别中物体的个数  32*32 < area <= 96*96l: 该类别大物体的个数  area > 96*96"""s, m, l = 0, 0, 0for item in data_dict['{}'.format(class_num)]['area']:if item * 640 * 640 <= 32 * 32:s += 1elif item * 640 * 640 <= 96 * 96:m += 1else:l += 1return s, m, ldef getAllSMLGtNum(data_dict):"""数据集所有类别小、中、大GT分布情况"""S, M, L = 0, 0, 0for i in range(3):s, m, l = getSMLGtNumByClass(data_dict, i)S += sM += mL += lreturn [S, M, L]def analyAllSmallGt(data_dict):ss, sm, sl = 0, 0, 0for c in range(3):for item in data_dict['{}'.format(c)]['area']:if item * 640 * 640 <= 8 * 8:ss += 1elif item * 640 * 640 <= 16 * 16:sm += 1elif item * 640 * 640 <= 32 * 32:sl += 1return [ss, sm, sl]# 画图函数
def plotAllSML(SML):x = ['S:[0, 32x32]', 'M:[32x32, 96x96]', 'L:[96*96, 640x640]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, SML, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, SML, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(SML[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手病虫害训练集小、中、大GT分布情况(640x640)', fontsize=16)plt.show()# 保存到本地# plt.savefig("")def plotSMLByClass(sml, c):if c == 0:txt = '白粉病'elif c == 1:txt = '潜叶蛾'elif c == 2:txt = '炭疽病'x = ['S:[0, 32x32]', 'M:[32x32, 96x96]', 'L:[96*96, 640x640]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, sml, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, sml, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(sml[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手{}小、中、大GT分布情况(640x640)'.format(txt), fontsize=16)plt.show()# 保存到本地# plt.savefig("")def plotAllSmallGt(sml):x = ['ss:[0, 8x8]', 'sm:[8x8, 16x16]', 'sl:[16x16, 32x32]']fig = plt.figure(figsize=(10, 8))  # 画布大小和像素密度plt.bar(x, sml, width=0.5, align="center", color=['skyblue', 'orange', 'green'])for a, b, i in zip(x, sml, range(len(x))):  # zip 函数plt.text(a, b + 0.01, "%d" % int(sml[i]), ha='center', fontsize=15, color="r")  # plt.text 函数plt.xticks(fontsize=15)plt.yticks(fontsize=15)plt.xlabel('gt大小', fontsize=16)plt.ylabel('数量', fontsize=16)plt.title('广佛手ss、sm、sl GT分布情况(640x640)', fontsize=16)plt.show()# 保存到本地# plt.savefig("")if __name__ == '__main__':labeldir = '../../datasets/pest/labels/train'data_dict = getGtAreaAndRatio(labeldir)# 1、数据集所有类别小、中、大GT分布情况# SML = getAllSMLGtNum(data_dict)# plotAllSML(SML)# 2、数据集某个类别小中大GT分布情况# 0: 白粉病 powdery_mildew# 1: 潜叶蛾 leaf_miner# 2: 炭疽病 anthracnose# c = 2# sml = getSMLGtNumByClass(data_dict, c)# plotSMLByClass(sml, c)# a(data_dict)# 3、分析所有小目标样本的一个分布# ss: 0<area<8x8  sm: 8x8<area<16x16  sl: 16x16<area<32x32# l = analyAllSmallGt(data_dict)# plotAllSmallGt(l)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/476608.html

相关文章

图像识别-pytorch-Figure size 640x480 with 1 Axes

<Figure size 640x480 with 1 Axes>解决方案&#xff1a; plt.figure()参见&#xff1a; https://blog.csdn.net/qq_18246731/article/details/89380468

关于IRF640PBF

2019独角兽企业重金招聘Python工程师标准>>> 关于IRF640PBF 描述 Vishay的第三代Power MOSFE Ts为设计人员提供了快速开关hing&#xff0c;坚固耐用的器件设计&#xff0c;低导通电阻和成本效益的最佳组合。 TO-220封装是所有商用工业应用的首选&#x…

Java 处理 XML的四种方法 --amp;gt;附:XmlUtils

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节…

dell 服务器硬盘购买,戴尔_PowerEdge T640_塔式存储服务器_网络存储服务器_在线购买 | Dell 中国大陆...

英特尔至强银牌 4210 2.2G, 10C/20T, 9.6GT/s, 13.75M 缓存, Turbo, HT (85W) DDR4-2400 英特尔 至强 银牌 4210R 2.4G, 10C/20T, 9.6GT/s, 13.75M 缓存, Turbo, HT (100W) DDR4-2400 英特尔 至强 银牌 4214R 2.4G, 12C/24T, 9.6GT/s, 16.5M 缓存, Turbo, HT (100W) DDR4-2400 …

ubuntu系统分辨率只有640*480的解决办法,适用部分正方形屏幕

参考链接&#xff1a; https://blog.csdn.net/chenguizhenaza/article/details/100131944 详细步骤如下&#xff1a; 1.打开&#xff1a;sudo gedit /etc/default/grub 2.搜索&#xff1a;#GRUB_GFXMODE640x480编辑&#xff1a;640x480 3.改成你想要的分辨率&#xff0c;并取消…

ThinkServer RD640 设置RAID1

ctrlH进设置页面 点击Configuration Wizard 先清除之前配置 Clear Configuration -->点击YES 点击Configuration Wizard Add Configuration-->next-->Manual Configuraton-->next 从左边选择硬盘 点击Add To Array 添加到右边列表 蓝色-->绿色 点击右边Accep…

android 驱动之 camera 驱动 GT2005

关键词&#xff1a;Android camera CMM 模组 camera参数 GT2005 摄像头常见问题 平台信息: 内核&#xff1a;linux 系统&#xff1a;android 平台&#xff1a;S5PV310(samsung exynos 4210) 作者&#xff1a;xubin341719(欢迎转载&#xff0c;请注明作者) android camera(…

【SA-SSD】点云数据和gt_bbox可视化

文章目录 一. 使用mayavi原因二. 读取bin文件显示1. 代码2. 结果 三. SA-SSD中点云和gt_bboxs显示1. 准备工作2. 代码2. 结果 一. 使用mayavi原因 由于torch和open3d冲突&#xff0c;使用torch的时候open3d就使用不了&#xff0c;但是我还是想看一下可视化的点云数据&#xff…