数据集相关操作(二)—— 划分mask和训练集、验证集

文章介绍了如何使用Python脚本从EISeg的标注中提取纯黑mask图,创建mask文件夹并将它们与原始图片分开。接着,按照一定比例随机分配图片到训练集和验证集。代码涉及文件操作、数据划分以及图像处理的相关步骤。


前言

使用了EISeg进行分割的相关标注,并以COCO实现保留下来,会保留三种格式的图像。而一般训练所用的是那种纯黑的mask图,所以要将其单独拿出来,EISeg的官方代码有给出相应的提取、划分代码等。本文只是记录下工作时遇到的略微改动。

参考链接


二、使用步骤

保存的文件格式如下:
在这里插入图片描述

1.将纯黑的mask图单独复制到一个命名为mask的文件夹

代码如下(示例):

from pathlib import Path
import shutil
def del_mask(src):
    exclude = ["annotations.json", "autosave_label.txt"]
    img_dirs=[i.parent for i in Path(src).glob("*") if i.name=="label"]
    for dir in img_dirs:
        img_name =[i.stem for i in dir.glob("*.[bpj][pnm][pg]")]+exclude
        for mask_file in (dir/"label").glob("*.*"):
            flag=True
            for i in img_name:
                # print(i,"*"*10,f'{mask_file.name}')
                if i in f'{mask_file.name}':
                    flag=False
                    break
            if flag==True:
                mask_file.unlink()
                print(mask_file)
                
def move_mask(src):
    dst=Path(src)/"mask"
    dst.mkdir(exist_ok=True,parents=True)
    img_list = Path(src).glob("*.[jpb][pnm][pg]")
    exclude=["label","mask","show"]

    mask_list=[i.parent/"label"/i.with_suffix(".png").name for i in img_list if i.parent.name not in exclude]
    for img in mask_list:
        print(img)
        if not img.exists():
            print(f'{img}  not exit in label')
            continue
        shutil.copy(f'{img}',dst)

path=r''
del_mask(f'{path}')
move_mask(f'{path}')

2.根据mask,随机分配原始图片为训练集和验证集(在下面代码中,是将mask文件夹和原始图片放在同一目录下)

代码如下:

    def split_train():

        src = r''
        rat = r''
        img_dirs = [i.parent for i in Path(src).glob("**") if i.name == "mask"]  # 找到子目录“mask”,并将其父目录存储在img_dirs列表中
  
        for img_dir in img_dirs:
            img_list = list(img_dir.glob("*.[jpb][npm][gp]"))  # 获取该目录下所有图像的路径
            random.shuffle(img_list)
            train_n = int(len(img_list) * rat)
            for index, img in tqdm(enumerate(img_list), total=len(img_list)):
                if index < train_n:
                    save_path = Path(img_dir) / "train"
                else:
                    save_path = Path(img_dir) / "val"
                save_path.mkdir(exist_ok=True, parents=True)
                shutil.move(f'{img}', f'{save_path}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想要躺平的一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值