Python统计标签个数

深度学习中的图像处理,包含多个标签的数据集,往往存在类别不平衡的问题,这样会导致训练模型准确率低的问题,因此有必要统计,各个类别图片标签个数,以及所占的比例。
举例:现有标签文件train.txt,内容如下:
/data/train/1.jpg 4
/data/train/88.jpg 2
/data/train/455.jpg 1
/data/train/764.jpg 3
/data/train/64.jpg 4

code:

def count_label(data):
    total = 0
    ratio = 0.0
    data_dict = {}

    file = open(data,'r')
    lines = file.readlines()

    for line in lines:
        content = line.strip().split()
        label = content[1]

        # 将标签和标签所对应的图片数目统计为dict格式:{label:num_label}
        if label not in data_dict:
            data_dict[label] = 0
        data_dict[label] = data_dict[label] + 1

    # 统计标签的总数目
    for val in data_dict.values():
        total += val

    # 计算每个标签所占的比例ratio,并将原来dict中的num_label替换为ratio,即{label:ratio}
    for key,val in data_dict.items():
        ratio = float(val/total)
        data_dict[key] = ratio
        
    return data_dict

count_label_dict = count_label('train.txt')
print(count_label_dict)
### 统计YOLO格式标签文件中每个类别样本数量 为了统计YOLO格式标注文件中的各个类别的样本数量,可以通过读取这些标注文件并解析其中的内容来完成。通常情况下,YOLO格式的标注文件是以`.txt`形式存在,每一行代表一个边界框,其格式如下: ``` <class_id> <x_center> <y_center> <width> <height> ``` 下面是一个完整的Python脚本来实现这一功能。 #### 导入必要的库 ```python import os from collections import Counter ``` #### 定义统计函数 定义一个名为 `count_classes_in_yolo_format` 的函数,该函数接收YOLO标签所在的路径作为参数,并返回一个字典,键为类别ID,值为对应的数量。 ```python def count_classes_in_yolo_format(labels_directory): class_counts = Counter() # 遍历指定目录下的所有 .txt 文件 for filename in os.listdir(labels_directory): if filename.endswith(".txt"): file_path = os.path.join(labels_directory, filename) with open(file_path, 'r') as f: lines = f.readlines() for line in lines: parts = line.strip().split(' ') class_id = int(parts[0]) class_counts[class_id] += 1 return dict(class_counts) ``` 此部分代码遍历给定目录下所有的 `.txt` 文件,逐行读取内容并将每行的第一个数值视为类别编号进行累加计算[^1]。 #### 使用示例 假设 YOLO 标签存储在一个叫做 `./data/yolo_labels/` 的文件夹内,则可以这样调用上述函数: ```python if __name__ == "__main__": labels_dir = './data/yolo_labels/' result = count_classes_in_yolo_format(labels_dir) print("Class counts:", result) ``` 这段程序会打印出每一个类别及其出现次数的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值