当前位置: 首页 > news >正文

深度学习 PyTorch 中 18 种数据增强策略与实现

深度学习pytorch之简单方法自定义9类卷积即插即用
实时语义分割之BiSeNetv2(2020)结构原理解析及建筑物提取实践

数据增强通过对训练数据进行多种变换,增加数据的多样性,它帮助我们提高模型的鲁棒性,并减少过拟合的风险。PyTorch 提供torchvision.transforms 模块丰富的数据增强操作,我们可以通过组合多种策略来实现复杂的增强效果。本文将介绍 18 种常用的图像数据增强策略,并展示如何使用 PyTorch 中的 torchvision.transforms 来实现这些策略。

文章目录

  • 综合应用:创建一个数据增强流程
  • 1. 随机水平翻转(Random Horizontal Flip)
  • 2. 随机垂直翻转(Random Vertical Flip)
  • 3. 随机旋转(Random Rotation)
  • 4. 随机裁剪(Random Crop)
  • 5. 随机缩放(Random Resized Crop)
  • 6. 颜色抖动(Color Jitter)
  • 7. 亮度调整(Brightness Adjust)
  • 8. 对比度调整(Contrast Adjust)
  • 9. 饱和度调整(Saturation Adjust)
  • 10. 色相调整(Hue Adjust)
  • 11. 随机灰度转换(Random Grayscale)
  • 12. 高斯模糊(Gaussian Blur)
  • 13. 切变变换(Shear Transform)
  • 14. 仿射变换(Affine Transform)
  • 15. 随机噪声添加(Random Noise)
  • 16. 随机剪切(Random Erasing)
  • 17. 图像平移(Translation)
  • 18. 图像归一化(Normalization)

综合应用:创建一个数据增强流程

我们可以将下述增强策略结合起来,创建一个数据增强流程(transform)。以下是流程示例:

transform = transforms.Compose([transforms.RandomHorizontalFlip(p=0.5),transforms.RandomRotation(30),transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5),transforms.RandomGrayscale(p=0.2),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

1. 随机水平翻转(Random Horizontal Flip)

水平翻转是最常见的图像数据增强技术之一。它通过以一定的概率(通常是 50%)对图像进行水平翻转,增加图像的多样性,尤其在对称性较强的物体(如人脸、动物等)中效果显著。

transform = transforms.RandomHorizontalFlip(p=0.5)

2. 随机垂直翻转(Random Vertical Flip)

垂直翻转与水平翻转类似,但适用于那些具有垂直对称性的图像。

transform = transforms.RandomVerticalFlip(p=0.5)

3. 随机旋转(Random Rotation)

随机旋转可以使模型适应不同的物体方向。旋转角度通常在一定范围内随机选择。

transform = transforms.RandomRotation(degrees=30)

4. 随机裁剪(Random Crop)

裁剪操作通过从图像中裁剪出一个随机区域,可以改变图像的视角,模拟拍摄角度的变化。

transform = transforms.RandomCrop(size=(224, 224))

5. 随机缩放(Random Resized Crop)

随机缩放操作首先从图像中随机裁剪出一部分,然后将其缩放到指定的大小。这有助于增强图像的尺度变化。

transform = transforms.RandomResizedCrop(224, scale=(0.8, 1.0))

6. 颜色抖动(Color Jitter)

颜色抖动是通过随机改变图像的亮度、对比度、饱和度和色相来增加图像的多样性。它特别适用于颜色变化较大的场景。

transform = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)

7. 亮度调整(Brightness Adjust)

通过改变图像的亮度来模拟不同的光照条件,使模型在低光或强光环境下具有更好的鲁棒性。

transform = transforms.ColorJitter(brightness=0.5)

8. 对比度调整(Contrast Adjust)

通过随机调整图像的对比度,帮助模型适应高对比和低对比的图像。

transform = transforms.ColorJitter(contrast=0.5)

9. 饱和度调整(Saturation Adjust)

通过随机调整图像的饱和度,模拟不同的颜色鲜艳度,可以帮助模型适应不同的色彩环境。

transform = transforms.ColorJitter(saturation=0.5)

10. 色相调整(Hue Adjust)

色相调整改变图像的整体色调,通过随机变化色相值来模拟不同的环境色彩。

transform = transforms.ColorJitter(hue=0.5)

11. 随机灰度转换(Random Grayscale)

随机将图像转换为灰度图像,通常通过一定的概率来进行。它有助于减少颜色信息对模型的影响。

transform = transforms.RandomGrayscale(p=0.2)

12. 高斯模糊(Gaussian Blur)

高斯模糊是一种图像模糊技术,可以模拟图像在不同焦距下的效果,增加数据集的多样性。

transform = transforms.GaussianBlur(kernel_size=(5, 5), sigma=(0.1, 2.0))

13. 切变变换(Shear Transform)

切变变换可以对图像进行倾斜,增加图像的几何形状变化,模拟视角变化。

transform = transforms.RandomAffine(degrees=0, shear=20)

14. 仿射变换(Affine Transform)

仿射变换可以通过平移、旋转、缩放等方式对图像进行变换,保持图像的几何形状不变。

transform = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.8, 1.2))

15. 随机噪声添加(Random Noise)

在图像中添加随机噪声可以帮助模型更好地适应低质量的输入。虽然 PyTorch 中没有内置的噪声添加操作,但可以通过自定义变换来实现。

import numpy as np
import torchclass AddNoise(object):def __init__(self, mean=0., std=1.):self.mean = meanself.std = stddef __call__(self, img):img = np.array(img)noise = np.random.normal(self.mean, self.std, img.shape)img = img + noiseimg = np.clip(img, 0, 255)return Image.fromarray(img.astype(np.uint8))transform = AddNoise(mean=0., std=25.)

16. 随机剪切(Random Erasing)

随机剪切是通过随机选择图像中的一部分并将其替换为随机颜色,增强模型对遮挡和噪声的鲁棒性。

transform = transforms.RandomErasing(p=0.5)

17. 图像平移(Translation)

平移操作对图像进行平移,模拟物体在图像中的移动。可以帮助模型适应不同的定位变化。

transform = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1))

18. 图像归一化(Normalization)

归一化操作将图像的像素值调整到一定范围内,通常是 [0, 1] 或 [-1, 1],通过减去均值并除以标准差来实现。

transform = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

http://www.mrgr.cn/news/93400.html

相关文章:

  • 全新方案80M/S,告别限速!
  • 自定义录制,解锁全部功能!
  • Java面经
  • K8s 1.27.1 实战系列(一)介绍及准备工作
  • Linux 基础入门操作-实验二 cmake使用介绍下
  • 零售交易流程相关知识(top-down拆解)
  • 尚硅谷爬虫note15
  • 使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输
  • 运动控制卡--固高实用
  • LLM-初识AI
  • 关于sqlalchemy的使用
  • 浏览器WEB播放RTSP
  • 深度学习PyTorch之13种模型精度评估公式及调用方法
  • 为AI聊天工具添加一个知识系统 之138 设计重审 之2 文章学 引言之2 附加符号学和附属诠释学
  • 前端基础入门-高级
  • WLAN无线组网 WI-FI
  • 如何改变怂怂懦弱的气质(2)
  • 从零构建企业级财务分析数仓 | Hive建模实战
  • Spring(四)先注册后注入
  • 为AI聊天工具添加一个知识系统 之138 设计重审 2 文章学 之2 结合诠释学的重组