• 【数据增强】


    1 数据增强的情形

    数据比较小,难以获取新的训练数据时,可以考虑数据增强,如随机裁剪部分,随机左右上下翻转、随机旋转一个角度、随机亮度变化等微小变化,数据的多样性提高,数据集本身大小未变,只是做了微小调整送入网络。

    数据增强数据有限的情况下,可以增加样本的多样性、抑制过拟合,提高正确率。

    2 数据增强的方法

    torchvision提供了诸多随机改变图片的方法:

    transforms.RandomCrop    # 随机位置裁剪  transforms.CenterCrop
    transforms.RandomHorizontalFlip(p=1)   # 随机水平翻转
    transforms.RandomVerticalFlip(p=1)     # 随机上下翻转
    transforms.RandomRotation
    transforms.ColorJitter(brightness=1)
    transforms.ColorJitter(contrast=1)
    transforms.ColorJitter(saturation=0.5)
    transforms.ColorJitter(hue=0.5)
    tansforms.RandomGrayscale(p=0.5)     # 随机灰度化
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    随机裁剪图片:

    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    import torch.optim as optim
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    import torchvision
    import glob
    from torchvision import transforms
    from torch.utils import data
    from PIL import Image
    
    pil_img = Image.open('dataset2/cloudy134.jpg')	#自定义路径
    transform = transforms.Compose([
            transforms.Resize((256, 256)),
            transforms.RandomCrop((224, 224))
    ])
    
    
    plt.figure(figsize=(12, 8))
    for i in range(6):
        img = transform(pil_img)
        plt.subplot(2, 3, i+1)
        plt.imshow(img)
    plt.subplots_adjust(wspace=0.15, hspace=0.15)
    plt.savefig('pics/5_0.jpg') #自定义路径
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述
    随机水平翻转:

    pil_img = Image.open('dataset2/cloudy134.jpg')
    trans_img = transforms.RandomHorizontalFlip(p=1)(pil_img) 
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    plt.imshow(pil_img)
    plt.subplot(1, 2, 2)
    plt.imshow(trans_img)
    plt.show()
    plt.savefig('pics/5_1.jpg')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    随机亮度调整:
    注意:这里的区间设置不宜过大,否则图片容易变化过大,导致失真

    pil_img = Image.open('dataset2/cloudy134.jpg')
    transform = transforms.Compose([
            transforms.Resize((256, 256)),
            transforms.ColorJitter(brightness=(0.7, 1.3), contrast=(0.7, 1.3), saturation=(0.7, 1.3), hue=(-0.05, 0.05))
    ])
    plt.figure(figsize=(12, 8))
    for i in range(6):
        img = transform(pil_img)
        plt.subplot(2, 3, i+1)
        plt.imshow(img)
    plt.subplots_adjust(wspace=0.15, hspace=0.15)
    plt.savefig('pics/5_2.jpg')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

  • 相关阅读:
    Ai语音机器人系统语音识别达到了什么水准
    一句SQL构建斐波那契数列
    uniapp里textarea多行文本输入限制数量
    Django(20):信号机制
    学习pytorch9 神经网络-卷积层
    Nginx的反向代理、动静分离、负载均衡
    微信小程序模板消息推送
    抢占式调度是如何发生的
    Servlet系列:(HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig)详解
    【SparkStreaming】概述、DS入门、DS创建
  • 原文地址:https://blog.csdn.net/m0_46256255/article/details/133185669