将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