> 文章列表 > imagenet val 按类别分类

imagenet val 按类别分类

imagenet val 按类别分类

前言

有时候想看imagenet下某个类别的效果,但它又没划分… 之前看了这篇文章将ImageNet的验证集val数据分类到不同文件夹中,但不是很清楚那代码

本文基于它的代码去做更改

把这个下下来 https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh
其实这就是个sh了,只是不方便控制路径,这里用python写写

本文有另一个作用就是存储一下代码,不然某天也不知道代码放哪去了, 又得去网上找找然后去改

至于路径自己改改就好了

代码

首先把那个sh另存为txt文本,复制前1000行保存为classes.txt


create_dir.py

"""
https://blog.csdn.net/qq_33328642/article/details/122073200
"""
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("txt/classes.txt", "r"):  data.append(line)for a in data:# folder=file+linea = a.strip()folder = a[9:]# strip()方法移除字符串头尾指定的字符#folder = folder.strip()mkdir('val_imagenet_classes/{}'.format(folder))

复制1001行到最后,保存为 file.txt

copy_file_to_dir.py

"""
https://blog.csdn.net/qq_33328642/article/details/122073200
"""
import sys
import cv2
import matplotlib.pyplot as plt
import re,os
from PIL import Image
import numpy as np
from tqdm import tqdmdata = []
for line in open("txt/file.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 tqdm(data):a = a.strip()nameimage = a[3:31]#获取该图像的名称from_img_path = '../ILSVRC2012_img_val/{}'.format(nameimage) # 原来的图片地址# print('from_img_path: ', from_img_path)im = Image.open(from_img_path)  #这个时获取原始验证集ILSVRC2012_img_val中每个图像,因为data中每一行存储一个图像的名称和标签path1 = 'val_imagenet_classes/{}'.format(a[32:-1])#ILSVRC2012_img_val1时新的验证集,ILSVRC2012_img_val1里面有很多以图像类命名的子文件夹im.save(os.path.join(path1, nameimage))#把图像保存在文件中im.close()