數據集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())

可視化各個類別的標註數量,更直觀看到標註分佈情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章