2.中心裁剪:transforms.CenterCrop
torchvision.transforms.CenterCrop(size=256)(image)3.隨機長寬比裁剪:transforms.RandomResizedCrop
torchvision.transforms.RandomResizedCrop(size=256)(image)
4.上下左右中心裁剪:transforms.FiveCrop
images = torchvision.transforms.FiveCrop(size=256)(image)images
5.上下左右中心裁剪後翻轉:transforms.TenCrop
# 跟上面的一樣,第二個參數設置成false為水平翻轉torchvision.transforms.TenCrop(256)(image)翻轉與旋轉
6.依概率p水平翻轉:transforms.RandomHorizontalFlip
torchvision.transforms.RandomHorizontalFlip(p=0.9)(image)
7.依概率垂直翻轉:transforms.RandomVerticalFlip
torchvision.transforms.RandomVerticalFlip(p=0.9)(image)
8.隨機旋轉:transforms.RandomRotation
torchvision.transforms.RandomRotation((45,90))(image)
degress:旋轉角度,可以是整數或者是區間,整數會在正負間隨機。區間則為區間內隨機
resample:重採樣,可選PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC,默認為最近鄰
center:可選為中心旋轉還是左上角旋轉
圖像變換
9.resize:transforms.Resize# 插值方法默認是雙線性插值torchvision.transforms.Resize(256)(image)
10.轉為tensor:transforms.ToTensor
tensor_image = torchvision.transforms.ToTensor()(image)tensor_image
11.標準化:transforms.Normalize
# mean與std是有固定值的,需要看論文torchvision.transforms.Normalize(mean=[0.5,0.5,0.5],std=[0.5,0.5,0.5])(tensor_image)12.填充:transforms.Pad
torchvision.transforms.Pad(20)(image)
padding:填充多少個參數,可以是單個,2個值的序列以及四個值的序列,2個值時第一個值為左右,第二個值為上下。4個值的時候對應著左上右下。
fill:int時,各通道均填充該值,當長度為3的tuple時,表示RGB通道需要填充的值。
padding_mode:填充模式,這裡提供了4種填充模式,1.constant,常量。2.edge 按照圖片邊緣的像素值來填充。3.reflect 4. symmetric
13.修改亮度、對比度和飽和度:transforms.ColorJitter
torchvision.transforms.ColorJitter(brightness=2,contrast=0,saturation=1)(image)
14.轉灰度圖:transforms.Grayscale
torchvision.transforms.Grayscale()(image)
15.線性變換:transforms.LinearTransformation
使用方形變換矩陣和離線計算的mean_vector變換張量圖像。給定transformation_matrix和mean_vector,將使矩陣變平。從中拉伸並減去mean_vector,然後用變換矩陣計算點積,然後將張量重新整形為其原始形狀。
白化轉換:假設X是列向量零中心數據。然後torch.mm計算數據協方差矩陣[D x D],對該矩陣執行SVD並將其作為transformation_matrix傳遞。(有理論依據,查論文時用)# 兩個參數未填torchvision.transforms.LinearTransformation()(tensor_image)
16.仿射變換:transforms.RandomAffine
torchvision.transforms.RandomAffine(30)(image)
degrees(sequence 或float或int) -要選擇的度數範圍。如果degrees是一個數字而不是像(min,max)這樣的序列,則度數範圍將是(-degrees,+degrees)。設置為0可停用旋轉。
translate(元組,可選) - 水平和垂直平移的最大絕對分數元組。例如translate =(a,b),然後在範圍-img_width * a <dx <img_width * a中隨機採樣水平移位,並且在-img_height * b <dy <img_height * b範圍內隨機採樣垂直移位。默認情況下不會翻譯。
scale(元組,可選) - 縮放因子間隔,例如(a,b),然後從範圍a <= scale <= b中隨機採樣縮放。默認情況下會保持原始比例。
shear(sequence 或float或int,optional) - 要選擇的度數範圍。如果degrees是一個數字而不是像(min,max)這樣的序列,則度數範圍將是(-degrees,+ degrees)。默認情況下不會應用剪切
resample({PIL.Image.NEAREST ,PIL.Image.BILINEAR ,PIL.Image.BICUBIC} ,可選) - 可選的重採樣過濾器。請參閱過濾器以獲取更多信 如果省略,或者圖像具有模式「1」或「P」,則將其設置為PIL.Image.NEAREST。
fillcolor(int) - 輸出圖像中變換外部區域的可選填充顏色。(Pillow> = 5.0.0)
17.依概率p轉換成灰度圖:transforms.RandomGrayscale
# 沒啥好說的torchvision.transforms.RandomGrayscale(0.8)(image)
18.將數據轉換成PILImage:transforms.ToPILImage
# tensor_image是tensor類型數據torchvision.transforms.ToPILImage()(tensor_image)
19.transforms.Lambda
# 自定義一個左上角裁剪方法class MyCrop: def __init__(self,size=224): self.size = size def __call__(self,img): ow,oh = img.size x1,y1 = (0,0) tw = th = self.size # 有足夠的大小截取 # img.crop坐標表示 (left, upper, right, lower) if (ow > tw or oh > th): return img.crop((x1, y1, x1+tw, y1+th)) return img def __repr__(self): return self.__class__.__name__ + '(size={0})'.format(self.size)
img = torchvision.transforms.Lambda(MyCrop(256))(image)img
對transforms組合進行操作
20.組合中隨機選一個進行操作:transforms.RandomChoice
transforms = [ torchvision.transforms.Grayscale(), torchvision.transforms.CenterCrop(256) ]torchvision.transforms.RandomChoice(transforms)(image)
21.給一組變換加上概率:transforms.RandomApply
# 數組中所有變換都會應用上去torchvision.transforms.RandomApply(transforms[:],0.8)(image)
22.打亂transforms中的順序:transforms.RandomOrder
# 在本例子中,雖然打亂順序,但是都會執行,所以顯示上無差別torchvision.transforms.RandomOrder(transforms)(image)
網上的講torchvision的變換有很多,但是大多都沒有帶效果,不方便理解。本文參考網上博客加上自己實踐附上效果圖,當做是字典來查,建議大家收藏。
參考:
https://blog.csdn.net/qq_38410428/article/details/94719553?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param