其他分享
首页 > 其他分享> > 将ImageNet的验证集val数据分类到不同文件夹中

将ImageNet的验证集val数据分类到不同文件夹中

作者:互联网

感谢中科院,感谢东南大学,感谢南京医科大,感谢江苏省人民医院的支持

不多说了,直接上代码

需要指出的是,imagenet-1k的test数据集是没有标签的。

一开始,val数据是这样的,

在这里插入图片描述

处理好的验证数据集

在这里插入图片描述

最终数据全部对应上了,train数据集和test数据集中每个子类都对应上了

在这里插入图片描述

第一步,生成val中每个类对应的文件夹

import os
def mkdir(path):
    folder = os.path.exists(path)
    if not folder:
        os.makedirs(path)
        print(path + "---OK---")
    else:
        print(path + "---There is this folder!---")

if __name__ == '__main__':
    data = []
    # 设置文件对象并读取每一行文件,这个文件夹中保存了对应的验证数据集图像名和图像的标签
    for line in open("D:/Dateset/Alldataset/Imagenet/imageval.txt", "r"):  
        data.append(line)
    for a in data:
            # folder=file+line
        folder = a[32:41]
            # strip()方法移除字符串头尾指定的字符
        #folder = folder.strip()
        mkdir(folder)

第二步,将验证数据集中的图像数据分类到每个类文件夹中

import sys
import cv2
import matplotlib.pyplot as plt
import re,os
from PIL import Image
import numpy as np

data = []
for line in open("D:/Dateset/Alldataset/Imagenet/imageval.txt", "r"):  
# 设置文件对象并读取每一行文件
    data.append(line)
print(data[2][3:31])#这个显示的时每个图像的名称
print(data[2][32:41])#这个显示的时该图像的类,我们也是用这个类创建文件夹的

#显示图像

#img = Image.open('D:/Dateset/Alldataset/Imagenet/ILSVRC2012_img_val/{}'.format(data[2][3:31]))
#plt.figure("dog")
#plt.imshow(img)
#plt.show()

for a in data:
    print('一张张的分类中..........')
    im = Image.open('D:/Dateset/Alldataset/Imagenet/ILSVRC2012_img_val/{}'.format(a[3:31]))  
    #这个时获取原始验证集ILSVRC2012_img_val中每个图像,因为data中每一行存储一个图像的名称和标签
    nameimage = a[3:31]#获取该图像的名称
    path1 = 'D:\\Dateset\\Alldataset\\Imagenet\\ILSVRC2012_img_val1\\{}'.format(a[32:41])
    #ILSVRC2012_img_val1时新的验证集,ILSVRC2012_img_val1里面有很多以图像类命名的子文件夹
    im.save(os.path.join(path1, nameimage))#把图像保存在文件中
    im.close()

我们的imageval.txt可以从这里获取

大家从这边开始复制,然后粘贴到自己的txt文件中
在这里插入图片描述

标签:val,img,文件夹,图像,ImageNet,import,folder,path,data
来源: https://blog.csdn.net/qq_33328642/article/details/122073200