数据集label的统计分布
程序员文章站
2022-06-21 14:50:59
...
在训练模型前,需要知道数据集与标注的分布情况。看看有没有标注缺失的图像,做标注补全;类别数量不平衡的话,也要做相应的数据预处理,否则模型训练的效果不好。因此需要统计数据集的标注数量【num_anno】,类别数量【num_classes】,及各个类别标注的分布【num_label】。以xml标注文件为例,获取各类别的标签数据分布。
import xml.dom.minidom
import os,sys
import matplotlib.pyplot as plt
rootdir = '../mmdetection/data/abn/VOCdevkit/VOC2012/Annotations/'
doc_xml = os.listdir(rootdir)
print('num_anno', len(doc_xml))
classes_list = []
num_label = {}
for i in range(0,len(doc_xml)):
path = os.path.join(rootdir,doc_xml[i])
if os.path.isfile(path):
#打开xml文档
dom = xml.dom.minidom.parse(path)
#得到dom元素的label
root = dom.documentElement
label=dom.getElementsByTagName('name')
for i in range(len(label)):
c1 = label[i]
class_name = c1.firstChild.data
#列表中不存在则存入列表
if classes_list.count(class_name)==0:
classes_list.append(class_name)
num_label[class_name] = 0
num_label[class_name] += 1
print('num_classes', len(classes_list))
print('num_label', num_label)
plt.bar(range(len(num_label.keys())), num_label.values(), color='skyblue', tick_label=num_label.keys())
可视化各个类别的标注数量,更直观看到标注分布情况。
推荐阅读