普通划分
#_RATION不能是分数
import os
import random
PATH='./Annotations'
val_RATIO=1/90#val num over all images ratio
test_RATIO=1/90
f_test=open('./test.txt','w')
f_train=open('./train.txt','w')
f_val= open('./val.txt','w')
f_trainval=open('./trainval.txt','w')
counter=0
file_list = os.listdir(PATH)
random.shuffle(file_list)
counter = 0
for filename in file_list:
if counter<=val_RATIO * len(file_list):
f_val.write(filename[:-4]+'\n')
f_trainval.write(filename[:-4]+'\n')
elif counter < (val_RATIO+test_RATIO) * len(file_list):
f_test.write(filename[:-4]+'\n')
else:
f_train.write(filename[:-4]+'\n')
f_trainval.write(filename[:-4]+'\n')
counter+=1
f_train.close()
f_test.close()
f_val.close()
f_trainval.close()
弄了每类均匀划分
import os
import random
PATH='./Annotations'
val_RATIO=1/10#val num over all images ratio
test_RATIO=1/10
all_list={}#key:classes , value:num of classes
already_val_list={}#how many images in val aleardy process
already_test_list={}
for filename in os.listdir(PATH):
all_list.setdefault(filename.split('_')[0],0)
already_val_list.setdefault(filename.split('_')[0],0)
already_test_list.setdefault(filename.split('_')[0],0)
for filename in os.listdir(PATH):
all_list[filename.split('_')[0]]+=1
list_=[]
for key in all_list.keys():
list_.append(key)
print(key)
#print(list_)
#print(len(list_))
f_test=open('./test.txt','w')
f_train=open('./train.txt','w')
f_val= open('./val.txt','w')
counter=0
file_list = os.listdir(PATH)
random.shuffle(file_list)
for filename in file_list:
if already_val_list[filename.split('_')[0]]<=all_list[filename.split('_')[0]]*val_RATIO:
f_val.write(filename[:-4]+'\n')
already_val_list[filename.split('_')[0]]+=1
continue
if already_test_list[filename.split('_')[0]]<=all_list[filename.split('_')[0]]*test_RATIO:
f_test.write(filename[:-4]+'\n')
already_test_list[filename.split('_')[0]]+=1
continue
f_train.write(filename[:-4]+'\n')
f_train.close()
f_test.close()
f_val.close()