Task2 数据读取与数据扩增
学习情况
数据扩增方法
常见的有一下几种:
- transforms.CenterCrop 对图片中心进行剪裁
- transforms.ColorJitter 对图像颜色的对比度、饱和度和零度进行变换
- transforms.FiveCrop 对图像的四个角和中心进行剪裁得到五分图像
- transforms.Grayscale 对图像进行灰度变换
- transforms.Pad 使用固定值进行像素填充
- transforms.RandomAffine 随机仿射变化
- transforms.RandomCrop 随机区域剪裁
- transforms.RandomHorizontalFlip 随机水平翻转
- transforms.RandomRotation 随机旋转
- transforms.RandomVerticalFlip 随机垂直翻转
这边取本人毕设涉及到的几种扩增方法,使用一下4中方法,并放出效果对比,分别是:
transforms.CenterCrop
import torchvision.transforms
import PIL.Image as Img
image = Img.open("cat.jpg")
print(image.size, image.format, image.mode)
crop_img = torchvision.transforms.CenterCrop((200,200))
image = crop_img(image)
image.save('cat_crop.jpg') # format='JPG')
这边有个地方,输出如果是设置了format:image.save('cat_crop.jpg'), format='JPG')
就会报错,不知道为什么,Pillow
应该是支持读写JPG格式的。
保存图像的时候还可以设置图片质量参数quality
。值的范围从1(最差)到95(最佳),默认值为75。
transforms.RandomCrop
代码同上,只是改了调用方法
很明显这边就是随机剪裁了。
transforms.ColorJitter
torchvision.transforms.ColorJitter(brightness=0.1,saturation=0.2,contrast=0.2,hue=0.1)
这边可以设置四个参数:亮度、对比度、饱和度、色调
transforms.Pad
torchvision.transforms.Pad(padding=50, fill=0, padding_mode='reflect')
padding
是设置填充像素值的参数
fill= (int or tuple)
填充的值是什么(仅当填充模式为constant时有用)。int时,各通道均填充该值,当长度为3的tuple时,表示RGB通道需要填充的值。
padding_mode
填充方法,有constant
(固定值),edge
(边缘填充),reflect
(上图所示,像水面照镜子一样的反射),symmetric
(不知道跟reflect有什么区别,出来的图跟上面一样)
transforms.FiveCrop
从一张输入图像中crop出5张指定size的图像,这5张图像包括4个角的图像和一个center,输出是4D tensor
transforms.Grayscale
torchvision.transforms.Grayscale(num_output_channels=1)
注意输出通道参数只能等于1或3,图片看出来没什么太大的差别。
transforms.RandomAffine 随机仿射变化
torchvision.transforms.RandomAffine(degrees=30, translate=None, scale=[1,1], shear=None, resample=False, fillcolor=0)
对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转。
- degrees:旋转角度设置
- translate:平移区间设置,如(a,b),a设置宽(width),b设置高(height)。
图像在宽维度平移的区间为 -img_width * a < dx < img_width * a - scale:缩放比例(以面积为单位)
- fill_colore:一种填充颜色设置。
- shear:错切角度设置,有水平错切和锤子错切。
若为a,则仅在x轴错切,错切角度在(-a,a)之间
若为(a,b),则a设置x轴角度,b设置y的角度。
若为(a,b,c,d),则a,b设置x轴角度,c,d设置y轴角度。 - resample:采样方式,有NEAREST、BILINEAR 、BICUBIC。
- fill_color:填充的颜色
常用的数据扩增库
- torchvision
https://github.com/pytorch/vision
pytorch官方提供的数据扩增库,提供了基本的数据扩增方法,和torch很好的衔接;种类不多,速度中等。 - imgaug
https://github.com/aleju/imgaug
imgaug是常用的第三方数据库,提供了多样的数据扩增方法,且组合起来非常方便,速度较快。 - albumentations
https://albumentations.readthedocs.io
对图像分类、语义分割、物体检测和关键点检测都支持,速度较快