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

语义分割任务中如何筛选含目标特征的非全黑掩码?

语义分割含目标样本筛选实现思路

默认你的数据集采用图像、掩码分文件夹存储,两者文件名一一对应的常规组织格式,若命名规则有差异按需调整匹配逻辑即可。

核心实现逻辑

  • 遍历掩码文件夹下的所有掩码文件,提取文件名用于匹配对应原图
  • 加载单张掩码后,直接通过数组判断是否存在待分割目标的像素值(你的场景为像素值=1),无需逐像素遍历,效率更高
  • 将符合条件(含目标)的掩码和对应原图,分别拷贝到新的独立文件夹,避免修改原始数据集
  • 可选:将筛选后的文件名列表导出为csv文件,后续训练直接读取列表即可,无需重复执行筛选逻辑

Python 实现示例

依赖第三方库:numpy、Pillow,可通过pip install numpy pillow安装

import os
import numpy as np
from PIL import Image
import shutil

# 路径配置,按需修改为你的本地路径
MASK_FOLDER = "./data/masks"
IMAGE_FOLDER = "./data/images"
SAVE_MASK_FOLDER = "./data/filtered_masks"
SAVE_IMAGE_FOLDER = "./data/filtered_images"

# 自动创建输出文件夹
os.makedirs(SAVE_MASK_FOLDER, exist_ok=True)
os.makedirs(SAVE_IMAGE_FOLDER, exist_ok=True)

# 遍历所有掩码
for mask_file in os.listdir(MASK_FOLDER):
    # 跳过非图片格式文件
    if not mask_file.lower().endswith(("png", "jpg", "jpeg")):
        continue
    # 加载掩码转为numpy数组
    mask_arr = np.array(Image.open(os.path.join(MASK_FOLDER, mask_file)))
    # 判断是否存在目标像素(像素值为1)
    if np.any(mask_arr == 1):
        # 匹配对应原图,若命名规则不同可修改此处匹配逻辑
        # 示例为掩码和原图同名,仅后缀不同,按需调整
        img_file = mask_file.rsplit(".", 1)[0] + ".jpg"
        # 拷贝符合要求的文件到目标文件夹
        shutil.copy2(
            os.path.join(MASK_FOLDER, mask_file),
            os.path.join(SAVE_MASK_FOLDER, mask_file)
        )
        shutil.copy2(
            os.path.join(IMAGE_FOLDER, img_file),
            os.path.join(SAVE_IMAGE_FOLDER, img_file)
        )

优化建议

  • 若数据集规模极大,可提前读取所有文件名,用多进程并行加载判断掩码,提升筛选速度
  • 若你的掩码存在多类目标,修改np.any(mask_arr == 1)中的判断条件即可,比如筛选同时包含类别1和类别2的样本可以写np.any(mask_arr ==1) and np.any(mask_arr ==2)
  • 筛选后仍存在类别不平衡问题的话,可以搭配加权损失、过采样少量类等方法进一步优化训练效果

内容的提问来源于stack exchange,提问作者PietroB.A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:04