数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集、验证集



数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集

Oxford Flower102数据集链接:https://www.robots.ox.ac.uk/~vgg/data/flowers/102/
参考:https://www.jianshu.com/p/71d4a8c1b68b

1、Flower102鲜花分类数据集概览及下载

数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集、验证集
  1. 下载上图的145,1解压后可得到一个包含8189张.jpg格式的图片(放在jpg文件夹中)以及imagelabels.mat和setid.mat。
  2. 数据集结构:
    -imagelabels.mat:总共有8189列,每列上的数字代表类别号。
    -setid.mat:
    trnid.mat:总共有1020列,每10列为一类花卉的图片,每列上的数字代表图片号。
    valid.mat:总共有1020列,每10列为一类花卉的图片,每列上的数字代表图片号。
    tstid.mat:总共有6149列,每一类花卉的列数不定,每列上的数字代表图片

; 2、准备工作

在项目中新建文件夹prepare_pic,再在prepare_pic下新建文件夹test、train、validation。之后会把数据分进这三个文件夹中。把jpg文件夹(包含8189张.jpg格式图片)、imagelabels.mat和setid.mat如图所示放好。data_prepare.ipynb用来数据集处理。

数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集、验证集

3、实现数据集划分

3.1 引入所需库


import scipy.io
import numpy as np
import os
from PIL import Image
import shutil

3.2 获取label

labels = scipy.io.loadmat('imagelabels.mat')
labels = np.array(labels['labels'][0]) - 1
print("labels:", labels)

3.3 用data split的setid,分出validation、train、test

setid = scipy.io.loadmat('setid.mat')

validation = np.array(setid['valid'][0]) - 1
np.random.shuffle(validation)

train = np.array(setid['trnid'][0]) - 1
np.random.shuffle(train)

test = np.array(setid['tstid'][0]) - 1
np.random.shuffle(test)

3.4 把数据导进flower_dir

flower_dir = list()

for img in os.listdir("..\\flower_data\\jpg"):
    flower_dir.append(os.path.join("..\\flower_data\\jpg", img))

flower_dir.sort()

3.5 根据setid分出的train,把训练数据放进train文件夹

des_folder_train = "train"
for tid in train:

    img = Image.open(flower_dir[tid])
    print(img)

    img = img.resize((256, 256), Image.ANTIALIAS)
    lable = labels[tid]

    path = flower_dir[tid]
    print("path:", path)
    base_path = os.path.basename(path)
    print("base_path:", base_path)
    classes = "c" + str(lable)
    class_path = os.path.join(des_folder_train, classes)

    if not os.path.exists(class_path):
        os.makedirs(class_path)
    print("class_path:", class_path)
    despath = os.path.join(class_path, base_path)
    print("despath:", despath)
    img.save(despath)

3.6 根据setid分出的validation,把验证数据放进validation文件夹

des_folder_validation = "validation"

for tid in validation:
    img = Image.open(flower_dir[tid])

    img = img.resize((256, 256), Image.ANTIALIAS)
    lable = labels[tid]

    path = flower_dir[tid]
    print("path:", path)
    base_path = os.path.basename(path)
    print("base_path:", base_path)
    classes = "c" + str(lable)
    class_path = os.path.join(des_folder_validation, classes)

    if not os.path.exists(class_path):
        os.makedirs(class_path)
    print("class_path:", class_path)
    despath = os.path.join(class_path, base_path)
    print("despath:", despath)
    img.save(despath)

3.7 根据setid分出的test,把测试数据放进test文件夹

des_folder_test = "test"

for tid in test:
    img = Image.open(flower_dir[tid])

    img = img.resize((256, 256), Image.ANTIALIAS)
    lable = labels[tid]

    path = flower_dir[tid]
    print("path:", path)
    base_path = os.path.basename(path)
    print("base_path:", base_path)
    classes = "c" + str(lable)
    class_path = os.path.join(des_folder_test, classes)

    if not os.path.exists(class_path):
        os.makedirs(class_path)
    print("class_path:", class_path)
    despath = os.path.join(class_path, base_path)
    print("despath:", despath)
    img.save(despath)

4、最终结果

数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集、验证集

Original: https://blog.csdn.net/weixin_44031582/article/details/121957524
Author: 栗子酱15551
Title: 数据集划分,Oxford Flower102花卉分类数据集,分为训练集、测试集、验证集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/665533/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球