天天看點

PyTorch: TORCHVISION.TRANSFORMSPyTorch: TORCHVISION.TRANSFORMS

PyTorch: TORCHVISION.TRANSFORMS

變換是常見的圖像變換。可以使用Compose将它們連結在一起。此外,還有torchvision.transforms.functional 子產品。

函數轉換提供對轉換的細粒度控制。如果你需要建構一個更複雜的轉換管道(例如,在分割任務的情況下),這非常有用。

所有的轉換都接受PIL圖像,張量圖像或批張量圖像作為輸入。

張量圖像是一個具有(C, H, W)形狀的張量,其中C是一些通道,H和W是圖像的高度和寬度。

Batch of Tensor Images是(B, C, H, W) 形狀的張量,其中B是Batch中圖像的個數。對這批張量圖像應用确定性或随機變換,就能對這批圖像的所有圖像進行相同的變換。

警告

自從v0.8.0以來,所有的随機轉換都使用torch預設的随機生成器來采樣随機參數。這是一個向後相容性破壞更改,使用者應該設定随機狀态如下:

# Previous versions
# import random
# random.seed(12)

# Now
import torch
torch.manual_seed(17)
           

請記住,torch随機發生器和Python随機發生器的相同種子不會産生相同的結果。

編寫腳本的轉換

為了編寫轉換腳本,請使用torch.nn.Sequential而不是Compose。

transforms = torch.nn.Sequential(
    transforms.CenterCrop(10),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
)
scripted_transforms = torch.jit.script(transforms)
           

確定隻使用可腳本化的轉換,也就是使用torch.Tensor的轉換,不需要lambda函數或PIL.Image。

對于與torch.jit.script一起使用的任何自定義轉換,它們應該派生自torch.nn.Module。

Compositions of transforms

CLASS 

torchvision.transforms.

Compose

(transforms)

将幾個變換組合在一起。這個轉換不支援torchscript。請看下面的說明。

參數: transforms (Transform對象清單)-要組合的轉換清單。

例子

transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
])
           

請注意:為了編寫轉換腳本,請使用torch.nn。順序如下。

transforms = torch.nn.Sequential(
    transforms.CenterCrop(10),
    transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
)
scripted_transforms = torch.jit.script(transforms)
           

確定隻使用可腳本化的轉換,也就是使用torch.Tensor的轉換,不需要lambda函數或PIL.Image。

Transforms on PIL Image and torch.*Tensor

CLASS 

torchvision.transforms.

CenterCrop

(size)

在中心裁剪給定的圖像。圖像可以是PIL圖像或torch Tensor,在這種情況下,它被期望有[…,H, W]形狀,其中…表示領先次元的任意數目。

參數: size(sequence或int):裁剪期望的輸出大小。如果size是一個int而不是序列(如(h, w)),則生成一個正方形的裁剪(size, size)。如果提供了長度為1的元組或清單,它将被解釋為(size[0], size[0])。

CLASS 

torchvision.transforms.

ColorJitter

(brightness=0, contrast=0, saturation=0, hue=0)

随機改變一個圖像的亮度,對比度和飽和度。

參數:

brightness(float或python的元組:float (min, max)) :多大程度上的亮度抖動。從[max(0,1-brightness),1 +brightness]或給定的[min, max]中均勻地選擇亮度因子。應該是非負數。

contrast(python的float或元組:float (min, max)):對比度的抖動程度。對比因子從[max(0,1 -contrast),1 +contrast]或給定的[min, max]中統一選擇。應該是非負數。

saturation(float或python的元組:float (min, max)):多少抖動飽和度。從[max(0,1 - saturation), 1 + saturation]或給定的[min, max]中均勻地選擇saturation_factor。應該是非負數。

hue(python的float或元組:float (min, max)):多少來抖動hue。hue_factor從[-hue, hue]或給定的[min, max]中統一選擇。應該有0<= hue <= 0.5或-0.5 <= min <= max <= 0.5。

CLASS

torchvision.transforms.

FiveCrop

(size)

将給定的圖像裁剪成四個角和中間的裁剪。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

請注意:此轉換傳回一個圖像元組,并且資料集傳回的輸入和目标數量可能不比對。下面是如何處理這個問題的示例。

參數: size (sequence或int):裁剪期望的輸出大小。如果size是一個int而不是序列(如(h, w)),則生成一個大小為size (size, size)的方形作物。如果提供了長度為1的元組或清單,它将被解釋為(size[0], size[0])。

transform = Compose([
    FiveCrop(size),  # this is a list of PIL Images
    Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops]))  # returns a 4D tensor
])
# In your test loop you can do the following:
input, target = batch  # input is a 5d tensor, target is 2d
bs, ncrops, c, h, w = input.size()
result = model(input.view(-1, c, h, w))  # fuse batch size and ncrops
result_avg = result.view(bs, ncrops, -1).mean(1)  # avg over crops
           

CLASS 

torchvision.transforms.

Grayscale

(num_output_channels=1)

轉換圖像到灰階。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,3,H, W]形狀,其中…表示領先次元的任意數量。

參數: num_output_channels (int):輸出圖像所需的通道數量(1或3)。

傳回: 輸入的灰階圖。

如果num_output_channels == 1: 傳回的圖像是單通道。

如果num_output_channels == 3: 傳回的圖像是r == g == b的3個通道。

CLASS 

torchvision.transforms.

Pad

(padding, fill=0, padding_mode='constant')

用給定的“填充”值填充給定的圖像。圖像可以是PIL圖像或torch Tensor,在這種情況下,它被期望有[…,H, W]形狀,其中…表示領先次元的任意數目。

參數: 

padding(int或元組或清單):每個邊界上的填充。如果提供了一個int值,它将被用來填充所有邊框。如果提供了長度為2的元組,則分别在左/右和頂部/底部填充。

如果提供了長度為4的元組,則分别為左、上、右和下邊框填充。在torchscript模式下,不支援單個int填充,使用一個元組或長度為1:[padding,]的清單。

fill (int或元組):常量填充的像素填充值。預設值為0。如果一個長度為3的元組,則分别用于填充R、G、B通道。該值僅在padding_mode為常量時使用。

padding_mode (str):類型的填充。應該是: 常數constant,邊緣edge,反射reflect或對稱symmetric。預設是恒定的。對于張量輸入,還不支援模對稱。

constant: 具有常量值的墊塊,該值由fill指定。

edge: 圖像邊緣上的最後一個值。

reflect: 在邊緣上不重複上次值的圖像反射的襯墊。

例如,在反射模式下,兩邊各有2個元素的填充[1, 2, 3, 4]會得到 [3, 2, 1, 2, 3, 4, 3, 2]。

symmetric: 在邊緣上重複最後一個值的映像的襯墊。

例如,對稱模式下,兩邊各有2個元素的填充[1, 2, 3, 4]會得到[2, 1, 1, 2, 3, 4, 4, 3]。

CLASS 

torchvision.transforms.

RandomAffine

(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0)

圖像保持中心不變的随機仿射變換。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

參數:

degrees(序列或浮點數或整數):度數的選擇範圍。如果度數是一個數字,而不是序列(如(min, max)),度數的範圍将是(-degrees, +degrees)。設定為0表示取消旋轉。

translate (tuple,可選):水準和垂直轉換的最大絕對比例的元組。例如translate=(a, b),那麼水準移動在範圍-img_width * a < dx < img_width * a中随機采樣,垂直移動在範圍-img_height * b < dy < img_height * b中随機采樣。預設情況下不會進行轉換。

scale(元組,可選):縮放因子間隔,例如(a, b),那麼scale将從範圍a <= scale <= b中随機抽樣。預設情況下将保持原來的scale。

shear(序列或浮動或int,可選):範圍的角度選擇。如果剪切是一個數字,一個剪切平行于x軸的範圍(-shear,+shear)将被應用。否則,如果剪切是一個元組或2個值的清單,在範圍内平行于x軸的剪切(shear[0],shear[1])将被應用。否則,如果剪切是一個元組或4個值的清單,x軸剪切(shear[0],shear[1])和y軸剪切(shear[2],shear[3])将被應用。預設情況下不會應用剪切。

resample (int,可選):一個可選的重采樣過濾器。有關更多資訊,請參閱過濾器。如果省略,或者圖像有模式“1”或“P”,它被設定為PIL.Image.NEAREST。如果輸入是張量,隻支援PIL.Image.NEAREST和PIL.Image.BILINEAR。

fillcolor(元組或int):可選的填充顔色(元組為RGB圖像和int為灰階)的區域外的轉換輸出圖像(Pillow>=5.0.0)。張量輸入不支援此選項。輸出圖像中變換外部區域的填充值始終為0。

CLASS 

torchvision.transforms.

RandomApply

(transforms, p=0.5)

以給定的機率随機應用一系列轉換。

請注意:為了編寫轉換腳本,請使用torch.nn.ModuleList作為輸入,而不是轉換的list/tuple,如下所示:

transforms = transforms.RandomApply(torch.nn.ModuleList([
    transforms.ColorJitter(),
]), p=0.3)
scripted_transforms = torch.jit.script(transforms)
           

CLASS 

torchvision.transforms.

RandomCrop

(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

在随機的位置裁剪給定的圖像。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

參數:

size (sequence或int):裁剪期望的輸出大小。如果size是一個int而不是序列(如(h, w)),則生成一個正方形的裁剪(size, size)。如果提供了長度為1的元組或清單,它将被解釋為(size[0], size[0])。

padding (int或序列,可選):圖像的每個邊框上的可選填充。預設是沒有的。如果提供了一個int值,它将被用來填充所有邊框。如果提供了長度為2的元組,則分别在左/右和頂部/底部填充。如果提供了長度為4的元組,則分别為左、上、右和下邊框填充。在torchscript模式下,不支援單個int填充,使用一個元組或長度為1:[padding,]的清單。

pad_if_needed (boolean):如果圖像小于期望的大小,它将填充圖像,以避免引發異常。因為裁剪是在填充之後完成的,是以填充看起來是随機偏移的。

fill (int或元組):常量填充的像素填充值。預設值為0。如果一個長度為3的元組,則分别用于填充R、G、B通道。該值僅在padding_mode為常量時使用。

padding_mode (str):類型的填充。應該是: 常數constant,邊緣edge,反射reflect或對稱symmetric。預設是恒定的。對于張量輸入,還不支援模對稱。

constant: 具有常量值的墊塊,該值由fill指定。

edge: 圖像邊緣上的最後一個值。

reflect: 在邊緣上不重複上次值的圖像反射的襯墊。

例如,在反射模式下,兩邊各有2個元素的填充[1, 2, 3, 4]會得到 [3, 2, 1, 2, 3, 4, 3, 2]。

symmetric: 在邊緣上重複最後一個值的映像的襯墊。

例如,對稱模式下,兩邊各有2個元素的填充[1, 2, 3, 4]會得到[2, 1, 1, 2, 3, 4, 4, 3]。

CLASS 

torchvision.transforms.

RandomGrayscale

(p=0.1)

以機率p(預設0.1)随機轉換圖像為灰階圖。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,3,H, W]形狀,其中…表示領先次元的任意數量。

參數: p (float) :圖像轉換為灰階圖的機率。

傳回: 輸入圖像的灰階圖,機率為p,不變為機率(1-p)。—輸入圖像為1通道時,灰階圖為1通道。—輸入圖像為3通道時,灰階圖為3通道,r == g == b。

CLASS 

torchvision.transforms.

RandomHorizontalFlip

(p=0.5)

以給定的機率水準翻轉給定的圖像。圖像可以是PIL圖像或torch Tensor,在這種情況下,它被期望有[…,H, W]形狀,其中…表示領先次元的任意數目。

參數: p (float) :圖像被翻轉的機率。預設值為0.5。

CLASS 

torchvision.transforms.

RandomPerspective

(distortion_scale=0.5, p=0.5, interpolation=2, fill=0)

以給定的機率對給定的圖像執行随機的透視變換。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

參數: 

distortion_scale (float):失真程度,範圍從0到1。預設是0.5。

p (float):圖像被轉換的機率。預設是0.5。

interpolation(int):插值類型。如果輸入是張量,隻支援PIL.Image.NEAREST 和PIL.Image.BILINEAR。預設情況下,采用PIL.Image.BILINEAR。

fill (n-tuple或int或float):旋轉圖像外部區域的像素填充值。如果是int或float,則該值分别用于所有波段。預設值為0。此選項僅适用于枕頭>=5.0.0。張量輸入不支援此選項。輸出圖像中變換外部區域的填充值始終為0。

CLASS 

torchvision.transforms.

RandomResizedCrop

(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)

将給定圖像随機裁剪為不同的大小和寬高比,然後縮放所裁剪得到的圖像為指定的大小;(即先随機采集,然後對裁剪得到的圖像縮放為同一大小)。

圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

一個原始尺寸的随機大小(預設值:0.08到1.0)和原始寬高比的随機寬高比(預設值:3/4到4/3)的裁剪被制成。這個裁剪最終被調整到給定的大小。這通常被用于訓練Inception網絡。

參數:

size (int或sequence):每條邊的期望輸出大小。如果size是一個int而不是序列(如(h, w)),則輸出大小為正方形(size, size)。如果提供了長度為1的元組或清單,它将被解釋為(size[0], size[0])。

scale (python的元組:float):被裁剪的原始大小的範圍。預設

scale=(0.08, 1.0),面積百分比。

0.08意味着在100×100的圖像中,最小的crop_img約為28×28(800像素)。

ratio (python的元組:float):被裁剪的原始長寬比的長寬比範圍。

interpolation(int):過濾器定義的所需插值枚舉。預設是PIL.Image.BILINEAR。如果輸入是張量,隻支援雙PIL.Image.NEAREST, PIL.Image.BILINEAR 和 PIL.Image.BICUBIC。

image = Image.open("./Lena.jpg")
print("原圖大小:", image.size)
data1 = transforms.RandomResizedCrop(224)(image)
print("随機裁剪後的大小:", data1.size)
data2 = transforms.RandomResizedCrop(224)(image)
data3 = transforms.RandomResizedCrop(224)(image)
mpl.rcParams['font.sans-serif'] = ['SimHei']
pyplot.subplot(2, 2, 1), pyplot.imshow(image), pyplot.title("原始圖像")
pyplot.subplot(2, 2, 2), pyplot.imshow(data1), pyplot.title("轉換後的圖1")
pyplot.subplot(2, 2, 3), pyplot.imshow(data2), pyplot.title("轉換後的圖2")
pyplot.subplot(2, 2, 4), pyplot.imshow(data3), pyplot.title("轉換後的圖3")
pyplot.show()
           
PyTorch: TORCHVISION.TRANSFORMSPyTorch: TORCHVISION.TRANSFORMS

CLASS 

torchvision.transforms.

RandomRotation

(degrees, resample=False, expand=False, center=None, fill=None)

按角度旋轉圖像。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

參數:

degrees(序列或浮點數或整數):度數的選擇範圍。如果度數是一個數字,而不是序列(如(min, max)),度數的範圍将是(-degrees, +degrees)。

resample(int,可選):一個可選的重采樣過濾器。有關更多資訊,請參閱過濾器。如果省略,或者圖像有模式“1”或“P”,它被設定為PIL.Image.NEAREST。如果輸入是張量,隻支援PIL.Image.NEAREST 和 PIL.Image.BILINEAR。

expand(bool,可選):可選的擴充标志。如果為真,則展開輸出,使其足夠大以容納整個旋轉後的圖像。如果為false或省略,則使輸出圖像與輸入圖像相同大小。注意,expand标志假定圍繞中心旋轉,而沒有平移。

center(清單或元組,可選):可選的旋轉中心,(x, y)。原點是左上角。預設為圖像的中心。

fill(n-tuple或int或float):旋轉圖像外部區域的像素填充值。如果是int或float,則該值分别用于所有波段。預設為0的所有波段。此選項僅适用于Pillow>=5.2.0。張量輸入不支援此選項。輸出圖像中變換外部區域的填充值始終為0。

CLASS 

torchvision.transforms.

RandomVerticalFlip

(p=0.5)

以給定的機率垂直翻轉給定的圖像。圖像可以是PIL圖像或torch Tensor,在這種情況下,它被期望有[…,H, W]形狀,其中…表示領先次元的任意數目。

參數: p (float):圖像被翻轉的機率。預設值為0.5。

CLASS 

torchvision.transforms.

Resize

(size, interpolation=2)

将輸入圖像的大小調整為給定的大小。圖像可以是PIL圖像或torch Tensor,在這種情況下,它被期望有[…,H, W]形狀,其中…表示領先次元的任意數目。

參數:

size(sequence或int):期望的輸出大小。如果size是類似(h, w)的序列,則輸出size将與此比對。如果size為int,則圖像的較小邊緣将與這個數字比對。也就是說,如果高度>寬度,那麼圖像将被重新調整為(大小*高度/寬度,大小)。在torchscript模式下不支援單個int填充,使用一個元組或長度為1:[size,]的清單。

interpolation(int,可選):過濾器定義的所需插值enum。預設是PIL.Image.BILINEAR。如果輸入是張量,隻支援PIL.Image.NEAREST, PIL.Image.BILINEAR 和 PIL.Image.BICUBIC。

CLASS 

torchvision.transforms.

TenCrop

(size, vertical_flip=False)

Crop the given image into four corners and the central crop plus the flipped version of these (horizontal flipping is used by default). 

裁剪給定的圖像到四個角和中央裁剪加上翻轉的版本(預設使用水準翻轉)。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,H, W]形狀,其中…表示領先次元的任意數量。

請注意:此轉換傳回一個圖像元組,并且資料集傳回的輸入和目标數量可能不比對。下面是如何處理這個問題的示例。

參數:

size(sequence或int):裁剪的期望輸出大小。如果size是一個int而不是序列(如(h, w)),則生成一個正方形的裁剪(size, size)。如果提供了長度為1的元組或清單,它将被解釋為(size[0], size[0])。

vertical_flip(bool):使用垂直翻轉代替水準翻轉。

transform = Compose([
    TenCrop(size),  # this is a list of PIL Images
    Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops]))  # returns a 4D tensor
])
# In your test loop you can do the following:
input, target = batch  # input is a 5d tensor, target is 2d
bs, ncrops, c, h, w = input.size()
result = model(input.view(-1, c, h, w))  # fuse batch size and ncrops
result_avg = result.view(bs, ncrops, -1).mean(1)  # avg over crops
           

CLASS 

torchvision.transforms.

GaussianBlur

(kernel_size, sigma=(0.1, 2.0))

以随機選擇的高斯模糊模糊圖像。圖像可以是PIL圖像或Tensor,在這種情況下,它被期望具有[…,C, H, W]形狀,其中…意味着領先次元的任意數量。

參數:

kernel_size(int或sequence):高斯核的大小。

sigma(python的float或元組:float (min, max)):用于建立執行模糊的核心的标準偏差。如果是浮動的,則是固定的。如果它是float (min, max)的元組,則sigma被均勻随機地選擇在給定範圍内。

Transforms on PIL Image only

CLASS 

torchvision.transforms.

RandomChoice

(transforms)

應用從清單中随機選取的單個轉換。這個轉換不支援torchscript。

CLASS 

torchvision.transforms.

RandomOrder

(transforms)

以随機順序應用一個轉換清單。這個轉換不支援torchscript。

Transforms on torch.*Tensor only

CLASS 

torchvision.transforms.

LinearTransformation

(transformation_matrix, mean_vector)

Transform a tensor image with a square transformation matrix and a mean_vector computed offline.

Given transformation_matrix and mean_vector, will flatten the torch.*Tensor and subtract mean_vector from it which is then followed by computing the dot product with the transformation matrix and then reshaping the tensor to its original shape.

應用:

whitening transformation(白化變換): 假設X是列向量的零中心資料。然後用torch.mm(X.t(), x)計算資料協方差矩陣[dx D],對該矩陣進行SVD,作為transformation_matrix傳遞。

參數:

transformation_matrix(張量):張量[dx D], D = C x H x W。

mean_vector(張量):張量[D], D = C x H x W。

CLASS 

torchvision.transforms.

Normalize

(mean, std, inplace=False)

用均值和标準差标準化張量圖像。給定n個通道的mean: (mean[1],…,mean[n])和std: (std[1],..,std[n]),該變換将标準化輸入ttorch.*Tensor每個通道,即:

output[channel] = (input[channel] - mean[channel]) / std[channel]。

請注意:這個變換不會改變輸入張量。

參數:

mean(序列):每個通道的均值序列。

std(序列):每個通道的标準差序列。

inplace(bool,可選):bool使該操作就位。

示例:

transform.ToTensor(),
transform.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
           

前面的(0.5,0.5,0.5) 是 R G B 三個通道上的均值, 後面(0.5, 0.5, 0.5)是三個通道的标準差。

注意通道順序是 R G B ,用過opencv的同學應該知道openCV讀出來的圖像是 BRG順序。

這兩個tuple資料是用來對RGB 圖像做歸一化的,如其名稱 Normalize 所示,這裡都取0.5隻是一個近似的操作,實際上其均值和方差并不是這麼多,但是就這個示例而言,影響可不計。

如果你用的是自己建立的資料集從頭訓練,那最好還是要自己統計自己資料集的這兩個量:

如果你加載的的是pytorch上的預訓練模型,自己隻是微調模型;

或者你用了常見的資料集比如VOC或者COCO之類的,但是用的是自己的網絡結構,即pytorch上沒有可選的預訓練模型,那麼可以使用一個pytorch上給的通用的統計值:

mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])。

ToTensor()能夠把灰階範圍從0~255變換到0.00~1.00之間,而後面的transform.Normalize()則把0-1變換到(-1,1)。

具體地說,對每個通道而言,Normalize執行以下操作:

image=(image-mean)/std

其中mean和std分别通過(0.5,0.5,0.5)和(0.5,0.5,0.5)進行指定。原來的0-1:最小值0則變成(0-0.5)/0.5=-1,而最大值1則變成(1-0.5)/0.5=1。

CLASS 

torchvision.transforms.

RandomErasing

(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

在圖像中随機選擇一個矩形區域并删除它的像素。‘Random Erasing Data Augmentation’ by Zhong et al. See https://arxiv.org/abs/1708.04896

參數:

p:執行随機删除操作的機率。

scale:被擦除的區域與輸入圖像的比例範圍。

ratio:抹去面積的長寬比的範圍。

value:删除值。預設值為0。如果是單個int,則使用它來清除所有像素。如果一個長度為3的元組,它被用來分别擦除R, G, B通道。如果字元串為' random ',則用随機值删除每個像素。

inplace:布爾值,使此轉換就位。預設為False。

CLASS 

torchvision.transforms.

ConvertImageDtype

(dtype: torch.dtype) → None

将張量圖像轉換為給定的dtype并相應地縮放值。

參數: dtype(torch.dpython:type):輸出所需的資料類型。

請注意:當從較小的整數轉換為較大的整數dtype時,最大值不會被精确映射。如果來回轉換,這種不比對将沒有影響。

Conversion Transforms

CLASS 

torchvision.transforms.

ToPILImage

(mode=None)

轉換Tensor或ndarray到PIL圖像。這個轉換不支援torchscript。

轉換一個形狀為C x H x W的torch.*Tensor或形狀為H x W x C的numpy ndarray為PIL圖像,同時保留值範圍。

參數:

mode(PIL.Image mode):輸入資料的顔色空間和像素深度(可選)。如果模式是None(預設):有一些關于輸入資料的假設:—如果輸入有4個通道,模式被假定為RGBA。-如果輸入有3個通道,模式假設為RGB。—如果輸入有兩個通道,則假設模式為LA。-如果輸入有1個通道,模式由資料類型決定(即int, float, short)。

CLASS 

torchvision.transforms.

ToTensor

轉換PIL圖像或numpy.ndarray為Tensor。這個轉換不支援torchscript。

轉換灰階範圍在[0,255]内,形狀為(H × W × C)的PIL圖像或numpy.ndarray為形狀 (C x H x W) 取值為[0.0, 1.0]的torch.FloatTensor。

如果PIL圖像屬于其中一種模式(L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)或如果numpy.ndarray has dtype = np.uint8

在其他情況下,傳回的張量沒有标度。

請注意:因為輸入圖像被縮放到[0.0,1.0],是以在轉換目标圖像蒙版時不應該使用這個轉換。請參閱有關實作圖像掩碼轉換的參考資料。

Generic Transforms

CLASS 

torchvision.transforms.

Lambda

(lambd)

應用使用者定義的lambda作為轉換。這個轉換不支援torchscript。

參數: lambd(函數):用于轉換的Lambda/函數。

繼續閱讀