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

我正在尝试将来自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折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

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