深度学习图片集的制作代码

感谢学姐的教学,本次的代码的目标是,手动制作好训练样本后,根据一定的比例,从训练样本中选出一部分数据作为验证样本,主要用到的库有os、random,以及shutil。os用来处理路径信息,shutil则用来根据路径以及random设置的比例对数据进行移动。
需要注意的是,训练集的创建需要按格式创建,即每种类别单独建立一个文件夹,然后所有类别的文件夹放于‘Train’文件夹下:
在这里插入图片描述D:\Anaconda3\data\yangmiao_data为底层文件夹,验证集‘Val’无需事先创建,代码中会自动创建
在这里插入图片描述Train文件夹中存放有各个类别的文件夹,文件夹命名则为标签值
在这里插入图片描述图片数据的命名规则最好做到规范化
主要代码及注释如下:
1 导入库

import os
from os.path import join
# 用来对图片名进行随机提取
import random
# 用来移动图片
import shutil

2 定义移动数据的函数
函数的输入为底层文件夹名称;
以文件夹(图片标签)为单位进行循环,每次从一个文件夹(标签)中移动制定数量图片,并创建对应的验证文件夹;
用random.sample函数来选取移动的对象;
用shutil.move函数来移动选取的数据。

def image_move(imagedir):
    train_dir = join(imagedir, 'Train')
    train_labels = os.listdir(train_dir)
    for train_label in train_labels:
        print('正在处理的类型: {}'.format(train_label))
        train_labelpath = join(train_dir, train_label)
        # 获取单个类别的所有文件名
        image_names = os.listdir(train_labelpath)
        # 获取文件数量
        train_numbers = len(image_names)
        # 设置验证集与训练集的百分比,用int()是向下取整数,比如int(1.6)=1
        val_numbers = int(train_numbers * 0.2)
        # val_numbers计算出验证集中图片的数量
        # 用random.sample进行随机提取,从训练集文件名提取指定数量的文件名存入验证集中,此处仅保存文件名
        val_names = random.sample(image_names, val_numbers)
        # 将验证集图片保存到对应的文件夹中,且文件夹名称为标签值
        val_labelpath = join(imagedir, 'Val', train_label)
        if not os.path.exists(val_labelpath):
            os.makedirs(val_labelpath)
        for val_name in val_names:
            train_imagepath = join(train_labelpath, val_name)
            val_imagepath = join(val_labelpath, val_name)
            shutil.move(train_imagepath, val_imagepath)
        print('验证集路径: {}, 验证集数量: {}'.format(val_labelpath, val_numbers))
    return

3 函数运行
注意r的用法,用在路径前面,表示固定字符串,不会出现\t、\n等有歧义的情况

if __name__ == '__main__':
    image_dir = r'D:\Anaconda3\data\yangmiao_data'
    image_move(image_dir)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值