mini-Imagenet处理

由于imagenet-1k 数据集太大,在验证模型方面耗时太久,特意研究了一下mini-Imagenet,用来代替imageNet-1K数据集。

2016年google DeepMind团队从Imagnet数据集中抽取的一小部分(大小约3GB)制作了Mini-Imagenet数据集,共有100个类别,每个类别都有600张图片,共60000张(都是.jpg结尾的文件),而且图像的大小并不是固定的。

下载好的目录结构如下:

├── mini-imagenet: 数据集根目录
     ├── images: 所有的图片都存在这个文件夹中
     ├── train.csv: 对应训练集的标签文件 38400 imgs
     ├── val.csv: 对应验证集的标签文件 9600 imgs
     └── test.csv: 对应测试集的标签文件 12000 imgs

有很多博客介绍了如何基于CSV文件进行构建数据集训练,这里我主要将其修改为Imagenet-1k 原始的文件夹形式,也就是一个文件夹对应一个类,方便使用ImageFolder进行读取。

按照常用8:2的比例划分为训练集和验证集,也就是训练集48000张imgs,验证集12000imgs
出于方便,直接采用了https://blog.csdn.net/qq_37541097/article/details/113027489这个博主生成的新的CSV训练和验证划分,也就是新生成的new_train.csv,new_val.csv
这里一并提供:
https://download.csdn.net/download/xiaoxiaomo_/87156448

下边主要介绍如何根据该CSV文件划分为原始的形式:
1.根据CSV读取train/val文件到train/val文件夹
这一步会得到train、val文件夹,里边包含各自的训练文件。

import pandas as pd
import os 

#读取CSV文件,获取所有的img文件名称
test_csv = "/home/zhaogy/Workspace/Study/mini_imagenet/mini-Imagenet/new_train.csv"
data=pd.read_csv(test_csv)
#print(data,type(data))

test_filename = list(data["filename"].values)
#print(test_filename)
#print(len(test_filename))

dst = "./new_train/"  #提前创建一个新的train文件夹,将CSV对应的train img 复制到文件夹中
for i,name in enumerate(test_filename):
    imgx = os.path.join("./mini-Imagenet/images",name)
    print(f"第{i}张图片已经copy完成")
    print(imgx)
    shutil.copy(imgx,dst)

得到类似于这样的文件夹

mini-Imagenet处理_第1张图片

  1. 创建每个类的文件夹,并移动img到该文件夹下
files = os.listdir("./new_train/") #上一步创建的文件夹
pre = "./new_train/"

for i,img in enumerate(files):

    #1. 首先遍历每个文件,创建文件夹
    #n0153282900000138.jpg
    dir_name = img.split(".")[0][:9]  #这里就是为了截取label,根据img name 前9个为label
    dir_path = pre+dir_name
    #print(dir_path)
    if not os.path.exists(dir_path):
        os.mkdir(dir_path) #创建该类文件夹

    #直接判断该文件,归类
    img_path=pre+img
    if not os.path.isdir(img_path):
        if img[:9]==dir_name:   #由于每个类包含很多img文件,判断该文件是否属于该类
            shutil.move(img_path,dir_path) #true的话,移动到该类目录

最后得到类似这样的目录
mini-Imagenet处理_第2张图片

经过两次变换就完成了划分,实际每张图片对应的类目还是要根据1k数据集提供的json文件(如下图)去查找。
mini-Imagenet处理_第3张图片

你可能感兴趣的:(计算机视觉,机器学习,python,人工智能)