作者:djw | 来源:互联网 | 2023-08-28 12:24
在Pytorch框架中,常用的数据增强的函数主要集成在了transforms文件中,今天就来详细介绍一下如何使用Pytorch框架在训练模型时使用数据增强的策略,本文主要介绍分类问
在Pytorch框架中,常用的数据增强的函数主要集成在了transforms文件中,今天就来详细介绍一下如何使用Pytorch框架在训练模型时使用数据增强的策略,本文主要介绍分类问题的数据增强,而对于检测问题处理的需要更加麻烦,因为检测问题不仅要处理图片,还需要处理对应的位置标签!!!(下文再进行介绍)
检测问题的数据增强:
TeddyZhang:目标检测:数据增强(Numpy+Pytorch) zhuanlan.zhihu.com
由于transforms的输入规定为PIL文件格式,所以我们需要使用PIL.Image模块
读取图片
import PIL.Image as Image
import os
from torchvision import transforms as transforms
outfile = './samples'
im = Image.open('./test.jpg')
im.save(os.path.join(outfile, 'test.jpg'))
new_im = transforms.Resize((100, 200))(im)
print(f'{im.size}---->{new_im.size}')
new_im.save(os.path.join(outfile, '1.jpg'))
new_im = transforms.RandomCrop(100)(im) # 裁剪出100x100的区域
new_im.save(os.path.join(outfile, '2_1.jpg'))
new_im = transforms.CenterCrop(100)(im)
new_im.save(os.path.join(outfile, '2_2.jpg'))
new_im = transforms.RandomHorizontalFlip(p=1)(im) # p表示概率
new_im.save(os.path.join(outfile, '3_1.jpg'))
new_im = transforms.RandomVerticalFlip(p=1)(im)
new_im.save(os.path.join(outfile, '3_2.jpg'))
new_im = transforms.RandomRotation(45)(im) #随机旋转45度
new_im.save(os.path.join(outfile, '4.jpg'))
new_im = transforms.ColorJitter(brightness=1)(im)
new_im = transforms.ColorJitter(cOntrast=1)(im)
new_im = transforms.ColorJitter(saturation=0.5)(im)
new_im = transforms.ColorJitter(hue=0.5)(im)
new_im.save(os.path.join(outfile, '5_1.jpg'))
只显示其中一张图:
new_im = transforms.RandomGrayscale(p=0.5)(im) # 以0.5的概率进行灰度化
new_im.save(os.path.join(outfile, '6_2.jpg'))
- Padding (将原始图padding成正方形)
new_im = transforms.Pad((0, (im.size[0]-im.size[1])//2))(im) # 原图为(500,313)
new_im.save(os.path.join(outfile, '7.jpg'))
使用Compose函数生成一个PiPeLine
data_transform={'train':transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.Resize(image_size),
transforms.CenterCrop(image_size),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
经过这样处理后,我们就可以直接使用data_transform来进行图像的变换
总结
对于分类问题来说,我们不管怎么进行图像的变化,不管从尺度还是色彩等,其标签不会发生变化,但是对于目标检测问题来说,就不可以这样了,因为图片尺度变化后,在训练阶段其对应的标签也会发生变化,所以需要对变换后的图片进行标签的处理~我们下回分解~~