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

  • python深度学习图像处理CSV文件分类标签图片到各个文件夹
    • 导入库
    • 读取csv文件
    • 读取并分类图片文件分为测试集、训练集、验证集、和train_valid

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'))#将测试集也一一复制过来#测试集不知道标签,即为unknowelse :  #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不存在则返回后面的参数,即0else: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也一样)
文章代码参考李沐的深度学习的代码

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

  1. Python实现深度学习MNIST手写数字识别(单文件,非框架,无需GPU,适合初学者)

    注: 本文根据阿卡蒂奥的Python深度学习博客文章代码进行调整,修复了少量问题,原文地址:https://blog.csdn.net/akadiao/article/details/78175737 ...

  2. 1 图片channels_深度学习中各种图像库的图片读取方式

    深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代码搭建深度学习模型,不同的深度学习框架会有不同的读取数据方式(eg:Caffe的python接口默认BGR格式,Te ...

  3. (转)深度学习中各种图像库的图片读取方式

    https://blog.csdn.net/u013841196/article/details/81194310 深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代 ...

  4. 深度学习中各种图像库的图片读取方式

    深度学习中各种图像库的图片读取方式总结 在数据预处理过程中,经常需要写python代码搭建深度学习模型,不同的深度学习框架会有不同的读取数据方式(eg:Caffe的python接口默认BGR格式,Te ...

  5. Python 深度学习架构实用指南:第一、二部分

    原文:Hands-On Deep Learning Architectures with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集] ...

  6. 粗读《Python 深度学习》(4)

    粗读<Python 深度学习>(4) 第五章 深度学习用于计算机视觉 5.1 卷积神经网络简介 5.1.1 卷积运算 5.1.2 最大池化运算 5.2 在小型数据集上从头开始训练一个卷积神 ...

  7. 深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理

    深度学习图像处理目标检测图像分割计算机视觉 01-图像预处理 摘要 一.开发环境搭建 1.1 anaconda安装 1.2 安装TensorFlow 1.3 安装OpenCV 二.中值滤波 三.高斯滤 ...

  8. Python深度学习-快速指南

    Python深度学习-快速指南 (Python Deep Learning - Quick Guide) Python深度学习-简介 (Python Deep Learning - Introduct ...

  9. 深度学习之数据处理——如何将图片和标签打乱并划分为训练集和测试集

    深度学习之数据处理--如何将图片和标签打乱并划分为训练集和测试集 记录我的第一篇CSDN博客 最近我在网上找到Office31数据集,这个数据集中包含了三个子数据集,分别为:Amazon.dslr.w ...

  10. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述

    深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述 摘要 一.图像特征与描述 1.1.颜色特征 1.2.几何特征提取 1.3.基于特征点的特征描述子 1.3.1.几何特征:关键点 1. ...

最新文章

  1. mysql cronjob 备份_了解cron以及使用cron定时备份MySQL
  2. docker-compose 简介以及常用命令
  3. PHP的php://
  4. php里面的mark,PHP CommonMarkCQL 用法 手册 | 示例代码
  5. azure多功能成像好用吗_Azure持久功能简介:模式和最佳实践
  6. eclipse linux远程调试工具,使用本地Eclipse IDE调试器与远程项目源(Linux)
  7. luogu P4843 清理雪道
  8. Windows10下安装MySQL8.0
  9. DOS命令与批处理学习历程
  10. 安卓Aop 实现权限检测
  11. SpringBoot+RabbitMQ 实现 RPC 调用
  12. Beyond Compare的文档比较工具的设置
  13. java 模块层次结构图_Spring框架模块结构图解析
  14. 两步解决WIN7 下IE经常未响应的假死现象
  15. 【产品功能】弹性网卡支持私网多IP
  16. php 关于php时区时间错误问题 date 当前时间 时差(转载)
  17. 【C语言基础练习】百钱买百鸡问题。母鸡3元钱一只,小鸡1元钱三只,问100元钱要刚好买100只鸡,编程实现母鸡和小鸡各多少只?
  18. 哔哩哔哩2018.9.21笔试题——扭蛋机(堆的思想解决)
  19. 十个高质量自学网站,让你的技术突飞猛进
  20. 智慧交通大数据可视化,让城市运营车辆可视、可监、可控

热门文章

  1. Qt 学习之路 2(84):Repeater
  2. Windows自带利器:Rundll.exe高级应用
  3. c#日期转换周几_C#根据日期计算星期几的实例代码
  4. python一二维数据的格式化和处理_python第七周,二维数据的格式化和处理
  5. Ubuntu 16.04 编译源码并安装 Caffe (CPU only)
  6. Qt 70行代码实现控件任意拆分 选中控件水平垂直拆分 窗口分割
  7. OpenSER安装配置指南
  8. 解决安装驱动时提示的“未签名的驱动程序”警告信息!!
  9. mongodb java 不等于_mongoDB在java上面的应用
  10. lua 给userdata设置元表_Programming in Lualua学习第9期 Lua元表与元方法