python 划分数据集_划分数据集python代码-程序员宅基地

技术标签: 笔记  

深度学习数据集

在进行深度学习的数据训练之前,总是要先进行 数据集的划分,将数据集划分为训练集、测试集和验证集,即分为train、test和val三个文件夹。

在网上看了一些数据集划分的代码,90%是用不了,很多都是只划分了图像文件,根本不划分相应的标注文件,于是自己写了一个简单的脚本,同时将图片和标注都对应划分好

准备工作

在进行数据集划分之前,首先先建立好相应的文件夹,分为train、test和val三个文件。每个文件夹中,又包含image图像文件夹和annotation标注文件夹。

我的做法是,将数据集所有的数据都放入train里的对应文件中,图片放入train目录下的image文件夹,标注放入train目录下的annotation文件夹,然后通过代码,将train中的文件移入test和val文件夹。

只需设置好相应的文件夹路径,即可完成数据集的划分

划分比例的问题

不同数据量的数据集要划分的比例不同,我选用的数据集样本比较少,我就按照6:2:2的比例去划分。其他人可以自己随便设定,如果不需要val,那么只需要将数据集划分为两部分,删除对应的val部分的代码就行。比例在程序中都可以自己调

代码

import os
import random
import shutil

def moveFile(train_img_Dir, train_mask_Dir):
        img_pathDir = os.listdir(train_img_Dir)                    # 提取图片的原始路径
        filenumber = len(img_pathDir)
        # 自定义test的数据比例
        test_rate = 0.2                                            # 如0.2,就是20%的意思
        test_picknumber = int(filenumber*test_rate)                # 按照test_rate比例从文件夹中取一定数量图片
        # 自定义val的数据比例
        val_rate = 0.2
        val_picknumber = int(filenumber*val_rate)                  # 按照val_rate比例从文件夹中取一定数量图片
        # 选取移动到test中的样本
        sample1 = random.sample(img_pathDir, test_picknumber)      # 随机选取picknumber数量的样本图片
        print(sample1)
        for i in range(0, len(sample1)):
            sample1[i] = sample1[i][:-4]                           # 去掉图片的拓展名,移动标注时需要这个列表
        for name in sample1:
            src_img_name1 = train_img_Dir + name
            dst_img_name1 = test_img_Dir + name
            shutil.move(src_img_name1 + '.png', dst_img_name1 + '.png')     # 加上图片的拓展名,移动图片
            src_mask_name1 = train_mask_Dir + name
            dst_mask_name1 = test_mask_Dir + name
            shutil.move(src_mask_name1 + '.txt', dst_mask_name1 + '.txt')   # 加上标注文件的拓展名,移动标注文件
        # 选取移动到val中的样本
        img_pathDir = os.listdir(train_img_Dir)                    # 这时图片目录里的文件数目会变
        sample2 = random.sample(img_pathDir, val_picknumber)       # 但是抽出来的数目,还是用之前算的
        print(sample2)
        for i in range(0, len(sample2)):
            sample2[i] = sample2[i][:-4]
        for name in sample2:
            src_img_name2 = train_img_Dir + name
            dst_img_name2 = val_img_Dir + name
            shutil.move(src_img_name2 + '.png', dst_img_name2 + '.png')
            src_mask_name2 = train_mask_Dir + name
            dst_mask_name2 = val_mask_Dir + name
            shutil.move(src_mask_name2 + '.txt', dst_mask_name2 + '.txt')
        return

if __name__ == '__main__':
    # train 从train中移动
    train_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/train/img/'
    train_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/train/mask/'
    # test路径:图片和标注目录
    test_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/test/img/'
    test_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/test/mask/'
    # val路径:图片和标注文目录
    val_img_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/val/img/'
    val_mask_Dir = '/home/rtx2080ti/Tianzhi/Tianzhi_Ship/output/val/mask/'
    # 运行划分数据集函数
    moveFile(train_img_Dir, train_mask_Dir)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/SiuooooBoom/article/details/119911515

智能推荐

使用curl在命令行中下载文件_bat脚本 curl 下载文件夹下所有文件-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏5次。今天帮同学从一个网站上下载点数据, 但是上面有上百个链接, 一个一个点击下载实在是工作量太大。 于是自己就想找一个命令行下载工具并用Python写一个简单的脚本来替代这些工作。百度了一下, 找到了curlcurl: curl是利用URL语法在命令行方式下工作的文件传输工具。 [百科: http://baike.baidu.com/view/1326315.htm]官网: http:_bat脚本 curl 下载文件夹下所有文件

常用的原型开发工具-程序员宅基地

文章浏览阅读67次。1、Axure RP(Rapid Prototyping)Axure(读音为Ack-Sure)无疑是目前最受关注的原型开发工具,其能通过组件的方式帮助网站或软件设计师快速建立带有注释的原型(流程图、线框图),并凭借自定义可重用的元件、动态面板以及丰富的script能够建立基本功能或页面逻辑的动态演示文件。Axure借鉴了office的界面,能够让用户快速上手,并且提供了..._程序员原型法常用工具

nuiapp请求网络_uni-app 接口 - 网络请求-程序员宅基地

文章浏览阅读145次。1、 uni.request(OBJECT) 发起网络请求参数名 类型 必填 默认值 说明url String 是 开发者服务器接口地址data Object/String/ArrayBuffer 否 请求的参数header Object 否 设置请求的 header,header 中不能设置 Referer。method String 否 GET (需大写)有效值:OPTIONS, GET...

Vim命令学习参考_hadoop vim是什么操作-程序员宅基地

文章浏览阅读368次。1. 关于Vim1.1 Vim的几种模式2. 启动Vim3. 文档操作4. 光标的移动4.1 基本移动4.2 翻屏4.3 标记5. 插入文本5.1 基本插入5.2 改写插入6. 剪切复制和寄存器6.1 剪切和复制、粘贴6.2 文本对象6.3 寄存器7. 查找与替换7.1 查找7.2 替换7.3 正则表达式8. 排版8.1 基本排版8..._hadoop vim是什么操作

应用加速,数字人民币接入多地交通出行场景 | 产业区块链发展周报-程序员宅基地

文章浏览阅读3.1k次。摘要产业动态:微众银行多方大数据隐私计算平台通过信通院权威评测欧洲最大移动运营商沃达丰将为AI智能协议移动终端提供移动通信服务汇丰银行加入迪拜经济的阿联酋KYC区块链平台重庆市先进区块链研..._交通联合 小额支付

随便推点

TCPIP详解卷1第3章IP网际协议3.2IP首部3.3IP路由选择-程序员宅基地

文章浏览阅读164次。转载于:https://www.cnblogs.com/sunyongjie1984/p/4319969.html

linux which,whereis,locate,find的区别_linux中whereis locate which的区别-程序员宅基地

文章浏览阅读221次。find就不用多说了,就是递归遍历文件夹。which:有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。whereis:是在数据库中查找文件,在数据库(var/lib/slocate/slocate.db)中查找与文件名相匹配的二进 制文件、源文件和帮助手册文件,使用之前可以使用up..._linux中whereis locate which的区别

olat中解决查看gui_demo源代码异常或debug模式下查看源代码异常_guidemo_main不显示-程序员宅基地

文章浏览阅读1.2k次。出现这种异常是因为没有设置 project.build.home.directory 参数,系统找不到源代码文件的位置。解决办法:1.首先下载源代码,可参考如何下载olat源代码并在eclipse中查看2.在部署的服务中找到 olat.local.properti_guidemo_main不显示

自定义View-Rect和RectF_android根据rect坐标添加控件-程序员宅基地

文章浏览阅读1.4k次。Rect 类定义了一个矩形结构,同样实现了 Parcelable 序列化接口。Rect 类定义了 left、top、right、bottom 四个成员变量,我们需要正确理解这 4 个成员变量的作用:left:矩形左边线条离 y 轴的距离top:矩形上面线条离 x 轴的距离right:矩形右边线条离 y 轴的距离bottom:矩形底部线条离 x 轴的距离矩形是一种非常常见的图_android根据rect坐标添加控件

CCS5导入工程时出错:Issues that may require your attention were encountered while importing the projects-程序员宅基地

文章浏览阅读2.4w次,点赞10次,收藏27次。1.出错CCS5.5.0导入工程(Import CCS Eclispse Project)时出错:Issues that may require your attention were encountered while importing the projects ,如下图:2.原因是由于文件夹名(例如f28335_Sci_Update_Flash_first)和文件夹中的工程名

Android4.0 Toast显示问题分析_安卓4.0不支持uni.showtoast-程序员宅基地

文章浏览阅读8.9k次,点赞3次,收藏4次。在修复RUI桌面在4.0系统下的提示信息不完善的Bug过程的一些思路与大家分享一下。Bug描述:RUI在2.2的系统点击推荐图标下载后,就会进入下载队列中下载,如果再次点击相同的图标就会使用Toast提示“**已经在下载队列中”。但是在4.0的系统就会出现异常,第二次点击相同的推荐图标时没有出现Toast提示。相关源码:public static void showMe_安卓4.0不支持uni.showtoast