我当前的数据集在多个文件夹中有图像,按类别标记。我想创建一个“ train”和“ test”文件夹,并在这些目录中创建class文件夹。然后,我想将70%的图像放在“火车”文件夹中,并将30%的图像放在“测试”文件夹中,就像这样:
培训资料夹
Beans文件夹:
- img1
- img2
- ...
蛋糕文件夹:
- img1
- ...
我现在要执行此操作的代码是这样的(我现在正在测试一个微小的数据集):
classes = ('BEANS','CAKE') #'Candy','Cereal','Chips','Chocolate',# 'Coffee','Corn','Fish','Flour','Honey','Jam','Juice',# 'Milk','Nuts','Oil','Pasta','Rice','Soda','Spices',# 'Sugar','Tea','Tomato Sauce','Vinegar','Water')
# create sub-folders for each class
OUTPATH = 'C:\\Users\\User\\Documents\\Dataset\\freiburg_groceries_dataset\\sets'
for x in classes:
os.makedirs(OUTPATH+'\\train\\'+x,exist_ok=True)
os.makedirs(OUTPATH+'\\test\\'+x,exist_ok=True)
INPATH = 'C:\\Users\\User\\Documents\\Dataset\\freiburg_groceries_dataset\\imgs'
filenames = os.listdir(INPATH + '\\' + x)
counts = {x:0 for x in classes}
for x in classes:
print(len(filenames))
print(filenames)
testset = len(filenames) / 10 * 0.3 # 30%
for fl in filenames:
for cl in classes:
if cl in fl:
counts[cl] += 1 # increase count +1
if counts[cl] < testset:
shutil.move(INPATH + '\\' + x + '\\' + fl,OUTPATH+'\\test\\'+cl+'\\'+fl)
else:
shutil.move(INPATH + '\\' + x + '\\' + fl,OUTPATH+'\\train\\'+cl+'\\'+fl)
我的代码创建了我需要的文件夹,但是随后它仅读取CAKE
文件夹,而忽略了BEANS
文件夹。它还会将所有蛋糕图像移动到train文件夹,并将cake-> test文件夹留为空白,并且不移动任何BEAN图像。谁能看到我的代码在哪里无法遵循使用BEANS文件夹的步骤,以及如何将30%的蛋糕图像移动到测试文件夹?