阿里云天池cv入门赛记录(2)——TASK2 数据读取与数据扩增

本文介绍了阿里云天池CV入门赛的TASK2,主要涉及图像数据的读取,如使用Pillow和OpenCV,以及数据扩增的重要性与方法,如解决过拟合、增强模型泛化能力。文章讨论了数据扩增的常见方法,如颜色、尺寸变化,并提到了torchvision、imgaug和albumentations等库。最后,解释了如何在Pytorch中使用Dataset和DataLoader进行数据读取。
摘要由CSDN通过智能技术生成

经过前几天的pytorch安装、anaconda重装等一系列问题,cv小白终于把baseline跑通了!!但是,对于代码仍然有很多地方不理解,好在从TASK2开始,就是对问题的详细讲解了。

任务二的主要内容是数据读取、数据扩增方法和Pytorch读取赛题数据三个部分。

一、常用的图像读取方法
对于图像数据的处理,首先需要完成对图像数据的读取操作,在Pytorch中有很多库可以完成,比较常见的有Pillow和OpenCV。(之前只用过openCV做图像变换,没有了解过Pillow)
1、Pillow
首先放上Pillow的官方文档:https://pillow.readthedocs.io/en/stable/

读取操作可以查看文档中Image的详细用法
在这里插入图片描述
这里教程中指出Pillow可以与ipython notebook无缝集成,是应用比较广泛的库(不知道ipython notebook是啥),同时给出了常用的读取代码和效果。

效果 代码
在这里插入图片描述 from PIL import Image # 导入Pillow库 im = Image.open('cat,jpg') # 读取图片
在这里插入图片描述 from PIL import Image, ImageFilter im = Image.open('cat.jpg') im2 = im.filter(ImageFilter.BLUR) im2.save('blur.jpg', 'jpeg') # 应用模糊滤镜
在这里插入图片描述 from PIL import Image im = Image.open('cat.jpg') im.thumbnail((w//2,h//2)) # 改变图片大小 im.save('thumbnail.jpg', 'jpeg')

2、OpenCV
仍然是先放上官网:https://opencv.org/
OpenCV扩展算法库:https://github.com/opencv/opencv_contrib

OpenCV发展的非常早,拥有众多的及算你视觉、数字图像处理和机器视觉等功能,在功能上比Pillow强大很多,学习成本也更高。

效果 代码
在这里插入图片描述 import cv2 #导入Opencv库 img = cv2.imread(‘cat.jpg’) #Opencv默认颜色通道顺序是BGR,转换一下顺序 img = cv2.cvtColor(img.cv2.COLOR_BGR2RGB)
在这里插入图片描述 import cv2 #导入Opencv库 img = cv2.imread(‘cat.jpg’) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转换为灰度图
在这里插入图片描述 import cv2 #导入Opencv库 img = cv2.imread(‘cat.jpg’) img = cv2.cvtColor(img.cv2.COLOR_BGR2GRAY) edges = cv2.Canny(img, 30, 70) cv2.imwrite(‘canny.jpg’, edges) #Canny边缘检测

此外,Opencv还内置了很多图像特征处理算法,如关键点检测、边缘检测和直线检测等。

二、数据扩增方法

在本次赛题中,我们需要对图像进行字符识别,在读取数据后需要完成数据扩增(Data Augmentation)操作。

1、数据扩增为什么有用?
数据扩增可以增加训练集的样本,同时也可以有效缓解模型过拟合的情况,也可以给模型带来的更强的泛化能力。

在深度学习模型的训练中,数据扩增是必不可少的环节。现有深度学习的参数非常多,一般的模型可训练的参数量基本上都是万到百万级别,而训练集样本的数量很难有这么多。

其次数据扩增可以扩展样本空间,假设现在的分类模型需要对汽车进行分类,左边的是汽车A,右边为汽车B。如果不使用任何数据扩增方法,深度学习模型会从汽车车头的角度来进行判别,而不是汽车具体的区别。
在这里插入图片描述

2、有哪些数据扩增方法?
对于图像分类,数据扩增一般不会改变标签;对于物体检测、数据扩增会改变物体坐标位置;对于图像分割、数据扩增会改变像素标签。

在常见的数据扩增方法中,一般会从图像颜色、尺寸、形态、空间和像素等角度进行变换。以torchvision为例,常见的数据扩增方法包括:

扩增方法 功能
transforms.CenterCrop 对图片中心进行裁剪
transforms.ColorJitter 对图像颜色的对比度、饱和度和零度进行变换
transforms.FiveCrop 对图像四个角和中心进行裁剪得到五分图像
transforms.Grayscale 对图像进行灰度变换
transforms.Pad 使用固定值进行像素填充
transforms.RandomAffine 随机仿射变换
transforms.RandomCrop 随机区域裁剪
transforms.RandomHorizontalFlip 随机水平翻转
transforms.RandomRotation 随机旋转
transforms.RandomVeticalFlip 随机垂直翻转

在这里插入图片描述
在本次赛题中,赛题任务是需要对图像中的字符进行识别,因此对于字符图片并不能进行翻转操作。比如“6”翻转之后就变成“9”.

3、常用的数据扩增库

torchvision:https://github.com/pytorch/vision
Pytorch官方提供的数据扩增库,提供了基本的数据扩增方法,可以无缝与torch进行集成;但数据扩增方法种类较少,且速度中等;

imgaug:https://github.com/aleju/imgaug
imgaug是常用的第三方数据扩增库,提供了多样的数据扩增方法,且组合起来非常方便,速度较快;

albumentations:https://albumentations.readthedocs.io

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值