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

数据集拆分后如何按对应文件名匹配加载图像?

解决方法

核心思路是先获取目标子集(如验证集)实际存在的文件名,再与CSV中的标签匹配,避免遍历全部8327个文件。以下是具体实现步骤:

1. 提取子集的实际文件名

先读取output/val/stenosis文件夹里的所有图像文件名,确保只处理该子集真实存在的文件:

import os

# 验证集图像目录
val_img_dir = r'C:\Users\conm\Desktop\Stenosis-Project\output\val\stenosis'
# 获取目录下所有文件(排除子文件夹)
val_existing_filenames = [f for f in os.listdir(val_img_dir) if os.path.isfile(os.path.join(val_img_dir, f))]

2. 构建文件名到边界框标签的映射

把CSV数据转换成字典,用文件名作为键、边界框标签作为值,实现快速匹配:

# 假设你的labels是包含filename和bbox列的DataFrame
filename_to_bbox = labels.set_index('filename')['bbox'].to_dict()

3. 加载匹配的图像与标签

遍历验证集的实际文件名,只加载在CSV中有对应标签的图像,同时关联边界框:

import cv2
import numpy as np

val_images = []
val_bboxes = []

for fname in val_existing_filenames:
    # 检查当前文件名是否在CSV标签中
    if fname in filename_to_bbox:
        img_path = os.path.join(val_img_dir, fname)
        img = cv2.imread(img_path)
        # 跳过加载失败的损坏图像
        if img is not None:
            val_images.append(img)
            val_bboxes.append(filename_to_bbox[fname])

# 按需转成numpy数组
val_images_np = np.array(val_images)
val_bboxes_np = np.array(val_bboxes)

额外优化:处理文件名大小写不匹配

如果CSV与文件夹中的文件名存在大小写差异(如test.jpg vs TEST.JPG),可以统一转小写避免匹配失败:

# 统一文件名大小写
val_filenames_lower = [f.lower() for f in val_existing_filenames]
filename_to_bbox_lower = {k.lower(): v for k, v in filename_to_bbox.items()}

# 调整加载逻辑
val_images = []
val_bboxes = []

for fname in val_existing_filenames:
    fname_lower = fname.lower()
    if fname_lower in filename_to_bbox_lower:
        img_path = os.path.join(val_img_dir, fname)
        img = cv2.imread(img_path)
        if img is not None:
            val_images.append(img)
            val_bboxes.append(filename_to_bbox_lower[fname_lower])

原有代码问题说明

你之前的代码是遍历CSV中的所有8327个文件名,不管val文件夹中是否存在该文件,导致大量不存在的文件被尝试加载(返回None)。现在的方法是先拿子集实际存在的文件,再匹配标签,确保只加载目标子集的有效图像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:09:24