YOLO系列之统计各类型标签数量

YOLO系列之统计各类型标签数量


一句话总结:本文用于统计 YOLOv8格式数据集中各类型 标签数量

前言

本系列的其他博客——YOLO系列之数据集划分(以YOLOv8为例),有需要可以参考。

YOLO系列数据集格式

在数据集中,图像文件存放于images目录下,对应的YOLO格式的txt标签文件要存放于labels目录下,而且要在imageslabels目录下分别建立train训练集、valid验证集、test
测试集(可选,但强烈建议要有!)子目录,如下展示:

dataset
	- images
		- train
			- 1.jpg
			- 5.jpg # 因为要随机划分,所以数字是随机写的,下面也一样
			-  ... 
		- valid
			- 2.jpg
			- 7.jpg
			-  ...
		- test
			- 3.jpg
			- 9.jpg
			- ...
	- labels
		- train
			- 1.txt
			- 5.txt
			-  ... 
		- valid
			- 2.txt
			- 7.txt
			-  ...
		- test
			- 3.txt
			- 9.txt
			- ...

实际目录如下图:
YOLOv8格式数据集

代码实现

以下代码可以直接复制运行(只需要修改root路径

本代码会输出训练集train、验证集valid和测试集test中各类型标签数量,格式为数据集(如train) done! labels_count: {'标签编号如(0)': 标签数量},如果是多目标的话,则为数据集(如train) done! labels_count: {'0': 111, ‘1’:222, '2':333}
最后输出总的数量:all sets done! labels_count: {'标签编号如(0)': 标签数量}
代码如下:

import os
def labels_count(root):
    '''
    统计数据集中每个类别的数量
    args:
        root:yolog格式数据集的label路径
    return:
        labels_count:数据集中每个类别的数量
    '''
    labels_count = {}
    for dir in os.listdir(root):
        labels_dir_count = {}
        if dir in ['train', 'valid', 'test']:
            label_dir = os.path.join(root, dir)
            label_files = os.listdir(label_dir)  # 展示目标文件夹下所有的文件名
            label_files = list(filter(lambda x: x.endswith('.txt'), label_files))  # 取到所有以.txt结尾的yolo格式文件
            for label_file in label_files:
                with open(os.path.join(label_dir, label_file), 'r') as f:
                    lines = f.readlines()
                for line in lines:
                    line = line.strip().split()
                    class_name = line[0]
                    if class_name in labels_count:
                        labels_count[class_name] += 1
                    else:
                        labels_count[class_name] = 1
                    if class_name in labels_dir_count:
                        labels_dir_count[class_name] += 1
                    else:
                        labels_dir_count[class_name] = 1
            print(f'{dir} done!', 'labels_count:', labels_dir_count)

    return labels_count

if __name__ == '__main__':
    root = r'dataset\labels' # dataset为你的YOLOv8格式的数据集
    labels_cnt = labels_count(root)
    print('all sets done! labels_count:', labels_cnt)

在我的数据集上输出如下:

test done! labels_count: {'0': 874}
train done! labels_count: {'0': 7027}
valid done! labels_count: {'0': 869}
all sets done! labels_count: {'0': 8770}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值