You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

视频提取图像数据的类别不平衡检测与处理方法咨询

类别不平衡检测与预处理相关问题解答

一、是否属于图像预处理的首要步骤?

类别不平衡检测属于**数据探查(Data Exploration)**环节,是预处理前的关键步骤,但并非绝对的“首要”——通常预处理的第一步是数据清洗,比如剔除模糊、损坏、无法读取的图像。不过数据探查必须紧跟清洗之后,只有确保数据可用,分析分布才有意义。如果类别不平衡问题严重,后续的采样策略、模型损失调整都要以此为依据,所以这个环节必不可少。

二、自动化检测类别不平衡的方法与工具库

1. 基础Python实现(无需额外库)

如果图像按类别分文件夹存放(比如class0/、class1/分别存储对应类别图像),直接用os模块统计即可:

import os

# 定义类别文件夹路径
class_dirs = {
    "class0": "./data/class0",
    "class1": "./data/class1"
}

class_counts = {}
# 遍历每个类别文件夹,统计有效图像数量
for cls_name, dir_path in class_dirs.items():
    valid_ext = ('.jpg', '.png', '.jpeg')
    img_count = sum(1 for file in os.listdir(dir_path) if file.lower().endswith(valid_ext))
    class_counts[cls_name] = img_count

# 计算不平衡比例
imbalance_ratio = class_counts["class0"] / class_counts["class1"]
print(f"类别样本数:{class_counts}")
print(f"class0与class1的不平衡比例:{imbalance_ratio:.2f}")

2. Pandas快速统计(适用于带标签文件的场景)

如果有标签文件(比如CSV格式,包含图像路径和对应类别),用Pandas统计更高效:

import pandas as pd

# 读取标签文件
label_df = pd.read_csv("image_labels.csv")
# 统计每个类别的样本量
class_dist = label_df["class_label"].value_counts()
print("类别分布统计:")
print(class_dist)
# 计算不平衡比例
imbalance_ratio = class_dist.loc[0] / class_dist.loc[1]
print(f"不平衡比例:{imbalance_ratio:.2f}")

3. 深度学习框架内置方法

不管用TensorFlow还是PyTorch,都可以在自定义数据集类中嵌入统计逻辑:

from torch.utils.data import Dataset
from PIL import Image

class VideoImageDataset(Dataset):
    def __init__(self, img_paths, labels):
        self.img_paths = img_paths
        self.labels = labels
        # 统计类别数量
        self.class_counts = {
            0: labels.count(0),
            1: labels.count(1)
        }
    
    def __len__(self):
        return len(self.img_paths)
    
    def __getitem__(self, idx):
        try:
            img = Image.open(self.img_paths[idx]).convert("RGB")
            label = self.labels[idx]
            return img, label
        except Exception as e:
            print(f"读取图像失败:{self.img_paths[idx]},错误信息:{e}")
            return None, None

# 假设已有图像路径列表img_paths和标签列表labels
dataset = VideoImageDataset(img_paths, labels)
print("类别样本数:", dataset.class_counts)

三、补充建议

  • 一般当类别不平衡比例超过4:1时,就需要针对性处理,比如你了解的下采样(减少class0样本)、上采样(复制或生成class1样本),或者给模型设置加权损失函数(给class1样本更高的损失权重);
  • 统计时记得校验图像有效性,避免把损坏文件计入样本数,比如在代码中加入异常捕获逻辑。

内容的提问来源于stack exchange,提问作者Lily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:23:15