深度学习必备:对数据集的拆分、根据拆分图片拆分labels、对全部标注标签进行区间检查

深度学习必备:对数据集的拆分、根据拆分图片拆分labels、对全部标注标签进行区间检查

一、前言

最近在搞讯飞小车竞赛,完成视觉目标检测的时候,突然用到了这个,所以就写了着个小demo完成一下任务

二、源码

功能:

  • 对数据集的拆分
  • 根据拆分图片拆分labels、
  • 对全部标注标签进行区间检查
import os
import random
import shutil

def get_imlist(path):
    return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')]

def getData(src_path,k):

    dest_dir = src_path+'val' #划分出来的验证集
    if not os.path.isdir(dest_dir):
        os.mkdir(dest_dir)

    img_list = get_imlist(src_path)
    random.shuffle(img_list)
    le = int(len(img_list) * k)  # 这个可以修改划分比例
    for f in img_list[le:]:
        shutil.move(f, dest_dir)

'''
函数功能:
划分数据集
'''
def SplitImg(filePath,k):
    #拆分的数据集
    getData(filePath,k)

'''
函数功能:
根据划分的数据集进行移动标注文件
'''
def MoveAn(filePathAn,filePathImg):

    if not os.path.isdir(filePathAn+'val'):
        os.mkdir(filePathAn+'val')
    Imgs=os.listdir(filePathImg)


    for file in os.listdir(filePathAn):
        #print(filePathAn,filePathImg)
        #print(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))
        if file[:-4]+'.jpg' in Imgs:

            shutil.move(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))

'''
函数功能:
去除重复的图片
'''
def delReDisplayImg(filePath):
    Imgs=os.listdir(filePath)
    for img in Imgs:
        if Imgs.count(img)>1:
            os.remove(filePath+'/'+img)
            print(filePath+'/'+img)

'''
函数功能:
检查标签是否都符合

'''
def checkAn(filePath,lim):
    Ans=os.listdir(filePath)
    dels=[]#将找到的不合法的文件弄到这个文件夹里面

    for An in Ans:
        with open(os.path.join(filePath,An),'r',encoding='utf-8')as f:
            while True:
                line=f.readline()
                if line=='':
                    break
                #print(An,line)
                nc=int(line[0:2])
               #print(nc)

                #print(nc)
                if nc<lim[0] or nc>lim[1]:
                    print(nc,os.path.join(filePath,An))
                    dels.append(os.path.join(filePath,An))
                    #os.remove(os.path.join(filePath,An)

    print('是否删除以下异常文件?y/n')
    print(dels)
    op=input('执行操作:')
    if op=='y':
        for path in dels:
            os.remove(path)

if __name__=='__main__':
    filePath = 'D:\AI\yolov5-master\\xunfeidata\images\\train'  # 换成你的数据集
    #划分比例
    k=0.8
    #SplitImg(filePath,k)

    filePathAn = 'D:\AI\yolov5-master\\xunfeidata\labels\\train'  # 换成你的标注文件地址
    # 根据数据集进行移动标注文件
    MoveAn(filePathAn,filePath+'val')
    checkAn(filePathAn,[0,7])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风吹落叶花飘荡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值