目标检测-根据YOLO格式标签统计目标尺寸分布

YOLO 标签是标准格式如下:

复制代码
class_id x_center y_center width height

其中**width** 和**height** 是归一化后的比例值,那么要按照 COCO 的标准统计目标尺寸,必须结合对应图像的实际分辨率计算目标面积。

COCO 数据集尺寸划分定义:

  • Small:面积 < 32² = 1024 px²
  • Medium:32² ≤ 面积 < 96² = 9216 px²
  • Large:面积 ≥ 96² = 9216 px²

代码如下:

python 复制代码
import os
import cv2
from tqdm import tqdm

# ==========================
# 配置路径
# ==========================
label_dir = r"D:\Documents\Datasets\FLIR-ALIGN\FLIR-ALIGN\labels\train"   # YOLO标签目录
image_dir = r"D:\Documents\Datasets\FLIR-ALIGN\FLIR-ALIGN\thermal-images\train"   # 对应图像目录
# ==========================


def find_image(img_dir, file_name):
    """
    根据标签名寻找对应图像
    """
    exts = [".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff"]

    for ext in exts:
        img_path = os.path.join(img_dir, file_name + ext)
        if os.path.exists(img_path):
            return img_path

    return None


small_count = 0
medium_count = 0
large_count = 0

label_files = [f for f in os.listdir(label_dir) if f.endswith(".txt")]

for label_file in tqdm(label_files):

    base_name = os.path.splitext(label_file)[0]

    img_path = find_image(image_dir, base_name)

    if img_path is None:
        print(f"未找到对应图像: {base_name}")
        continue

    img = cv2.imread(img_path)

    if img is None:
        print(f"图像读取失败: {img_path}")
        continue

    h_img, w_img = img.shape[:2]

    label_path = os.path.join(label_dir, label_file)

    with open(label_path, "r", encoding="utf-8") as f:
        lines = f.readlines()

    for line in lines:

        parts = line.strip().split()

        if len(parts) != 5:
            continue

        _, xc, yc, w, h = map(float, parts)

        # 转换为像素尺寸
        box_w = w * w_img
        box_h = h * h_img

        area = box_w * box_h

        # COCO标准
        if area < 32 * 32:
            small_count += 1

        elif area < 96 * 96:
            medium_count += 1

        else:
            large_count += 1


total = small_count + medium_count + large_count

print("\n========== COCO目标尺寸统计 ==========")
print(f"Small  (<32²)      : {small_count}")
print(f"Medium (32²~96²)   : {medium_count}")
print(f"Large  (>96²)      : {large_count}")
print("--------------------------------------")
print(f"Total              : {total}")

if total > 0:
    print("\n比例:")
    print(f"Small  : {small_count/total*100:.2f}%")
    print(f"Medium : {medium_count/total*100:.2f}%")
    print(f"Large  : {large_count/total*100:.2f}%")

代码只需要修改label_dir和image_dir即可

输出示例:

相关推荐
知识燃料1 分钟前
企业技术决策者落地 AI Agent 体系,AWS 中国峰会有哪些战略与工程内容可看?
大数据·人工智能
一个王同学7 分钟前
从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
人工智能·深度学习·机器学习·计算机视觉·ocr
Canace10 分钟前
笔记本都合上了,Claude 为什么还能在手机上执行电脑上装的技能?
前端·人工智能·ai编程
u01030552710 分钟前
昇腾+AtomGit打造AI甘特图应用生产线
人工智能
美狐美颜SDK开放平台11 分钟前
第三方美颜SDK接入教程:直播APP实现实时美颜、滤镜与美型效果的方法
人工智能·深度学习·音视频·sdk·美颜sdk·视频美颜sdk·直播app开发
乱世刀疤11 分钟前
AI Weekly 8.3-8.9
人工智能
AI导出鸭12 分钟前
怎么让豆包做表格?AI导出鸭苹果版将豆包输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
霸道流氓气质2 小时前
普通办公电脑基于 Ollama 的本地 AI 能力技术文档
人工智能·电脑
点云-激光雷达-Slam-三维牙齿2 小时前
速度起飞 笔记本电脑6G显卡llama运行Qwen3.6 35BA3B MTP 大模型
人工智能·python·电脑·llama
Shockang7 小时前
AI 智能体安全沙盒实战
人工智能