pytorch中transforms.Compose()使用

參考鏈接:

  1. https://blog.csdn.net/weixin_40446557/article/details/87919992?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

  2. https://blog.csdn.net/wangkaidehao/article/details/104520022

torchvision介紹

torchvision是pytorch的一個(gè)圖形庫(kù),它服務(wù)于PyTorch深度學(xué)習(xí)框架的,主要用來(lái)構(gòu)建計(jì)算機(jī)視覺(jué)模型。torchvision.transforms主要是用于常見(jiàn)的一些圖形變換。以下是torchvision的構(gòu)成:

torchvision.datasets: 一些加載數(shù)據(jù)的函數(shù)及常用的數(shù)據(jù)集接口;
torchvision.models: 包含常用的模型結(jié)構(gòu)(含預(yù)訓(xùn)練模型),例如AlexNet、VGG、ResNet等;
torchvision.transforms: 常用的圖片變換,例如裁剪、旋轉(zhuǎn)等;
torchvision.utils: 其他的一些有用的方法。

transforms.Compose()詳解

本文的主題是其中的torchvision.transforms.Compose()類。這個(gè)類的主要作用是串聯(lián)多個(gè)圖片變換的操作。這個(gè)類的構(gòu)造很簡(jiǎn)單:

class torchvision.transforms.Compose(transforms):
 # Composes several transforms together.
 # Parameters: transforms (list of Transform objects) – list of transforms to compose.
 
Example # 可以看出Compose里面的參數(shù)實(shí)際上就是個(gè)列表,而這個(gè)列表里面的元素就是你想要執(zhí)行的transform操作。
>>> transforms.Compose([
>>>     transforms.CenterCrop(10),
>>>     transforms.ToTensor(),])

事實(shí)上,Compose()類會(huì)將transforms列表里面的transform操作進(jìn)行遍歷。實(shí)現(xiàn)的代碼很簡(jiǎn)單:

## 這里對(duì)源碼進(jìn)行了部分截取。
def __call__(self, img):
    for t in self.transforms:   
        img = t(img)
    return img

transforms中的常見(jiàn)操作

class torchvision.transforms.CenterCrop(size)

將給定的PIL.Image進(jìn)行中心切割,得到給定的size,size可以是tuple(target_height, target_width)。size也可以是一個(gè)Integer,在這種情況下,切出來(lái)的圖片的形狀是正方形。

class torchvision.transforms.RandomCrop(size, padding=0)

切割中心點(diǎn)的位置隨機(jī)選取。size可以是tuple也可以是Integer。

class torchvision.transforms.RandomHorizontalFlip

隨機(jī)水平翻轉(zhuǎn)給定的PIL.Image,概率為0.5。即:一半的概率翻轉(zhuǎn),一半的概率不翻轉(zhuǎn)。

class torchvision.transforms.RandomSizedCrop(size, interpolation=2)

先將給定的PIL.Image隨機(jī)切,然后再resize成給定的size大小。

class torchvision.transforms.Pad(padding, fill=0)

將給定的PIL.Image的所有邊用給定的pad value填充。 padding:要填充多少像素 fill:用什么值填充 例子:

from torchvision import transforms
from PIL import Image
padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')
 
print(type(img))
print(img.size)
 
padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)
<class 'PIL.PngImagePlugin.PngImageFile'>
(10, 10)
<class 'PIL.Image.Image'>
(30, 30) #由于上下左右都要填充10個(gè)像素,所以填充后的size是(30,30)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容