天天看點

資料集label的統計分布

在訓練模型前,需要知道資料集與标注的分布情況。看看有沒有标注缺失的圖像,做标注補全;類别數量不平衡的話,也要做相應的資料預處理,否則模型訓練的效果不好。是以需要統計資料集的标注數量【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())
           

可視化各個類别的标注數量,更直覺看到标注分布情況。

資料集label的統計分布

繼續閱讀