分享

数据资源-MiniImageNet数据集解析及分享

 知识分享家 2021-04-19

AI研习图书馆,发现不一样的世界

MiniImageNet数据解析

简介



MiniImageNet数据集节选自ImageNet数据集。ImageNet是一个非常有名的大型视觉数据集,它的建立旨在促进视觉识别研究。训练ImageNet数据集需要消耗大量的计算资源。ImageNet为超过1400万张图像进行了注释,而且给至少100万张图像提供了边框。

ImageNet包含2万多个类别,比如:“气球”、“轮胎”和“狗”等类别,ImageNet的每个类别均有不少于500张图像。

训练这么多图像需要消耗大量的资源,因此在2016年google DeepMind团队Oriol Vinyals等人在ImageNet的基础上提取出了miniImageNet数据集。

MiniImageNet和omniglot数据集在图像分类、元学习和小样本学习领域应用广泛,但是网络上鲜有对miniImageNet数据集的介绍,因此在这里对这个数据集做了一个简要的介绍。

为了给大家提供便利,数据集已保存至百度网盘,公众号后台回复“MiniImageNet”,即可获取下载链接,同时可获得mnist、cifar10、market1501和omniglot等多个数据资源网盘下载链接~

我是一个无情的数据集搬运工,欢迎收藏~

数据集解析

数据来源

DeepMind团队首次将miniImageNet数据集用于小样本学习研究,从此miniImageNet成为了元学习和小样本领域的基准数据集。

DeepMind的那篇小样本学习的论文就是大名鼎鼎的Matching Network的来源: Matching Networks for One Shot Learning

MiniImageNet包含100类,共60000张彩色图片,其中每类有600个样本,每张图片的规格为84×84。通常而言,这个数据集的训练集和测试集的类别划分为:80:20。相比于CIFAR10数据集,miniImageNet数据更加复杂,但更适合进行原型设计和实验研究。

数据集架构

mini-imagenet一共有2.86GB,文件架构如下:

数据集中图片示例:


数据处理代码

MiniImagenet数据集的结构为:所有的照片放在一个文件夹中,另外有三个csv文件分别是:train.csv,val.csv,test.csv,三个csv文件都有两列,第一列是文件名,第二列是标签。我在使用数据集时,把train数据,test数据,val数据分别都保存到对应的标签下。

处理后的目录结构如下:

具体处理代码:

import csv
import os

from PIL import Image

train_csv_path="D:/Desktop/mini-imagenet/mini-imagenet/train.csv"
val_csv_path="D:/MMatx/Desktop/mini-imagenet/mini-imagenet/val.csv"
test_csv_path="D:/MMatx/Desktop/mini-imagenet/mini-imagenet/test.csv"

train_label={}
val_label={}
test_label={}
with open(train_csv_path) as csvfile:
csv_reader=csv.reader(csvfile)
birth_header=next(csv_reader)
for row in csv_reader:
train_label[row[0]]=row[1]

with open(val_csv_path) as csvfile:
csv_reader=csv.reader(csvfile)
birth_header=next(csv_reader)
for row in csv_reader:
val_label[row[0]]=row[1]

with open(test_csv_path) as csvfile:
csv_reader=csv.reader(csvfile)
birth_header=next(csv_reader)
for row in csv_reader:
test_label[row[0]]=row[1]

img_path="D:/Desktop/mini-imagenet/mini-imagenet/images"
new_img_path="D:/Desktop/mini-imagenet/mini-imagenet/ok"
for png in os.listdir(img_path):
path = img_path+ '/' + png
im=Image.open(path)
if(png in train_label.keys()):
tmp=train_label[png]
temp_path=new_img_path+'/train'+'/'+tmp
if(os.path.exists(temp_path)==False):
os.makedirs(temp_path)
t=temp_path+'/'+png
im.save(t)
# with open(temp_path, 'wb') as f:
#     f.write(path)

elif(png in val_label.keys()):
tmp = train_label[png]
temp_path = new_img_path + '/val' + '/' + tmp
if (os.path.exists(temp_path) == False):
os.makedirs(temp_path)
t = temp_path + '/' + png
im.save(t)

elif(png in test_label.keys()):
tmp = train_label[png]
temp_path = new_img_path + '/test' + '/' + tmp
if (os.path.exists(temp_path) == False):
os.makedirs(temp_path)
t = temp_path + '/' + png
im.save(t)

涉及到的python知识:

1、python独写csv文件

使用python I/O读取csv文件是按照行读取,每一行都是一个List列表,可以通过使用List列表带获取每一行每一列的元素

2、python判断文件/目录是否存在

(1)判断文件是否存在:os.path.exists(path)

(2)新建一个目录:os.makedirs(path)

3、将图片保存在新的文件夹

使用 fromPIL import  Image

img=Image.open(path)

img.save(new_path)

4、python中自带的glob支持文件的通配检索

小结

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多