機器學習或深度學習模型的訓練的目標是成為“通用”模型。這就需要模型沒有過度擬合訓練數據集,或者換句話說,我們的模型對看不見的數據有很好的了解。數據增強也是避免過度擬合的眾多方法之一。
機器學習或深度學習模型的訓練的目標是成為“通用”模型。這就需要模型沒有過度擬合訓練數據集,或者換句話說,我們的模型對看不見的數據有很好的了解。數據增強也是避免過度擬合的眾多方法之一。
擴展用于訓練模型的數據量的過程稱為數據增強。通過訓練具有多種數據類型的模型,我們可以獲得更“泛化”的模型。“多種數據類型”是什么意思呢?本片文章只討論“圖像”數據增強技術,只詳細地介紹各種圖片數據增強策略。我們還將使用 PyTorch 動手實踐并實現圖像數據或計算機視覺中主要使用的數據增強技術。

因為介紹的是數據增強技術。所以只使用一張圖片就可以了,我們先看看可視話的代碼
import PIL.Image as Image
import torch
from torchvision import transforms
import matplotlib.pyplot as plt
import numpy as np
import warnings
def imshow(img_path, transform):
Resize/Rescale
此函數用于將圖像的高度和寬度調整為我們想要的特定大小。下面的代碼演示了我們想要將圖像從其原始大小調整為 224 x 224。
path = './kitten.jpeg'
transform = transforms.Resize((224, 224))
imshow(path, transform)

Cropping
該技術將要選擇的圖像的一部分應用于新圖像。例如,使用 CenterCrop 來返回一個中心裁剪的圖像。
transform = transforms.CenterCrop((224, 224))
imshow(path, transform)

RandomResizedCrop
這種方法同時結合了裁剪和調整大小。
transform = transforms.RandomResizedCrop((100, 300))
imshow(path, transform)

Flipping
水平或垂直翻轉圖像,下面代碼將嘗試應用水平翻轉到我們的圖像。
transform = transforms.RandomHorizontalFlip()
imshow(path, transform)

Padding
填充包括在圖像的所有邊緣上按指定的數量填充。我們將每條邊填充50像素。
transform = transforms.Pad((50,50,50,50))
imshow(path, transform)

Rotation
對圖像隨機施加旋轉角度。我們將這個角設為15度。
transform = transforms.RandomRotation(15)
imshow(path, transform)

Random Affine
這種技術是一種保持中心不變的變換。這種技術有一些參數:
- degrees:旋轉角度
- translate:水平和垂直轉換
- scale:縮放參數
- share:圖片裁剪參數
- fillcolor:圖像外部填充的顏色
transform = transforms.RandomAffine(1, translate=(0.5, 0.5), scale=(1, 1), shear=(1,1), fillcolor=(256,256,256))
imshow(path, transform)

Gaussian Blur
圖像將使用高斯模糊進行模糊處理。
transform = transforms.GaussianBlur(7, 3)
imshow(path, transform)

Grayscale
將彩色圖像轉換為灰度。
transform = transforms.Grayscale(num_output_channels=3)
imshow(path, transform)

顏色增強,也稱為顏色抖動,是通過改變圖像的像素值來修改圖像的顏色屬性的過程。下面的方法都是顏色相關的操作。
Brightness
改變圖像的亮度當與原始圖像對比時,生成的圖像變暗或變亮。
transform = transforms.ColorJitter(brightness=2)
imshow(path, transform)

Contrast
圖像最暗和最亮部分之間的區別程度被稱為對比度。圖像的對比度也可以作為增強進行調整。
transform = transforms.ColorJitter(cnotallow=2)
imshow(path, transform)

Saturation
圖片中顏色的分離被定義為飽和度。
transform = transforms.ColorJitter(saturatinotallow=20)
imshow(path, transform)

Hue
色調被定義為圖片中顏色的深淺。
transform = transforms.ColorJitter(hue=2)
imshow(path, transform)

總結
圖像本身的變化將有助于模型對未見數據的泛化,從而不會對數據進行過擬合。以上整理的都是我們常見的數據增強技術,torchvision中還包含了很多方法,可以在他的文檔中找到:https://pytorch.org/vision/stable/transforms.html