mini-imagenet数据处理过程_从头开始训练
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数据处理过程_从头开始训练相关推荐
- 的训练过程_【能力模式】能力培养是一个训练过程,掌握三个要点,一个诀窍...
人的能力是个训练的过程,这句话有多少人能懂呢?有多少人能够把这句话切实地执行呢?有多少人能够把这句话变成一种教育理念呢?我想人的能力是一个训练的过程,这句话能够完整地理解的,那你的生命中一定会变得精彩 ...
- 从头开始训练一个 NER 标注器
文章目录 从头开始训练一个 NER 标注器 一.自定义模型 1.导入所需要的包与模块 2.导入训练样本 二.训练模型 1.对现有的模型进行优化 2.创建内置管道组件 3.添加train data的标签 ...
- 从头开始训练自己的 Tesseract 5 LSTM 识别库(超详细)
最新工作中涉及到OCR的内容,用了百度的OCR精度不错,但是速度有点慢,看网上有提到Tesseract这一开源的项目,下载试了一试发现速度是比百度快不少,但是精度差很多,所以研究了下怎么可以提高识别的 ...
- 谷歌新作:视觉Transformer超越ResNet!!!从头开始训练!
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 When Vision Transformers Outperform ResNets without ...
- 信息抽取(一)机器阅读理解——样本数据处理与Baseline模型搭建训练(2020语言与智能技术竞赛)
机器阅读理解--样本数据处理与Baseline模型搭建训练 前言 样本数据处理 数据测试 模型部分 模型构建 模型训练 部分推理结果 总结 前言 最近看到今年早些时候百度的"2020语言与智 ...
- 从头开始训练一个依存分析器
文章目录 从头开始训练一个依存分析器 重要概念 关系标签 标注关系 应用场景 一.自定义模型 1.导入所需要的包与模块 2.导入训练样本 二.训练模型 1.模型参数的注解(语种.输出目录以及训练迭代次 ...
- 从头开始训练一个词性标注模型
文章目录 从头开始训练一个词性标注模型 自定义模型 一.导入所需要的包与模块 二.自定义词性 三.词性标注 训练模型 一.模型参数的注解(语种.输出目录以及训练迭代次数) 二.创建一个空白的语言模型 ...
- 深度学习笔记13_猫狗分类案例 - 从头开始训练一个神经网络
在小型数据集上从头开始训练一个卷积神经网络 小型数据集的模型构建的策略 小型数据集:"很少的"样本可能是几百张图像,也可能是几万张图像. 接下来的示例中,主要用来猫狗分类:4000 ...
- RocketMQ Streams拓扑构建与数据处理过程
本文作者:倪泽,Apache RocketMQ committer.RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams 1.1.0版本已 ...
最新文章
- BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
- 人脸识别简史与近期进展
- win10切换输入法快捷键_输入法失灵怎么办?该怎么恢复?
- php ip操作,ip操作 · PHP 个人常用知识总结 · 看云
- 牛了!Python最容易入的10个坑!
- 跟踪某个类所创建对象的个数
- 听说你想当黑客,我只能帮你到这了
- 个人博客系统测试用例
- 这是浙江大学郑强教授的经典语录 虽然我不完全赞同但对他的精神佩服的五体投地...
- 正北坐标系和车辆坐标系下的heading转换
- 来答疑了!关于网易云信 Innovation 2022 开发者大赛,你想知道的都在这儿!
- 征战星辰大海,从这里开始
- 诗经 - 小雅 - 四杜
- 毫米波雷达技术应用,飞睿科技人体存在感应检测模块
- 漏洞通告 | Oracle发布7月更新, 修复墨云科技报告的高危漏洞
- 中文Linux版本概览(转)
- GitHub 标星 21.2 K:高颜值 Markdown 编辑器开源了!
- 地球实时卫星图片资源-与当前时间只相差30分钟
- 等差数列java用等差公式写_等差数列求和公式及推导方法
- openstack云平台简述
热门文章
- 通信标准3之PUSCH频率域资源分配
- RTKLIB专题学习(六)---单点定位应用(二)
- 有些政府性质的网站对非IE浏览器不怎么支持,该如何处理?
- iconv 转换字符编码,兼容VC转换
- live2d 看板娘 简单添加看版娘到自己的网站
- 如何关闭iOS系统自动更新?最新屏蔽升级描述文件下载
- Sipeed RISC-V调试器(ft2232d)调试longan,使用MounRiver Studio
- 外星人 NVIDIA GeForce GTX 全系列显卡超频程序【旗舰绿色版】v1.0.36
- 匈牙利算法的MATLAB实现
- 电力工程师 计算机英语,电力工程师的英文求职信