# Copyright 2024 EPFL and Apple Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import hashlib import collections.abc from itertools import repeat import torchvision.transforms.functional as TF from fourm.utils.data_constants import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD def denormalize(img, mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD): """ Denormalizes an image. Args: img (torch.Tensor): Image to denormalize. mean (tuple): Mean to use for denormalization. std (tuple): Standard deviation to use for denormalization. """ return TF.normalize( img.clone(), mean= [-m/s for m, s in zip(mean, std)], std= [1/s for s in std] ) def generate_uint15_hash(seed_str): """Generates a hash of the seed string as an unsigned int15 integer""" return int(hashlib.sha256(seed_str.encode('utf-8')).hexdigest(), 16) % (2**15) # From PyTorch internals def _ntuple(n): def parse(x): if isinstance(x, collections.abc.Iterable): return x return tuple(repeat(x, n)) return parse to_1tuple = _ntuple(1) to_2tuple = _ntuple(2) to_3tuple = _ntuple(3) to_4tuple = _ntuple(4) to_ntuple = _ntuple