热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图像分类:数据增强(Pytorch版)

在Pytorch框架中,常用的数据增强的函数主要集成在了transforms文件中,今天就来详细介绍一下如何使用Pytorch框架在训练模型时使用数据增强的策略,本文主要介绍分类问

在Pytorch框架中,常用的数据增强的函数主要集成在了transforms文件中,今天就来详细介绍一下如何使用Pytorch框架在训练模型时使用数据增强的策略,本文主要介绍分类问题的数据增强,而对于检测问题处理的需要更加麻烦,因为检测问题不仅要处理图片,还需要处理对应的位置标签!!!(下文再进行介绍)

检测问题的数据增强:

TeddyZhang:目标检测:数据增强(Numpy+Pytorch)zhuanlan.zhihu.com《图像分类:数据增强(Pytorch版)》

由于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'))

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

  • 随机比例缩放

new_im = transforms.Resize((100, 200))(im)
print(f'{im.size}---->{new_im.size}')
new_im.save(os.path.join(outfile, '1.jpg'))

《图像分类:数据增强(Pytorch版)》

  • 随机位置裁剪

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'))

《图像分类:数据增强(Pytorch版)》

《图像分类:数据增强(Pytorch版)》

  • 随机水平/垂直翻转

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'))

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

  • 随机角度旋转

new_im = transforms.RandomRotation(45)(im) #随机旋转45度
new_im.save(os.path.join(outfile, '4.jpg'))

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

  • 色度、亮度、饱和度、对比度的变化

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'))

只显示其中一张图:

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

  • 进行随机的灰度化

new_im = transforms.RandomGrayscale(p=0.5)(im) # 以0.5的概率进行灰度化
new_im.save(os.path.join(outfile, '6_2.jpg'))

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

  • 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'))

《图像分类:数据增强(Pytorch版)》
《图像分类:数据增强(Pytorch版)》

使用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来进行图像的变换

总结

对于分类问题来说,我们不管怎么进行图像的变化,不管从尺度还是色彩等,其标签不会发生变化,但是对于目标检测问题来说,就不可以这样了,因为图片尺度变化后,在训练阶段其对应的标签也会发生变化,所以需要对变换后的图片进行标签的处理~我们下回分解~~


推荐阅读
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
author-avatar
djw
匠心独运
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有