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