Datawhale第13期组队学习笔记Task2

Task2主要内容为数据读取、数据扩增方法和Pytorch读取赛题数据三个部分组成。

数据读取

  • PIL

用PIL里面的Image方法读取图片比较简单,直接

im =Image.open(图片名.jpg')

即可。

在这里插入图片描述
而其中包含了一些别的读取方式,如应用模糊滤镜:

im =Image.open('test1.png')
im.filter(ImageFilter.BLUR)

上面是模糊之后的图,下面是原图
上面是模糊之后的图,下面是原图
而OpenCV在功能上比Pillow更加强大很多。

  • OpenCV

OpenCV是一个跨平台的计算机视觉库,最早由Intel开源得来。OpenCV发展的非常早,拥有众多的计算机视觉、数字图像处理和机器视觉等功能。

  • OpenCV读取原图:
img = cv2.imread('test1.png')

在这里插入图片描述
在这里插入图片描述
可以看到,OpenCV读取图片后,是以图像矩阵的方式存储的。
在这里插入图片描述

opencv读取图像后,输出的shape为(HW3),如下:H:行数,W:列数,3:3通道,在opencv中默认的颜色空间是BGR,同时像素值为0-255。而PIL则是以RGB三通道存储。

  • OpenCV读灰度图:
img = cv2.imread('test1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

在这里插入图片描述

  • opencv边缘检测

用的是Canny算子实现的边缘检测

img = cv2.imread('test1.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(img, 30, 70)
cv2.imshow('edges',edges)
cv2.waitKey(0)

在这里插入图片描述

数据扩增

  • 数据扩增为什么有用?

在深度学习模型的训练过程中,数据扩增是必不可少的环节。现有深度学习的参数非常多,一般的模型可训练的参数量基本上都是万到百万级别,而训练集样本的数量很难有这么多。
其次数据扩增可以扩展样本空间,假设现在的分类模型需要对汽车进行分类,左边的是汽车A,右边为汽车B。如果不使用任何数据扩增方法,深度学习模型会从汽车车头的角度来进行判别,而不是汽车具体的区别。

  • 有哪些数据扩增方法?

数据扩增方法有很多:从颜色空间、尺度空间到样本空间,同时根据不同任务数据扩增都有相应的区别。
对于图像分类,数据扩增一般不会改变标签;对于物体检测,数据扩增会改变物体坐标位置;对于图像分割,数据扩增会改变像素标签。

  • 常见的数据扩增方法

在常见的数据扩增方法中,一般会从图像颜色、尺寸、形态、空间和像素等角度进行变换。当然不同的数据扩增方法可以自由进行组合,得到更加丰富的数据扩增方法。

以torchvision为例,常见的数据扩增方法包括:

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

注意:在本次赛题中,赛题任务是需要对图像中的字符进行识别,因此对于字符图片并不能进行翻转操作。比如字符6经过水平翻转就变成了字符9,会改变字符原本的含义。

下图是几个图像变换操作:

              transforms.Resize((64, 128))

              # 随机颜色变换
              transforms.ColorJitter(0.2, 0.2, 0.2)

              # 加入随机旋转
              transforms.RandomRotation(5)

              # 将图片转换为pytorch 的tesntor
              transforms.ToTensor()

              # 对图像像素进行归一化
              transforms.Normalize([0.485,0.456,0.406][0.229,0.224,0.225])
            ]))

在这里插入图片描述
而使用compose可以将多个图像变换操作一起执行

          p = transforms.Compose([
              # 缩放到固定尺寸
              transforms.Resize((64, 128)),

              # 随机颜色变换
              transforms.ColorJitter(0.2, 0.2, 0.2),

              # 加入随机旋转
              transforms.RandomRotation(5),

              # 将图片转换为pytorch 的tesntor
              # transforms.ToTensor(),

              # 对图像像素进行归一化
              # transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
            ])
im =Image.open('test1.png')
im = p(im)
im

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值