mini-imagenet
miniImageNet包含100类共60000张彩色图片,其中每类有600个样本,每张图片的大小被resize到了84×84。这里,这个数据集的训练集和测试集的类别划分为:5:1。相比于CIFAR10数据集,miniImageNet数据集更加复杂,但更适合进行原型设计和实验研究。
https://studio.brainpp.com/dataset/2313?name=mini_imagenet
下载过程
注册账号-启动环境-在dataset文件夹找到mini-imagenet数据集压缩包-将其拖动到workspace文件夹-右击压缩包-点击download即可
数据处理过程

# -*- coding: utf-8 -*-
"""
这部分程序可以将放在一起的图片按照训练集测试集和验证集分开
但是有个问题
因为这个数据集是从imagenet抽取出来的
训练集测试集、测试集和验证集的数据类别都不相同
其类别总数是100类
这意味着我们不能从头开始训练
因此还需要对这个数据集进行重新划分
"""import csv
import os
from PIL import Image
train_csv_path="./mini_imagenet/train.csv"
val_csv_path="./mini_imagenet/val.csv"
test_csv_path="./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="./mini_imagenet/images"
new_img_path="./mini_imagenet/images_OK"
for png in os.listdir(img_path):path = img_path+ '/' + pngim=Image.open(path)if(png in train_label.keys()):tmp=train_label[png]temp_path=new_img_path+'/train'+'/'+tmpif(os.path.exists(temp_path)==False):os.makedirs(temp_path)t=temp_path+'/'+pngim.save(t)# with open(temp_path, 'wb') as f:#     f.write(path)elif(png in val_label.keys()):tmp = val_label[png]temp_path = new_img_path + '/val' + '/' + tmpif (os.path.exists(temp_path) == False):os.makedirs(temp_path)t = temp_path + '/' + pngim.save(t)elif(png in test_label.keys()):tmp = test_label[png]temp_path = new_img_path + '/test' + '/' + tmpif (os.path.exists(temp_path) == False):os.makedirs(temp_path)t = temp_path + '/' + pngim.save(t)

运行完这段程序可以得到如下数据分布

train类别1image1image2类别2image1image2……
test类别3image1image2类别4image1image2……
test类别5image1image2类别6image1image2……

将所有的类别都放到一个data文件夹里
得到如下数据分布

data类别1image1image2image3……类别2image1image2image3…………
# -*- coding: utf-8 -*-
"""
这段代码会从data数据的每个类别中抽取一定比例(可以自己定,这里是1/6)的数据重新组成一个测试集(注意不是拷贝是剪切)
"""import os
import random
import shutil# source_file:源路径, target_ir:目标路径
def cover_files(source_dir, target_ir):for file in os.listdir(source_dir):source_file = os.path.join(source_dir, file)if os.path.isfile(source_file):shutil.copy(source_file, target_ir)def ensure_dir_exists(dir_name):"""Makes sure the folder exists on disk.Args:dir_name: Path string to the folder we want to create."""if not os.path.exists(dir_name):os.makedirs(dir_name)def moveFile(file_dir, save_dir):ensure_dir_exists(save_dir)path_dir = os.listdir(file_dir)    #取图片的原始路径filenumber=len(path_dir)rate=0.1667    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片print(picknumber)sample = random.sample(path_dir, picknumber)  #随机选取picknumber数量的样本图片# print (sample)for name in sample:shutil.move(file_dir+name, save_dir+name)def mkdir(path):folder = os.path.exists(path)if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹os.makedirs(path)            #makedirs 创建文件时如果路径不存在会创建这个路径print("---  new folder...  ---")print("---  OK  ---")else:print("---  There is this folder!  ---")if __name__ == '__main__':path='./mini_imagenet/image_CDD/'dirs = os.listdir( path+'data/' )for file in dirs:file_dir = path+'data/'+file+'/'  #源图片文件夹路径print(file_dir)save_dir = path+'test/'+file  #移动到新的文件夹路径print(save_dir)mkdir(save_dir)  #创造文件夹save_dir = save_dir+'/'moveFile(file_dir, save_dir)

抽取完成的的数据分布如下,可见将一个完整的数据集按照一定比例拆分为了训练集(data)和测试集
记得将data改为train

data类别1image3……类别2image2image3…………
test类别1image3……类别2image1…………

最后使用pytorch导入模型

# -*- coding: utf-8 -*-
"""
保证数据分布如上即可
"""import torch.utils.data
import torch.utils.data.distributed
import torchvision.transforms as transforms
import torchvision.datasets as datasets
# from wideresnet import WideResNetBATCH_SIZE = 4
transform_train = transforms.Compose([transforms.RandomResizedCrop(224),transforms.RandomVerticalFlip(),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # 归一化处理# 需要更多数据预处理,自己查
])
transform_test = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # 归一化处理# 需要更多数据预处理,自己查
])#读取数据
dataset_train = datasets.ImageFolder('./mini_imagenet/image_CDD/train', transform_train)
dataset_test = datasets.ImageFolder('./mini_imagenet/image_CDD/test', transform_test)
#dataset_val = datasets.ImageFolder('data/val', transform)# 上面这一段是加载测试集的
train_loader = torch.utils.data.DataLoader(dataset_train, batch_size=BATCH_SIZE, shuffle=True) # 训练集
test_loader = torch.utils.data.DataLoader(dataset_test, batch_size=BATCH_SIZE, shuffle=True) # 测试集
#val_loader = torch.utils.data.DataLoader(dataset_val, batch_size=BATCH_SIZE, shuffle=True) # 验证集
# 对应文件夹的label
print(dataset_train.class_to_idx)   # 这是一个字典,可以查看每个标签对应的文件夹,也就是你的类别。# 训练好模型后输入一张图片测试,比如输出是99,就可以用字典查询找到你的类别名称
print(dataset_test.class_to_idx)
#print(dataset_val.class_to_idx)

mini-imagenet数据处理过程_从头开始训练相关推荐

  1. 的训练过程_【能力模式】能力培养是一个训练过程,掌握三个要点,一个诀窍...

    人的能力是个训练的过程,这句话有多少人能懂呢?有多少人能够把这句话切实地执行呢?有多少人能够把这句话变成一种教育理念呢?我想人的能力是一个训练的过程,这句话能够完整地理解的,那你的生命中一定会变得精彩 ...

  2. 从头开始训练一个 NER 标注器

    文章目录 从头开始训练一个 NER 标注器 一.自定义模型 1.导入所需要的包与模块 2.导入训练样本 二.训练模型 1.对现有的模型进行优化 2.创建内置管道组件 3.添加train data的标签 ...

  3. 从头开始训练自己的 Tesseract 5 LSTM 识别库(超详细)

    最新工作中涉及到OCR的内容,用了百度的OCR精度不错,但是速度有点慢,看网上有提到Tesseract这一开源的项目,下载试了一试发现速度是比百度快不少,但是精度差很多,所以研究了下怎么可以提高识别的 ...

  4. 谷歌新作:视觉Transformer超越ResNet!!!从头开始训练!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 When Vision Transformers Outperform ResNets without ...

  5. 信息抽取(一)机器阅读理解——样本数据处理与Baseline模型搭建训练(2020语言与智能技术竞赛)

    机器阅读理解--样本数据处理与Baseline模型搭建训练 前言 样本数据处理 数据测试 模型部分 模型构建 模型训练 部分推理结果 总结 前言 最近看到今年早些时候百度的"2020语言与智 ...

  6. 从头开始训练一个依存分析器

    文章目录 从头开始训练一个依存分析器 重要概念 关系标签 标注关系 应用场景 一.自定义模型 1.导入所需要的包与模块 2.导入训练样本 二.训练模型 1.模型参数的注解(语种.输出目录以及训练迭代次 ...

  7. 从头开始训练一个词性标注模型

    文章目录 从头开始训练一个词性标注模型 自定义模型 一.导入所需要的包与模块 二.自定义词性 三.词性标注 训练模型 一.模型参数的注解(语种.输出目录以及训练迭代次数) 二.创建一个空白的语言模型 ...

  8. 深度学习笔记13_猫狗分类案例 - 从头开始训练一个神经网络

    在小型数据集上从头开始训练一个卷积神经网络 小型数据集的模型构建的策略 小型数据集:"很少的"样本可能是几百张图像,也可能是几万张图像. 接下来的示例中,主要用来猫狗分类:4000 ...

  9. RocketMQ Streams拓扑构建与数据处理过程

    本文作者:倪泽,Apache RocketMQ committer.RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams 1.1.0版本已 ...

最新文章

  1. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
  2. 人脸识别简史与近期进展
  3. win10切换输入法快捷键_输入法失灵怎么办?该怎么恢复?
  4. php ip操作,ip操作 · PHP 个人常用知识总结 · 看云
  5. 牛了!Python最容易入的10个坑!
  6. 跟踪某个类所创建对象的个数
  7. 听说你想当黑客,我只能帮你到这了
  8. 个人博客系统测试用例
  9. 这是浙江大学郑强教授的经典语录 虽然我不完全赞同但对他的精神佩服的五体投地...
  10. 正北坐标系和车辆坐标系下的heading转换
  11. 来答疑了!关于网易云信 Innovation 2022 开发者大赛,你想知道的都在这儿!
  12. 征战星辰大海,从这里开始
  13. 诗经 - 小雅 - 四杜
  14. 毫米波雷达技术应用,飞睿科技人体存在感应检测模块
  15. 漏洞通告 | Oracle发布7月更新, 修复墨云科技报告的高危漏洞
  16. 中文Linux版本概览(转)
  17. GitHub 标星 21.2 K:高颜值 Markdown 编辑器开源了!
  18. 地球实时卫星图片资源-与当前时间只相差30分钟
  19. 等差数列java用等差公式写_等差数列求和公式及推导方法
  20. openstack云平台简述

热门文章

  1. 通信标准3之PUSCH频率域资源分配
  2. RTKLIB专题学习(六)---单点定位应用(二)
  3. 有些政府性质的网站对非IE浏览器不怎么支持,该如何处理?
  4. iconv 转换字符编码,兼容VC转换
  5. live2d 看板娘 简单添加看版娘到自己的网站
  6. 如何关闭iOS系统自动更新?最新屏蔽升级描述文件下载
  7. Sipeed RISC-V调试器(ft2232d)调试longan,使用MounRiver Studio
  8. 外星人 NVIDIA GeForce GTX 全系列显卡超频程序【旗舰绿色版】v1.0.36
  9. 匈牙利算法的MATLAB实现
  10. 电力工程师 计算机英语,电力工程师的英文求职信