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)   

可见反变换后的结果与原结果机乎相同,方法正确。

 

posted on   看看完了  阅读(1851)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示