Source code for deepinv.physics.generator.noise
import torch
from deepinv.physics.generator import PhysicsGenerator
[docs]
class SigmaGenerator(PhysicsGenerator):
r"""
Generator for the noise level :math:`\sigma` in the :class:`Gaussian noise model <deepinv.physics.GaussianNoise>`.
The noise level is sampled uniformly from the interval :math:`[\sigma_{\text{min}}, \sigma_{\text{max}}]`.
:param float sigma_min: minimum noise level
:param float sigma_max: maximum noise level
:param torch.Generator rng: random number generator
:param str device: device where the tensor is stored
:param torch.dtype dtype: data type of the generated tensor.
|sep|
:Examples:
>>> from deepinv.physics.generator import SigmaGenerator
>>> generator = SigmaGenerator()
>>> sigma_dict = generator.step(seed=0) # dict_keys(['sigma'])
>>> print(sigma_dict['sigma'])
tensor([0.2532])
"""
def __init__(
self,
sigma_min=0.01,
sigma_max=0.5,
rng: torch.Generator = None,
device: str = "cpu",
dtype: torch.dtype = torch.float32,
):
super().__init__(shape=(1,), rng=rng, device=device, dtype=dtype)
self.sigma_min = sigma_min
self.sigma_max = sigma_max
[docs]
def step(self, batch_size=1, seed: int = None, **kwargs):
r"""
Generates a batch of noise levels.
:param int batch_size: batch size
:param int seed: the seed for the random number generator.
:return: dictionary with key **'sigma'**: tensor of size (batch_size,).
:rtype: dict
"""
self.rng_manual_seed(seed)
sigma = (
torch.rand(batch_size, generator=self.rng, **self.factory_kwargs)
* (self.sigma_max - self.sigma_min)
+ self.sigma_min
)
return {"sigma": sigma}
[docs]
class GainGenerator(PhysicsGenerator):
r"""
Generator for the noise level :math:`\gamma` in the :class:`Poisson noise model <deepinv.physics.PoissonNoise>`.
The gain is sampled uniformly from the interval :math:`[\gamma_\text{min}, \gamma_\text{max}]`.
:param float gain_min: minimum noise level
:param float gain_max: maximum noise level
:param torch.Generator rng: random number generator
:param str device: device where the tensor is stored
:param torch.dtype dtype: data type of the generated tensor.
|sep|
:Examples:
>>> from deepinv.physics.generator import GainGenerator
>>> generator = GainGenerator()
>>> params = generator.step(seed=0) # params(['gain'])
>>> print(params['gain'])
tensor([0.2489])
"""
def __init__(
self,
gain_min=0.1,
gain_max=0.4,
rng: torch.Generator = None,
device: str = "cpu",
dtype: torch.dtype = torch.float32,
):
super().__init__(shape=(1,), rng=rng, device=device, dtype=dtype)
self.gain_min = gain_min
self.gain_max = gain_max
[docs]
def step(self, batch_size=1, seed: int = None, **kwargs):
r"""
Generates a batch of noise levels.
:param int batch_size: batch size
:param int seed: the seed for the random number generator.
:return: dictionary with key **'gain'**: tensor of size (batch_size,).
:rtype: dict
"""
self.rng_manual_seed(seed)
gain = (
torch.rand(batch_size, generator=self.rng, **self.factory_kwargs)
* (self.gain_max - self.gain_min)
+ self.gain_min
)
return {"gain": gain}