Everything to this point is machinery. A UNet that maps a hazy image to a clear one, trained with an loss, is one forward pass, one loss term and no schedule, no sampler, no codec convention and no prediction-type footgun. It is enormously simpler and it should be the default answer.
So the question that decides whether the last three topics were worth building is: what does sampling give you that the regressor does not? The answer is not "sharper images", although that is what people say. It is a statement about what the two objectives converge to, and it is short enough to derive.
What an L2 regressor converges to
-
The training objective of the regressor, over the joint distribution of hazy inputs y and clear targets x. Note it is an expectation over pairs — the network never sees a single answer, it sees a distribution of them.
-
Split the expectation by conditioning on y. The inner problem is now independent for each input, so the optimum can be found pointwise — this is the step that turns a statement about training into a statement about a single input.
-
Minimising a squared error over a distribution returns its mean, which is the standard result and the entire answer. An L2 regressor does not learn to produce a plausible clear image; it learns to produce the average of every clear image consistent with its input.
-
And an average of plausible images is generally not a plausible image. Where the posterior is wide the mean falls off the data manifold entirely — this is why regressed outputs blur, and blur is not a capacity problem that a larger network fixes.
-
A sampler does something categorically different: it returns a draw. The output is on the manifold by construction, and it is not the mean of anything — which is the property being bought, at the cost of it no longer being the estimate that minimises squared error.
For the depth half the argument is subtler, and it lands on a question the monocular-depth topic already opened: what a depth prediction even means.
A monocular depth network's output is already defined only up to a transformation, and its metrics are computed after an alignment the robot cannot perform at inference time. Adding a sampler does not fix that — nothing on this page fixes that. What it adds is a second, orthogonal thing: run the sampler twice with different seeds and you get two depth maps, both plausible, differing most where the image is least informative. That spread is a posterior width, measured rather than asserted, and it is available for free from a model you were going to run anyway.
A regressor cannot offer it at all. It produces one number per pixel and no way to ask how sure it was; any uncertainty it reports has to be a second head trained on a second objective, which is a separate model with separate failure modes.
Be precise about the status of this, though. The shipped configuration has test-time depth ensembling present but disabled — the ensemble size is one, with a median reduction and a regulariser weight waiting for it. The mechanism exists, it is the right mechanism, and nobody has turned it on. That is the honest state of it, and it is a more useful thing to know than a claim that the model quantifies its own uncertainty.
Your diffusion dehazer scores 1.5 dB worse PSNR than the L2 baseline you are replacing. Do you ship it?
Show answer
Not on that number alone, in either direction — and there is a specific diagnostic that turns the question into a measurement.
Run the sampler several times on the same inputs and look at where the draws disagree. If they disagree in exactly the regions where the baseline is smoothest, you are looking at posterior width, and the dB is the expected price of not averaging. That is the intended behaviour, not a regression, and the PSNR gap is evidence for the model rather than against it.
If the draws agree everywhere and the model is simply worse, the gap is not buying anything and you have a genuinely worse model — check the prediction type, the scaling factor and the terminal-SNR handling before anything else, because all three produce plausible output when wrong.
Then answer the actual question, which is who consumes the output. A downstream detector or a human wants the sample. A distortion metric wants the mean. If the deliverable is the metric, ship the regressor and say why.