给定每组图像文件名的列表,将大型数据集拆分为训练/验证/测试目录?

我正在尝试将来自Food101数据集的大型数据集拆分为训练/验证/测试集,用于图像分类

数据集的结构如下,所有图像都放在一个文件夹中

'','结构:','----------','pec/','    images/','        <类名>/','            <图像ID>.jpg','    meta/','        classes.txt','        labels.txt','        test.json','        test.txt','        train.json','        train.txt','','所有图像都可以在"images"文件夹中找到,并按类别组织。所有','图像ID都是唯一的,对应于foodspotting.com的评论ID。','我们在论文实验中使用的测试/训练拆分可以在','"meta"目录中找到。', (已编辑) ```我想根据作者在train.txt和test.txt中使用的文件名列表,将图像数据集拆分为训练/验证/测试集```

训练、验证和测试列表的形状分别为:(101, 600),(101, 150),25250

在Colab中,我运行了以下代码

for x in range(train.shape[0]):    for y in range(train.shape[1]):     temp = train[x,y] + ".jpg"     foldername = temp.split('/')[0]     !mv /content/food-101/images/$temp /content/food101/train/$foldername/

通过运行嵌套循环并从列表中获取文件名来单独移动图像,这个过程耗时太长,因为总共有100100张图像,所以,

我有训练/验证和测试集的文件名列表,但如何将它们转换为文件夹,以便我们可以将其输入到PyTorch的图像文件夹格式中(我的意思是训练/验证/测试集是三个不同的文件夹,每个文件夹中都有每个类的子文件夹)

如果有人知道如何做这件事,请告诉我,我真的很需要你们的帮助,谢谢:smile:


回答:

看来我之前的解决方案完全错了,我不需要移动图像,我只需要通过os模块更改图像的路径到所需的格式

以下是实现这一点的代码。假设你有验证列表中的文件名列表

#对于验证集 v = valid.reshape(15150,)or_fpath = '/content/food-101/images/' #原始文件夹路径cp_fpath = '/content/food101/valid/'   #目标文件夹路径for y in tqdm(v): foldername = y.split('/')[0] img = y.split('/')[1] +'.jpg' ip_path = or_fpath+foldername op_path = cp_fpath+foldername if not os.path.exists(op_path):   os.mkdir(op_path) os.rename(os.path.join(ip_path, img), os.path.join(op_path, img))

谢谢!

注意:如果你有更好的答案,请分享,谢谢

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注