Pytorch中Unormalize變換的實現


在torchvsion庫中,transforms下邊有個Normalize變換方法,用於圖像數據的歸一化:

class torchvision.transforms.Normalize(mean, std)

給定均值:(R,G,B) 方差:(R,G,B),將會把Tensor正則化。即:Normalized_image=(image-mean)/std

normalize變換主要用於Imagenet數據集的訓練中作為數據輸入的歸一化。

這就導致在預測圖像后,進行預測標簽和圖像的檢查時,圖像不能正常顯示。需要進行反歸一化變換才可以。

 
但是torchvision沒有給Unormalize方法,下面的代碼實現了UnNormalize變換:
class UnNormalize:
    #restore from T.Normalize
    #反歸一化
    def __init__(self,mean=(0.485, 0.456, 0.406),std= (0.229, 0.224, 0.225)):
        self.mean=tc.tensor(mean).view((1,-1,1,1))
        self.std=tc.tensor(std).view((1,-1,1,1))
    def __call__(self,x):
        x=(x*self.std)+self.mean
        return tc.clip(x,0,None)

用法和normalize相同,二者是正反變換,使用方法如下:

import torch as tc 

from torchvision import transforms as T

t=tc.rand((1,3,24,24))

t1=T.Normalize((1,2,3),(3,2,1))(t)    #歸一化

tt=UnNormalize((1,2,3),(3,2,1))(t1)      #反歸一化

(t-tt).abs().sum()                       #結果比較

輸出是:tensor(5.3823e-05)   

可見反變換后的結果與原結果機乎相同,方法正確。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM