深度之眼【Pytorch】--數據增強

本文爲深度之眼pytorch訓練營二期學習筆記,詳細課程內容移步:深度之眼 https://ai.deepshare.net/index

目錄

裁剪-Crop

中心裁剪---transforms.CenterCrop

隨機剪裁--transforms.RandomCrop

隨機大小剪裁--transforms.RandomsizedCrop

transforms.FiveCrop 和 transforms.TenCrop

翻轉和旋轉

翻轉

旋轉

圖像變換

填充

亮度、對比度、飽和度

灰度圖

仿射變換

隨機遮擋

transforms操作

自定義transforms

方法總結


 

數據增強:又叫數據增廣,就是對訓練集進行變換,使得訓練集更加的豐富,從而提高模型的泛化能力。

裁剪-Crop

中心裁剪---transforms.CenterCrop

隨機剪裁--transforms.RandomCrop

當剪裁尺度size 大於圖片尺寸的時候,pad_if_need則要設置成True

隨機大小剪裁--transforms.RandomsizedCrop

transforms.FiveCrop 和 transforms.TenCrop

返回的是一個元組tuple,因此後面要接着把元組裏的元素拼接成tensor

# 4 FiveCrop
    # transforms.FiveCrop(112),
    # transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),
#如果這裏已經做了ToTensor後面就不需要再轉一次了

翻轉和旋轉

翻轉

 

旋轉

旋轉之後要記得resize尺寸,才方便整理batch,否則報錯。

expand無法找回因左上角旋轉而丟失的信息。它是針對center的

import os
import numpy as np
import torch
import random
from torch.utils.data import DataLoader
import torchvision.transforms as transforms
from my_dataset import RMBDataset
from PIL import Image
from matplotlib import pyplot as plt



norm_mean = [0.485, 0.456, 0.406]
norm_std = [0.229, 0.224, 0.225]


train_transform = transforms.Compose([
    transforms.Resize((224, 224)),

    # 1 CenterCrop
    transforms.CenterCrop(512),     # 512

    # 2 RandomCrop
    # transforms.RandomCrop(224, padding=16),
    # transforms.RandomCrop(224, padding=(16, 64)),
    # transforms.RandomCrop(224, padding=16, fill=(255, 0, 0)),
    # transforms.RandomCrop(512, pad_if_needed=True),   # pad_if_needed=True
    # transforms.RandomCrop(224, padding=64, padding_mode='edge'),
    # transforms.RandomCrop(224, padding=64, padding_mode='reflect'),
    # transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric'),

    # 3 RandomResizedCrop
    # transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5)),

    # 4 FiveCrop
    # transforms.FiveCrop(112),
    # transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

    # 5 TenCrop
    # transforms.TenCrop(112, vertical_flip=False),
    # transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

    # 1 Horizontal Flip
    # transforms.RandomHorizontalFlip(p=1),

    # 2 Vertical Flip
    # transforms.RandomVerticalFlip(p=0.5),

    # 3 RandomRotation
    # transforms.RandomRotation(90),
    # transforms.RandomRotation((90), expand=True),
    # transforms.RandomRotation(30, center=(0, 0)),
    # transforms.RandomRotation(30, center=(0, 0), expand=True),   # expand only for center rotation

    transforms.ToTensor(),
    transforms.Normalize(norm_mean, norm_std),
])

valid_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(norm_mean, norm_std)
])

# 構建MyDataset實例
train_data = RMBDataset(data_dir=train_dir, transform=train_transform)
valid_data = RMBDataset(data_dir=valid_dir, transform=valid_transform)

# 構建DataLoder
train_loader = DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
valid_loader = DataLoader(dataset=valid_data, batch_size=BATCH_SIZE)

 

圖像變換

填充

亮度、對比度、飽和度

灰度圖

 

仿射變換

degrees一定要設置。

隨機遮擋

 

 

transforms操作

 

 

自定義transforms

 

方法總結

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章