看了网上的很多k-fold的程序,发现都是机器学习方面的数据 *** 作,而非文件 *** 作(一位不愿意透露姓名的资深大冤种本着“能花钱就不动脑”的原则还付费了几个程序,全是bug,我真的会谢)。
然后自己写了一个k-fold的程序,我的数据集是只有两个labels,并且是yolo格式做的标注,所以程序也是按照yolo的文件格式进行编写的,文件夹路径和picknumbers大家可以自己调。注:picknumbers我没有采用int(),因为可能会产生errors(比如你的数据集规模不能整除之类的),所以直接手动指定了具体数值。
程序应该是完全自动化的,只要自己创建好源文件夹以及吧图片和labels放进去就可以了,目标文件夹用mkdir()自动创建。
把main里面的for循环去掉,去掉rate的注释部分,就可以当留出法来用了。
下期会更一些魔改yolov5-backbone的文章,尽请期待。
import os, random, shutil
def copy_img_File(img0_file_Dir,txt0_file_Dir,img1_file_Dir,txt1_file_Dir):
label0_pathDir = os.listdir(img0_file_Dir) #取图片的原始路径
label1_pathDir = os.listdir(img1_file_Dir) #取图片的原始路径
# filenumber=len(pathDir)
# rate=0.1 #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
label0_picknumber=30
label1_picknumber=6
sample_label0 = random.sample(label0_pathDir, label0_picknumber) #随机选取picknumber数量的样本图片
sample_label1 = random.sample(label1_pathDir, label1_picknumber) #随机选取picknumber数量的样本图片
# print (sample)
for name in sample_label0:
shutil.copy(img0_file_Dir + name, k_fold_img_tar_Dir + name)
os.remove(img0_file_Dir + name)
shutil.copy(txt0_file_Dir + name[0:7] + '.txt', k_fold_txt_tar_Dir + name[0:7] + '.txt')
os.remove(txt0_file_Dir + name[0:7] + '.txt')
for name in sample_label1:
shutil.copy(img1_file_Dir + name, k_fold_img_tar_Dir + name)
os.remove(img1_file_Dir + name)
shutil.copy(txt1_file_Dir + name[0:7] + '.txt', k_fold_txt_tar_Dir + name[0:7] + '.txt')
os.remove(txt1_file_Dir + name[0:7] + '.txt')
return
if __name__ == '__main__':
img0_file_Dir = "./ORimg0/" # 源图片文件夹路径
txt0_file_Dir = "./ORtxt0/"
img1_file_Dir = "./ORimg1/" # 源图片文件夹路径
txt1_file_Dir = "./ORtxt1/"
for i in range(10):
os.mkdir('./Tar_img{}'.format(i))
os.mkdir('./Tar_txt{}'.format(i))
k_fold_img_tar_Dir = './Tar_img{}/'.format(i) # 移动到新的文件夹路径
k_fold_txt_tar_Dir = './Tar_txt{}/'.format(i) # 移动到新的文件夹路径
copy_img_File(img0_file_Dir, txt0_file_Dir, img1_file_Dir, txt1_file_Dir)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)