VOC格式或YOLO格式数据集划分train和val实现

原始图片数据集和标签数据集要同时划分,训练模型时候都要用到,且互相要一一对应。也就是说某张原始图片作为验证集了,那么它对应的标签数据也要作为验证集。

通过以下代码即可轻松实现

import os, random, shutil


def moveimg(fileDir, tarDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    rate = 0.1  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    print(sample)
    for name in sample:
        shutil.move(fileDir + name, tarDir + "\\" + name)
    return


def movelabel(file_list, file_label_train, file_label_val):
    for i in file_list:
        if i.endswith('.jpg'):
            # filename = file_label_train + "\\" + i[:-4] + '.xml'  # 划分xml标签的数据集使用这句,将下面一句注释掉
            filename = file_label_train + "\\" + i[:-4] + '.txt'  # 划分txt标签的数据集使用这句,将上面一句注释掉
            if os.path.exists(filename):
                shutil.move(filename, file_label_val)
                print(i + "处理成功!")


if __name__ == '__main__':
    fileDir = r"D:\code\mydata\image\JPEGImages" + "\\"  # 源图片文件夹路径
    tarDir = r'D:\code\mydata\image\JPEGImages_val'  # 图片移动到新的文件夹路径
    moveimg(fileDir, tarDir)
    file_list = os.listdir(tarDir)
    file_label_train = r"D:\code\mydata\labels" # 源图片txt或者xml标签路径
    file_label_val = r"D:\code\mydata\labels_val"  # txt或者xml标签存入路径
    # 移动到新的文件路径
    movelabel(file_list, file_label_train, file_label_val)

注意

rate:从所有数据集中随机抽出rate比例的数据集作为验证集,剩下的作为验证集

filename:划分txt标签或者xml标签,对应的代码语句不同

fileDir:原始图片文件夹路径,抽取验证集走了之后,剩下的就作为训练集

tarDir:原始图片作为验证集的移动到的文件夹路径

file_label_train:txt或者xml标签文件夹路径,抽取验证集走了之后,剩下的就作为训练集

file_label_val:txt或者xml标签作为验证集的文件夹路径

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值