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

Python如何为文件夹内图像分配对应标签并加载送入模型

病理切片图像数据集加载代码修复方案

问题背景

  • 数据集结构:根目录下的tiles文件夹存放所有患者的切片数据,每个独立子文件夹对应1名患者,子文件夹内存放该患者的多张病理切片JPG图像;COAD_CMS_label.csv文件记录每个患者子文件夹名称与对应的CMS_Subtype分类标签
  • 图像命名规则:单张图像的文件名和所属父文件夹的名称主体完全一致,仅文件名末尾方括号[]包裹的切片参数(倍率、坐标、裁切尺寸等)为可变内容
  • 现存问题:原有代码路径拼接处错误使用[*/*]写法,无法正确匹配文件路径,且逻辑未实现「单个文件夹标签同步分配给目录下所有图像」的需求,无法正常生成模型可用的训练/测试数据集

原错误实现代码

data = pd.read_csv("COAD_CMS_label.csv")
training_data, testing_data = train_test_split(data, test_size=0.25, random_state=25)
y = data['CMS_Subtype']

#add all the training images, store them in a list, and finally convert that list into a numpy array
train_image = []
for i in tqdm(range(data.shape[0])):
    img = image.load_img('tiles/'+training_data['folder_name'][i]+ [*/*] +'.jpg', target_size=(256,256,3), 
                         grayscale=False)
    img = image.img_to_array(img)
    img = img/255
    train_image.append(img)
X = np.array(train_image)

错误原因说明

  • Python原生字符串拼接不识别Shell风格的[*/*]通配规则,无法自动匹配可变的文件名片段
  • 循环逻辑错误:训练集拆分后仍使用全量数据集的长度做循环索引,会出现索引越界、训练样本匹配错位的问题
  • 逻辑不符合数据集结构:每次循环仅尝试读取1张图像,没有处理单个文件夹下多张图像的场景,也未给所有图像分配对应标签

修复后可运行代码

import os
import glob
import numpy as np
import pandas as pd
from tqdm import tqdm
from sklearn.model_selection import train_test_split
from tensorflow.keras.preprocessing import image

# 读取标签映射表
data = pd.read_csv("COAD_CMS_label.csv")
# 按标签分层拆分训练集、测试集,保证两部分标签分布一致
train_df, test_df = train_test_split(
    data, 
    test_size=0.25, 
    random_state=25,
    stratify=data['CMS_Subtype']
)

def load_dataset(label_df, img_root="tiles", target_img_size=(256,256,3)):
    """
    遍历标签表对应所有患者文件夹,加载图像并做归一化预处理,返回图像数组和对应标签
    """
    img_arrays = []
    img_labels = []
    # 逐行遍历患者标签记录
    for _, row in tqdm(label_df.iterrows(), total=len(label_df)):
        folder = row['folder_name']
        cms_type = row['CMS_Subtype']
        # 匹配当前患者文件夹下所有jpg图像,自动适配方括号内的可变参数部分
        match_pattern = os.path.join(img_root, folder, f"{folder}*.jpg")
        all_img_paths = glob.glob(match_pattern)
        # 逐张加载预处理图像,绑定对应标签
        for path in all_img_paths:
            img = image.load_img(path, target_size=target_img_size, grayscale=False)
            img = image.img_to_array(img) / 255.0
            img_arrays.append(img)
            img_labels.append(cms_type)
    return np.array(img_arrays), np.array(img_labels)

# 生成模型可用的训练、测试数据
X_train, y_train = load_dataset(train_df)
X_test, y_test = load_dataset(test_df)

关键修复点

  • 替换错误的[*/*]路径写法:使用Python标准库glob实现文件名模糊匹配,匹配规则设为文件夹名*.jpg,自动兼容文件名末尾方括号内的可变切片参数,不需要手动截取字符串
  • 修正循环索引逻辑:拆分训练、测试集后直接遍历拆分后的数据表记录,不再使用全量数据长度做循环,避免索引越界和样本错配
  • 实现多图像自动标签分配:读取到单个患者的CMS标签后,给该文件夹下所有匹配到的图像绑定同一标签,符合数据集的标注逻辑
  • 训练测试拆分新增stratify参数做分层抽样,避免训练、测试集的标签分布出现偏移,影响模型训练效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:12:41