@@ -42,7 +42,7 @@ def PlugAndPlay(proxf, denoiser, dims, x0, tau, niter=10,
4242 .. math::
4343
4444 \mathbf{x},\mathbf{z} = \argmin_{\mathbf{x}}
45- f(\mathbf{x}) + g(\mathbf{x})
45+ f(\mathbf{x}) + \lambda g(\mathbf{x})
4646
4747 where :math:`f(\mathbf{x})` is a function that has a known proximal
4848 operator where :math:`g(\mathbf{x})` is a function acting as implicit
@@ -88,21 +88,33 @@ def PlugAndPlay(proxf, denoiser, dims, x0, tau, niter=10,
8888 .. math::
8989
9090 \mathbf{x}^{k+1} = \prox_{\tau f}(\mathbf{z}^{k} - \mathbf{u}^{k})\\
91- \mathbf{z}^{k+1} = \operatorname{Denoise}(\mathbf{x}^{k+1} + \mathbf{u}^{k}, \tau \sigma )\\
91+ \mathbf{z}^{k+1} = \operatorname{Denoise}(\mathbf{x}^{k+1} + \mathbf{u}^{k}, \tau \lambda )\\
9292 \mathbf{u}^{k+1} = \mathbf{u}^{k} + \mathbf{x}^{k+1} - \mathbf{z}^{k+1}
9393
94- where :math:`\operatorname{Denoise}` is a denoising algorithm of choice and
95- :math:`\tau \sigma` is the denoising parameter (should be chosen to
96- represent an estimate of the noise variance). This rather peculiar step
97- originates from the intuition that the optimization process associated
98- with the z-update can be interpreted as a denoising inverse problem -
99- for this reason any denoising of choice can be used instead of a function
100- with known proximal operator.
94+ where :math:`\operatorname{Denoise}` is a denoising algorithm of choice. This rather peculiar step originates
95+ from the intuition that the optimization process associated with the z-update can be interpreted as a denoising
96+ inverse problem, or more specifically a MAP denoiser where the noise is gaussian with zero mean and variance
97+ equal to :math:`\tau \lambda`. For this reason any denoising of choice can be used instead of a function with
98+ known proximal operator.
99+
100+ Finally, whilst the :math:`\tau \lambda` denoising parameter should be chosen to
101+ represent an estimate of the noise variance (of the denoiser, not the data of the problem we wish to solve!),
102+ special care must be taken when setting up the denoiser and calling this optimizer. More specifically,
103+ :math:`\lambda` should not be passed to the optimizer, rather set directly in the denoiser.
104+ On the other hand :math:`\tau` must be passed to the optimizer as it is also affecting the x-update;
105+ when defining the denoiser, ensure that :math:`\tau` is multiplied to :math:`\lambda` as shown in the tutorial.
106+
107+ Alternative, as suggested in [2]_, the :math:`\tau` could be set to 1. The parameter :math:`\lambda` can then be set
108+ to maximize the value of the denoiser and a second tuning parameter can be added directly to :math:`f`.
101109
102110 .. [1] Venkatakrishnan, S. V., Bouman, C. A. and Wohlberg, B.
103111 "Plug-and-Play priors for model based reconstruction",
104112 IEEE. 2013.
105113
114+ .. [1] Meinhardt, T., Moeller, M, Hazirbas, C., and Cremer, D.
115+ "Learning Proximal Operators: Using Denoising Networks for Regularizing Inverse Imaging Problems",
116+ arXiv. 2017.
117+
106118 """
107119 # Denoiser
108120 proxpnp = _Denoise (denoiser , dims = dims )
0 commit comments