图像识别实战(一)----数据集的预处理

更新时间:2023-06-17 11:40:40 阅读: 评论:0

图像识别实战(⼀)----数据集的预处理
图像识别实战(⼀)----数据集的预处理
1.模块的导⼊
import os
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch import nn
import torch.optim as optim
import torchvision
from torchvision import transforms,models,datats
import imageio
import time
import warnings
import random
import sys
import copy
import json
from PIL import Image
2.数据集的读取
翻译孙宁身高data_dir ='./flower_data'
train_dir = data_dir+'/train'
valid_dir = data_dir+'/valid'
3.数据集的预处理
southportdata_transforms ={
'train': transforms.Compo([transforms.RandomRotation(45),#随机旋转,-45度到45度之间
transforms.CenterCrop(224),#从中⼼开始裁剪
transforms.RandomHorizontalFlip(p=0.5),#随机⽔平翻转选择⼀个概率
transforms.RandomVerticalFlip(p=0.5),#随机垂直翻转
transforms.ColorJitter(brightness=0.2, contrast=0.1,saturation=0.1, hue=0.1),#参数1为亮度,参数2为对⽐度,参数3为饱和度,参数4为⾊相
transforms.RandomGrayscale(p=0.025),#概率转化为灰度值,3通道就是R=G=B
transforms.ToTensor(),#转化为Tensor格式,在预处理结束后必须添加
transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),#均值,标准差,经过这样处理后的数据符合标准正态分布,即均值为0,标准差为1。使模型更容易收敛。
'valid': transforms.Compo([transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),
transforms.Compo()这个类的主要功能是串联图⽚的变换操作,类似于⼀个列表。
4.数据集的组织与加载
socialmediabatch_size =8
美国南加州大学image_datats ={x:datats.ImageFolder(os.path.join(data_dir, x),data_transforms[x])for x in['train','valid']}
dataloaders ={x: torch.utils.data.DataLoader(image_datats[x], batch_size=batch_size, shuffle=Tru
e)for x in['train','valid']}#就是⽤来包装所使⽤的数据,每次抛出⼀批数据
datat_sizes ={x:len(image_datats[x])for x in['train','valid']}
class_names = image_datats['train'].class
datat=torchvision.datats.ImageFolder(
root,#图⽚存储的根⽬录
transform=None,#图⽚的预处理操作
target_transform=None,#对图⽚类别做预处理操作
loader=<function default_loader>,#数据集加载⽅式
is_valid_file=None)#获取图像⽂件的路径并检查该⽂件是否为有效⽂件
#print(datat.class)  #根据分的⽂件夹的名字来确定的类别
#print(datat.class_to_idx) #按顺序为这些类别定义索引为
外语培训机构加盟
#print(datat.imgs) #返回从所有⽂件夹中得到的图⽚的路径以及其类别
我们打印出 image_datats
{'train': Datat ImageFolder
Number of datapoints:3614
Root location: F:/flower_data/train
少儿英语教学
家庭教育心得StandardTransform
Transform: Compo(
RandomRotation(degrees=(-45,45), resample=Fal, expand=Fal)
CenterCrop(size=(224,224))
RandomHorizontalFlip(p=0.5)
RandomVerticalFlip(p=0.5)
ColorJitter(brightness=[0.8,1.2], contrast=[0.9,1.1], saturation=[0.9,1.1], hue=[-0.1,0.1])
RandomGrayscale(p=0.025)
ToTensor()
Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225])
),
'valid': Datat ImageFolder
在线中译英
Number of datapoints:56
Root location: F:/flower_data/valid
StandardTransform
Transform: Compo(
Resize(size=256, interpolation=PIL.Image.BILINEAR)
CenterCrop(size=(224,224))
optimisticToTensor()
Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225])
)}
我们打印出 datat_sizes 帮助理解{}中的逻辑
{'train':3614,'valid':56}
5.数据集图像展⽰
def im_convert(tensor):
"""展⽰数据"""
image = ('cpu').clone().detach()#将Tensor数据从GPU放到CPU,复制和这个Tensor并且去掉梯度
image = image.numpy().squeeze()#祛除数组中为1 的维度
image = anspo(1,2,0)#Pytorch中为[Channels, H, W],⽽plt.imshow()中则是[H, W, Channels],所以交换⼀下通道    image = image*np.array((0.229,0.224,0.225))+np.array((0.485,0.456,0.406))# 反转⼀下transforms.Normalize()的过程    image = image.clip(0,1)#归⼀化
return image
fig = plt.figure(figsize=(20,12))#设置图像尺⼨
columns =4
rows =2
#我们设置的⼀个batchsize=8,所以dataloaders⾥只有8张图⽚,最多显⽰8张图⽚
dataiter =iter(dataloaders['valid'])#iter()迭代器
inputs, class = ()
not a bad thing
for idx in range(columns*rows):
ax = fig.add_subplot(rows,columns, idx+1,xticks=[], yticks=[])#图像区域划分row⾏,colums列,第idx+1个    ax.t_title(class_names[class[idx].item()])
plt.imshow(im_convert(inputs[idx]))
plt.show()

本文发布于:2023-06-17 11:40:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/148161.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   预处理   图像   类别   件夹
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图