毕设将做一个基于计算机视觉的垃圾分类识别系统,现在从网上找到数据集,从
构建用于垃圾分类的图像分类器–穿着帆布鞋也能走猫步这里下载的数据集,总共有2500张image左右。里面有6个文件夹,分别存放纸板,玻璃瓶,金属制品(主要是易拉罐等),paper(主要是杂志,报纸,干净卫生纸等),plastic(主要是塑料瓶),一般垃圾trash(包括小塑料袋,纸片,牙膏袋等)

现在需要将其分成三种数据集:训练集,验证集,测试集。
参看waste_sorter
代码

from pathlib import Path
import numpy as np   # 用于将文件保存为.npy文件格式
import random
import os
import glob        # 查找符合特定规则的文件名
from PIL import Image
import zipfile as zf
import shutil
import tensorflow as tf
import re'''
需要将paper,cardboard,glass,metal,plastic这5个文件夹
重新组织成train,validate,test三种:按照2:1:1的比例进行划分
将train_iamges文件夹:是将从5个文件中随机抽取的image,合并成一个文件夹train_images,并生成一个标签文件train_labels
同理生成validate_images,validate_lables,test_images,test_labels思路:将5个子文件中的内容copy到同一个文件夹train_images下,
同时根据len(os.listdir('E:\\train_data\\trash_dataset\\data\\train\\plastic')),查看plastic中包含多少张image,
据此就生成多少个label。label只能用数字来表示,0,1,2,3,4
label   name
0       cardboard
1       glass
2       metal
3       paper
4       plastic划分好之后,每个图像不能直接保存到npy文件中,因为图像太大,
后面进行批量读取时,受内存大小的限制,会导致读取失败。所以先挨个将原始的图片进行缩放,调用tf.image.resized_images(),
然后将缩放后的images保存到对应的npy文件。
缩放image的步骤在resize_image.py中
'''
## splits indices for a folder into train, validation, and test indices with random sampling
## input: folder path
## output: train, valid, and test indices(索引;下标)
# 返回的是存放文件夹中image的下标或者说是image的序号,返回的是3个索引列表
def split_indices(folder, seed1, seed2):n = len(os.listdir(folder))  # n=指定的垃圾类型文件夹中的image文件数目(即图片数)full_set = list(range(1, n + 1))random.seed(seed1)train = random.sample(list(range(1, n + 1)), int(.5 * n))  # 从list(n个元素)中随机选出n/2个数;训练数据集占总数据的一半remain = list(set(full_set) - set(train))  # 集合 减去 其子集## separate remaining into validation and testrandom.seed(seed2)valid = random.sample(remain, int(.5 * len(remain)))  # random.sample()返回的是从list随机截取的一个长度确定的片段test = list(set(remain) - set(valid))return (train, valid, test)## gets file names for a particular type of trash, given indices
## input: waste category and indices
# indices是一个索引列表
## return:返回的是一个图片名称(由waste_type和对应的index组成的)的列表
def get_names(waste_type, indices):file_names = [waste_type + str(i) + ".jpg" for i in indices]return file_names## moves group of source files to another folder,将原文件中的内容移动到新的文件路径
## input: list of source files and destination folder
## no output
def move_files(source_files, destination_folder):for file in source_files:shutil.move(file, destination_folder)  # shutil.move()其实就是将文件(或者文件夹)移动到指定的文件夹路径下面## move files to destination folders for each waste type
# 将文件移动到对应的train,validate,test等的文件夹下面
train_label_list=[]
validate_label_list=[]
test_label_list=[]
waste_types = ['cardboard', 'glass', 'metal', 'paper', 'plastic']  # 5种可回收的垃圾图片类型
label_list=[0,1,2,3,4]    # 对应5个标签
for i in range(5):source_folder = os.path.join('E:\\train_data\\trash_dataset\\dataset-resized\\dataset-resized', waste_types[i])train_ind, valid_ind, test_ind = split_indices(source_folder, 1, 1)  # 将每种垃圾中的图片分成三部分,返回对应的图片索引列表# move source image files to train_images, and save these images' labels into the train_label_list[]train_names = get_names(waste_types[i], train_ind)  # train_names是一个图片名称的列表# train_source_files是一个列表,包含所有选中的image文件的完整的路径train_source_files = [os.path.join(source_folder, name) for name in train_names]train_dest = "E:\\train_data\\trash_dataset\\data\\train_images"move_files(train_source_files, train_dest)for j in range(len(train_names)):train_label_list.append(label_list[i])  # 将图像对应的label保存至train_label_list【】中# move source image files to validate_images, and save these images' labels into the validate_label_list[]valid_names = get_names(waste_types[i], valid_ind)valid_source_files = [os.path.join(source_folder, name) for name in valid_names]valid_dest = "E:\\train_data\\trash_dataset\\data\\validate_images"move_files(valid_source_files, valid_dest)for j in range(len(valid_names)):validate_label_list.append(label_list[i])# move source image files to test_images, and save these images' labels into the test_label_list[]test_names = get_names(waste_types[i], test_ind)test_source_files = [os.path.join(source_folder, name) for name in test_names]test_dest = "E:\\train_data\\trash_dataset\\data\\test_images"move_files(test_source_files, test_dest)for j in range(len(test_names)):test_label_list.append(label_list[i]) arr1=np.array(train_label_list)
np.save("E:\\train_data\\trash_dataset\\data\\train_labels.npy",arr1)arr2=np.array(validate_label_list)
np.save("E:\\train_data\\trash_dataset\\data\\validate_labels.npy",arr2)arr3=np.array(test_label_list)
np.save("E:\\train_data\\trash_dataset\\data\\test_labels.npy",arr3)

运行上面的代码,总共生成6个文件(文件夹)。train_images,validate_images,test_images这3个文件夹存放了各自的images数据(JPG格式)。如下图

train_images中的部分数据如下:

同时还生成3个存放标签的.npy文件,如下图

将images按照2:1:1的比例随机分成train,validate,test相关推荐

  1. 【Python】深度学习中将数据按比例随机分成随机 训练集 和 测试集的python脚本

    深度学习中经常将数据分成 训练集 和 测试集,参考博客,修改python脚本 randPickAITrainTestData.py . 功能:从 输入目录 中随机检出一定比例的文件或目录,移动到保存 ...

  2. JAVA求班级男女生比例_java编程:给你一个班级的名单,随机分成6个组的问题解决办法...

    标签: 注意:标的名单文件要写在与包名同一级别的目录下,记载src上右击,点新建文件file,把名单复制到此文件中,程序就可以依据一些策略访问这个名单的内容 ArrayList是List(列表),数据 ...

  3. BERT模型从训练到部署全流程

    BERT模型从训练到部署全流程 Tag: BERT 训练 部署 缘起 在群里看到许多朋友在使用BERT模型,网上多数文章只提到了模型的训练方法,后面的生产部署及调用并没有说明. 这段时间使用BERT模 ...

  4. 03 | AI 术语:让你变得更加专业

    目录 一.常见术语与名词1.训练 2.Epoch 3.Batch Size 4.Step 5.Epoch.Step 与 Batch Size 的关系 6.评估 二.深度学习的分类 1.有监督学习 2. ...

  5. 论文翻译:Two-phase Hair Image Synthesis by Self-Enhancing Generative Model

    论文地址:https://arxiv.org/pdf/1902.11203.pdf 文中所有图片与表格统一移动至了文末 基于自增强生成模型的两阶段头发图像合成 摘要 给予有限的指导,如稀疏草图或低分辨 ...

  6. BERT模型从训练到部署

    BERT模型从训练到部署全流程 Tag: BERT 训练 部署 缘起 在群里看到许多朋友在使用BERT模型,网上多数文章只提到了模型的训练方法,后面的生产部署及调用并没有说明. 这段时间使用BERT模 ...

  7. 【文献翻译】用于改进脑电图癫痫发作分析的自监督图神经网络 - (DCRNN / SSL)

    原文:SELF-SUPERVISED GRAPH NEURAL NETWORKS FOR IMPROVED ELECTROENCEPHALOGRAPHIC SEIZURE ANALYSIS,ICLR ...

  8. 论文解读:《利用注意力机制提高DNA的N6-甲基腺嘌呤位点的鉴定》

    论文解读:<Leveraging the attention mechanism to improve the identification of DNA N6-methyladenine si ...

  9. 吴恩达机器学习--学习笔记

    1. Introduction 1.1 Welcome 如今机器学习被大规模应用于: 数据挖掘(网站点击,医学记录,生物学,工程) 一些无法通过编程实现的功能(自动驾驶,手写识别,NLP,CV) se ...

最新文章

  1. 怎样把字符1变成数字1
  2. 语音识别、传统语音识别、带权有限转态转换器、深度语音识别、时序分类、CTC解码
  3. this keyword details
  4. 【电子书】C++编程开发30问
  5. 机器学习库一:scikit-learn
  6. Swif语法基础 要点归纳(一)
  7. 转 alsa录音放音执行流程详解
  8. 从bootm 命令讲起/U-boot的环境变量: bootcmd 和bootargs
  9. 高并发高可靠性系统思考1
  10. Vue+Axios同步请求
  11. 类和对象编程(四):拷贝构造函数
  12. java -jar 指定main,java打包成jar并执行jar包中指定的main方法
  13. 科普 | 金融衍生品系列——互换
  14. WPS广告弹窗永久关闭
  15. 女程序员开发软件挂专家号,转手获利被刑拘
  16. 元宇宙产业委员会联席秘书长李正海做元宇宙顶层设计预研项目探讨报告
  17. 朋友之间最舒服的关系
  18. 失望时想起了你是什么歌_你是空你是空色即是空空什么歌名
  19. 设计按钮、下拉框、文本框的测试用例要点
  20. FFmpeg 集成 x265 编译及解码

热门文章

  1. centos8安装及配置nfs4
  2. 条形码的打印,pdf打印条形码
  3. 自定义View学习篇之绘制一个圆环动画
  4. 为什么高斯白噪声的平均功率等于方差?
  5. 在公共卫生领域GIS系统的应用范畴
  6. vue 项目中使用three.js实现vr360度全景图片预览
  7. AT24C02软件设计与应用
  8. 华为云学院-人人学loT学习笔记及扩展- 第二章 物联网平台OceanConnect
  9. 微服务轮子项目(49) -常见JVM内存错误及解决方案
  10. ubuntu18远程桌面