• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    有很多博客介绍了如何基于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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    得到类似于这样的文件夹

    在这里插入图片描述

    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的话,移动到该类目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    最后得到类似这样的目录
    在这里插入图片描述

    经过两次变换就完成了划分,实际每张图片对应的类目还是要根据1k数据集提供的json文件(如下图)去查找。
    在这里插入图片描述

  • 相关阅读:
    python自动化测试—Python自动化框架及工具
    【C语言刷LeetCode】1953. 你可以工作的最大周数(M)
    基于Drone+Gogs流水线-全面认识轻量级云原生CI引擎Drone
    Linux16 ---共享内存、操作函数、使用示例
    JSON对象、字符串之间的相互转换
    玩转C语言:深入理解输入输出函数的奥秘
    C. Random Events(思维+概率)
    Leetcode 69.x的平方根
    计算机网络的物理层 基本概念
    Eclipse IDEA VSCode HBuilderX 统一快捷键
  • 原文地址:https://blog.csdn.net/xiaoxiaomo_/article/details/128041819