python深度学习图像处理CSV文件分类标签图片到各个文件夹

简介: python深度学习图像处理CSV文件分类标签图片到各个文件夹


python深度学习图像处理CSV文件分类标签图片到各个文件夹

最近在学习沐神的深度学习课程,由于一直用的C++,python快忘光了,下面是用python处理CSV数据分类文件夹,主要代码参考李沐的深度学习代码

以一个树叶分类的数据集作例子,数据集在这儿下载简单讲解一下怎样用python将数据分类存入相应文件夹

我们下载的数据集为下图形式。images中为训练集和测试集图片,其他分别有test,train,和一个提交的模板三个csv文件

images长这样处理后会是这种,每一类的图片放在一个文件夹中

导入库

import os
import math
import shutil
import collections
import torch
import torchvision

读取csv文件

读取train.csv

将文件位置存储在

data_dir = '/home/aries/d2l-zh/pytorch/classify-leaves'
fname = os.path.join(data_dir, 'train.csv')

采用with打开文件

with open(fname, 'r') as f:
        lines = f.readlines()[1:]  #从1开始,,去掉跳过文件头行 (列名)

line的内容如下

lines中有图片的地址和对应的标签。

我们将lines中每一个数据集去掉空格,并分开每个,列表存入,最后放在一个字典中返回(字典最后可以根据图片地址找到相应的标签)

下面是整个的代码

def read_csv_train(fname):
    """读取 `fname` 来给标签字典返回一个文件名。"""
    with open(fname, 'r') as f:
        # 跳过文件头行 (列名)
        lines = f.readlines()[1:]
    tokens = [l.rstrip().split(',') for l in lines]  #去掉空格,并分开每个训练图片,列表存入
    return dict(((name, label) for name, label in tokens)) #字典返回返回
labels = read_csv_train(os.path.join(data_dir, 'train.csv'))

labels的内容如下读取test.csv

同train一样with读取csv文件,但是test的内容和train不一样,里面没有标签,如下

fname = os.path.join(data_dir, 'test.csv')
    with open(fname, 'r') as f:
        # 跳过文件头行 (列名)
        lines = f.readlines()[1:]

所以建立read_csv_test函数是只需要返回列表就行了

def read_csv_test(fname):
    with open(fname, 'r') as f:
        # 跳过文件头行 (列名)
        lines = f.readlines()[1:]
    tokens = [l.rstrip().split(',') for l in lines]
    return tokens
test_data = read_csv_test(os.path.join(data_dir, 'test.csv'))

test_data内容如下:

读取并分类图片文件分为测试集、训练集、验证集、和train_valid

train_valid这里面包含分开的训练集和验证集(就是最开始训练集),最后参数调好了,用这个训练

假设验证集的个数为10%

valid_ratio = 0.1

下面先把整个程序贴上

reorg_train_valid(data_dir, labels, test_data, valid_ratio)
def copyfile(filename, target_dir):
    """将文件复制到目标目录。"""
    os.makedirs(target_dir, exist_ok=True) #exist_ok:是否在目录存在时触发异常。如果exist_ok为False(默认值),
                                  #则在目标目录已存在  的情况下触发FileExistsError异常;
                                             #如果exist_ok为True,则在目标目录已存在的情况下不会触发FileExistsError异常。
    shutil.copy(filename, target_dir)#复制文件内容
#@save
def reorg_train_valid(data_dir, labels, test_data, valid_ratio):
    # 训练数据集中示例最少的类别中的示例数
    n = collections.Counter(labels.values()).most_common()[-1][1]#[-1] 是最少的类别,如果[0]是最大的类别; 
                                                            #最后的[1]则是返回值,如果是[0] 则返回个数
    # 验证集中每个类别的示例数
    n_valid_per_label = max(1, math.floor(n * valid_ratio))
    label_count = {}
    for train_file in os.listdir(os.path.join(data_dir, 'images')):
        fname = os.path.join(data_dir, 'images/', train_file)
        if ['images/' + train_file] in test_data:  #如果图片地址在测试集的列表中
            copyfile(
            fname,
            os.path.join(data_dir, 'train_valid_test', 'test', 'unknown'))#将测试集也一一复制过来#测试集不知道标签,即为unknow
        else :  #if labels.__contains__('images/' + train_file)如果图片的地址在训练集的字典中
            label = labels['images/' + train_file]#取文件名,处理后的值作为labels的索引,即key值
            copyfile(
                fname,
                os.path.join(data_dir, 'train_valid_test', 'train_valid', label))#复制到train_valid中,
            if label not in label_count or label_count[label] < n_valid_per_label:
                copyfile(
                    fname,
                    os.path.join(data_dir, 'train_valid_test', 'valid', label))#复制到交叉验证集的文件中
                label_count[label] = label_count.get(label, 0) + 1#字典中get返回指定Key的值,如果key不存在则返回后面的参数,即0
            else:
                copyfile(
                    fname,
                    os.path.join(data_dir, 'train_valid_test', 'train', label))#复制到train中
    return n_valid_per_label

通过执行上面的程序我们就可以得到相应的分类好的文件夹train_valid_test

其中包含以下4个文件夹

train中每个标签的相应图片已经分好了(验证集valid,train_valid_test也一样)

文章代码参考李沐的深度学习的代码

目录
相关文章
|
1月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
664 2
|
机器学习/深度学习 编解码 人工智能
人脸表情[七种表情]数据集(15500张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
本数据集包含15,500张已划分、已标注的人脸表情图像,覆盖惊讶、恐惧、厌恶、高兴、悲伤、愤怒和中性七类表情,适用于YOLO系列等深度学习模型的分类与检测任务。数据集结构清晰,分为训练集与测试集,支持多种标注格式转换,适用于人机交互、心理健康、驾驶监测等多个领域。
|
10天前
|
机器学习/深度学习 人工智能 文字识别
中药材图像识别数据集(100类,9200张)|适用于YOLO系列深度学习分类检测任务
本数据集包含9200张中药材图像,覆盖100种常见品类,已标注并划分为训练集与验证集,支持YOLO等深度学习模型。适用于中药分类、目标检测、AI辅助识别及教学应用,助力中医药智能化发展。
|
28天前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
机器学习/深度学习 人工智能 监控
河道塑料瓶识别标准数据集 | 科研与项目必备(图片已划分、已标注)| 适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化进程加快和塑料制品使用量增加,河道中的塑料垃圾问题日益严重。塑料瓶作为河道漂浮垃圾的主要类型,不仅破坏水体景观,还威胁水生生态系统的健康。传统的人工巡查方式效率低、成本高,难以满足实时监控与治理的需求。
|
2月前
|
机器学习/深度学习 传感器 人工智能
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在人工智能和计算机视觉的快速发展中,火灾检测与火焰识别逐渐成为智慧城市、公共安全和智能监控的重要研究方向。一个高质量的数据集往往是推动相关研究的核心基础。本文将详细介绍一个火灾火焰识别数据集,该数据集共包含 2200 张图片,并已按照 训练集(train)、验证集(val)、测试集(test) 划分,同时配有对应的标注文件,方便研究者快速上手模型训练与评估。
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 人工智能 自动驾驶
7种交通场景数据集(千张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在智能交通与自动驾驶技术快速发展的今天,如何高效、准确地感知道路环境已经成为研究与应用的核心问题。车辆、行人和交通信号灯作为城市交通系统的关键元素,对道路安全与交通效率具有直接影响。然而,真实道路场景往往伴随 复杂光照、遮挡、多目标混杂以及交通信号状态多样化 等挑战,使得视觉识别与检测任务难度显著增加。
|
2月前
|
机器学习/深度学习 人工智能 监控
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
坐姿标准好坏姿态数据集的发布,填补了计算机视觉领域在“细分健康行为识别”上的空白。它不仅具有研究价值,更在实际应用层面具备广阔前景。从青少年的健康教育,到办公室的智能提醒,再到驾驶员的安全监控和康复训练,本数据集都能发挥巨大的作用。
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 编解码 人工智能
102类农业害虫数据集(20000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在现代农业发展中,病虫害监测与防治 始终是保障粮食安全和提高农作物产量的关键环节。传统的害虫识别主要依赖人工观察与统计,不仅效率低下,而且容易受到主观经验、环境条件等因素的影响,导致识别准确率不足。

推荐镜像

更多