我正在尝试将来自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))
谢谢!
注意:如果你有更好的答案,请分享,谢谢