零基础入门CV之街道字符识别 Task2 数据读取与数据扩增
2020-06-03 05:28
441 查看
数据读取方法
Pillow
Pillow是Python图像处理函式库(PIL)的一个分支。
首先安装pillow
pip install --upgrade pillow
要从文件加载图像,使用Image中的open()函数
from PIL import Image im = Image.open("D:\jiejing\mchar_train\\000520.png") im.show()
(路径中0前面得是\\,若是\则报错)
获取属性
print(im.format, im.size, im.mode)
更多图像处理操作可见Pillow官方文档 https://pillow.readthedocs.io/en/stable/
Opencv
OpenCV是一个跨平台的计算机视觉库,拥有众多的计算机视觉、数字图像处理和机器视觉等功能。
首先安装OpenCV
pip install --upgrade opencv-Python
import cv2 img = cv2.imread('D:\jiejing\mchar_train\\000521.png') #读入图片 cv2.namedWindow('image', cv2.WINDOW_NORMAL) #初始化一个窗口 cv2.imshow('image',img) #在窗口中显示图片,有两个参数 :窗口名称与图片变量 cv2.waitKey(0) #绑定键盘动作 cv2.destroyAllWindows() #按下任意键关闭显示图片的窗口
更多图像处理操作可见Opencv官方文档
https://opencv.org/
数据扩增方法
数据扩增可以增加训练集的样本,同时也可以有效缓解模型过拟合的情况,也可以给模型带来的更强的泛化能力。
torchvision
torchvision包括流行的数据集、模型结构和用于计算机视觉的常见图像转换。
torchvision.transforms.Compose(transforms) #将几个变换组合在一起 torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0) #改变图像的亮度、对比度和饱和度 torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None) #按角度旋转图像 torchvision.transforms.Resize(size, interpolation=2) #将输入PIL图像的大小调整为给定的大小
imgaug
常用的第三方数据扩增库,提供了多样的数据扩增方法,且组合起来非常方便,速度较快。
albumentations
常用的第三方数据扩增库,提供了多样的数据扩增方法,对图像分类、语义分割、物体检测和关键点检测都支持,速度较快。
Pytorch读取数据
Dataset:对数据集的封装,提供索引方式的对数据样本进行读取
DataLoder:对Dataset进行封装,提供批量读取的迭代读取
import os, sys, glob, shutil, json import cv2 from PIL import Image import numpy as np import torch from torch.utils.data.dataset import Dataset #Dataset 是 PyTorch 中用来表示数据集的一个抽象类 import torchvision.transforms as transforms class SVHNDataset(Dataset): def __init__(self, img_path, img_label, transform=None): self.img_path = img_path self.img_label = img_label if transform is not None: self.transform = transform else: self.transform = None def __getitem__(self, index): #__getitem__:实现这个方法后,可以通过下标的方式( dataset[i] )的来取得第 i 个数据 img = Image.open(self.img_path[index]).convert('RGB') if self.transform is not None: img = self.transform(img) # 原始SVHN中类别10为数字0 lbl = np.array(self.img_label[index], dtype=np.int) lbl = list(lbl) + (5 - len(lbl)) * [10] #默认识别五个数 return img, torch.from_numpy(np.array(lbl[:5])) def __len__(self): #__len__:数据集大小 return len(self.img_path) train_path = glob.glob('D:\jiejing\mchar_train/*.png') train_path.sort() train_json = json.load(open('D:\jiejing\mchar_train.json')) train_label = [train_json[x]['label'] for x in train_json] train_loader = torch.utils.data.DataLoader( SVHNDataset(train_path, train_label, transforms.Compose([ transforms.Resize((64, 128)), transforms.ColorJitter(0.3, 0.3, 0.2), transforms.RandomRotation(5), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])), batch_size=10, # 每批样本个数 shuffle=False, # 是否打乱顺序 num_workers=0, # 读取的线程个数 ) for data in train_loader: break
在加入DataLoder后,数据按照批次获取,每批次调用Dataset读取单个样本进行拼接。此时data的格式为:
torch.Size([10, 3, 64, 128]), torch.Size([10, 6])
前者为图像文件,为batchsize * chanel * height * width次序;后者为字符标签。
相关文章推荐
- 【学习记录】零基础入门CV之街道字符识别-Task 2:数据读取与数据扩增4.92
- 阿里天池-零基础入门CV赛事- 街景字符编码识别-数据读取与数据扩增
- Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
- Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
- Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
- Datawhale零基础⼊⻔CV-Task2 数据读取与数据扩增
- 零基础入门CV之街道字符识别 Task3 字符识别模型
- 天池CV赛事-街景字符编码识别(二)—— 数据读取与数据扩增
- 零基础入门CV赛事- 数据读取与数据扩增
- 零基础入门CV之街道字符识别(三)
- 零基础⼊⻔CV-Task2 数据读取与数据扩增
- 零基础入门CV之街道字符识别(二)
- 【学习记录】零基础入门CV之街道字符识别-Task5 模型集成
- 【学习记录】零基础入门CV之街道字符识别-Task3 字符识别模型
- 【学习记录】day2 Task2 数据读取与数据扩增(Datawhale 零基础⼊⻔CV)
- Datawhale 零基础入门CV - Task 02 数据读取与数据扩增
- 【学习记录】零基础入门CV之街道字符识别-Task1 赛题理解4.92
- 【学习笔记】零基础入门CV之街道字符识别-模型训练与验证
- 【学习笔记】零基础入门CV之街道字符识别-赛题理解
- 阿里天池-零基础入门CV赛事- 街景字符编码识别-赛题理解