PyTorch框架学习七——自定义transforms方法
生活随笔
收集整理的這篇文章主要介紹了
PyTorch框架学习七——自定义transforms方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PyTorch框架學習七——自定義transforms方法
- 一、自定義transforms注意要素
- 二、自定義transforms步驟
- 三、自定義transforms實例:椒鹽噪聲
雖然前面的筆記介紹了很多PyTorch給出的transforms方法,也非常有用,但是也有可能在具體的問題中需要開發者自定義transforms方法,這次筆記就介紹如何自定義transforms方法。
ps:本次筆記中使用的原始圖像出自上次筆記:https://blog.csdn.net/qq_40467656/article/details/107958492
一、自定義transforms注意要素
從數據讀取機制DataLoader我們知道了transforms的內部工作原理,是在Compose類的__call__函數定義并實現的:
class Compose(object):"""Composes several transforms together.Args:transforms (list of ``Transform`` objects): list of transforms to compose.Example:>>> transforms.Compose([>>> transforms.CenterCrop(10),>>> transforms.ToTensor(),>>> ])"""def __init__(self, transforms):self.transforms = transformsdef __call__(self, img):for t in self.transforms:img = t(img)return img由此出發,可以看出自定義transforms需要注意兩個要素:
二、自定義transforms步驟
首先,自定義的transforms的輸入參數可能不只img一個,如概率p等等,但是原來的代碼只允許接收一個參數返回一個參數,所以可以在原來的基礎上改進:
class YourTransforms(object):def __init__(self, ...): # ...是要傳入的多個參數# 對多參數進行傳入# 如 self.p = p 傳入概率# ...def __call__(self, img): # __call__函數還是只有一個參數傳入# 該自定義transforms方法的具體實現過程# ...return img步驟如下:
三、自定義transforms實例:椒鹽噪聲
椒鹽噪聲:又稱為脈沖噪聲,是一種隨機出現的白點或黑點,白點被稱為鹽噪聲,黑點被稱為椒噪聲,其與信噪比(SNR)息息相關。
此外,我們還想加入概率p這個參數,實現隨機添加椒鹽噪聲。
仿照實現步驟,先寫出其實現的大致框架:
class AddPepperNoise(object):def __init__(self, snr, p): # snr, p 是要傳入的多個參數self.snr = snrself.p = p def __call__(self, img): # __call__函數還是只有一個參數傳入'''添加椒鹽噪聲的具體實現過程'''return img完整實現代碼:
class AddPepperNoise(object):"""增加椒鹽噪聲Args:snr (float): Signal Noise Ratep (float): 概率值,依概率執行該操作"""def __init__(self, snr, p=0.9):assert isinstance(snr, float) and (isinstance(p, float))self.snr = snrself.p = pdef __call__(self, img):"""Args:img (PIL Image): PIL ImageReturns:PIL Image: PIL image."""if random.uniform(0, 1) < self.p:img_ = np.array(img).copy()h, w, c = img_.shapesignal_pct = self.snrnoise_pct = (1 - self.snr)mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])mask = np.repeat(mask, c, axis=2)img_[mask == 1] = 255 # 鹽噪聲img_[mask == 2] = 0 # 椒噪聲return Image.fromarray(img_.astype('uint8')).convert('RGB')else:return img添加椒鹽噪聲之后:
總結
以上是生活随笔為你收集整理的PyTorch框架学习七——自定义transforms方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++开源项目
- 下一篇: pytorch利用rnn通过sin预测c