36 數(shù)據(jù)增廣【動手學(xué)深度學(xué)習(xí)v2】

圖片的數(shù)據(jù)增廣(同樣思路可應(yīng)用于數(shù)字、語音等)

數(shù)據(jù)增強(qiáng):在已有數(shù)據(jù)集上進(jìn)行數(shù)據(jù)變換,使數(shù)據(jù)具有更強(qiáng)的多樣性。

一般是在初始數(shù)據(jù)輸入后在線進(jìn)行隨機(jī)增強(qiáng)

常用數(shù)據(jù)變換方法

切割:對數(shù)據(jù)進(jìn)行局部切割后要對其進(jìn)行形狀變換,方便輸入。
切割過程:
規(guī)定切割高寬比范圍、
規(guī)定切割比例范圍、

顏色變換

其他辦法:根據(jù)測試集中可能遇到的環(huán)境酌情選擇


代碼實現(xiàn)
%matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2l
d2l.set_figsize() img = d2l.Image.open('../img/cat1.jpg') d2l.plt.imshow(img);

大多數(shù)圖像增廣方法都具有一定的隨機(jī)性。為了便于觀察圖像增廣的效果,我們下面定義輔助函數(shù)apply
。 此函數(shù)在輸入圖像img
上多次運(yùn)行圖像增廣方法aug
并顯示所有結(jié)果。
def apply(img, aug, num_rows=2, num_cols=4, scale=1.5): Y = [aug(img) for _ in range(num_rows * num_cols)] d2l.show_images(Y, num_rows, num_cols, scale=scale)
隨機(jī)水平翻轉(zhuǎn)
apply(img, torchvision.transforms.RandomHorizontalFlip())

隨機(jī)豎直翻轉(zhuǎn)
apply(img, torchvision.transforms.RandomVerticalFlip())

在我們使用的示例圖像中,貓位于圖像的中間,但并非所有圖像都是這樣。 在?6.5節(jié)中,我們解釋了匯聚層可以降低卷積層對目標(biāo)位置的敏感性。 另外,我們可以通過對圖像進(jìn)行隨機(jī)裁剪,使物體以不同的比例出現(xiàn)在圖像的不同位置。 這也可以降低模型對目標(biāo)位置的敏感性。
下面的代碼將隨機(jī)裁剪一個面積為原始面積10%到100%的區(qū)域,該區(qū)域的寬高比從0.5~2之間隨機(jī)取值。 然后,區(qū)域的寬度和高度都被縮放到200像素。 在本節(jié)中(除非另有說明),a和b之間的隨機(jī)數(shù)指的是在區(qū)間[a,b]
中通過均勻采樣獲得的連續(xù)值。
shape_aug = torchvision.transforms.RandomResizedCrop( (200, 200), scale=(0.1, 1), ratio=(0.5, 2)) apply(img, shape_aug)





知識補(bǔ)充:
原始樣本多,并不代表樣本多樣性好。依然要進(jìn)行數(shù)據(jù)增廣。
多張圖片疊加,即mix-up,也是一種有效的增廣方式。