Forward-Sensitivity-Weighted TV
Implementation & benchmark of arXiv:2607.03054 — Directionally Weighted Total Variation for Inverse Problems
Source paper: Directionally Weighted Total Variation for Inverse Problems arXiv:2607.03054 ⓘ · analyzed Aug 30, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Add a spatially weighted TV penalty to a neural inverse solver, where a pixel receives a large penalty when perturbations there are strongly visible to the forward operator and a small penalty when the operator is insensitive. This prevents ordinary TV from suppressing or displacing structures differently across the field of view. The weight can be recomputed per acquisition geometry or cached for a fixed forward operator.
Formulas
Mathematical statement
The paper's weighted Tikhonov functional is $\frac{1}{2}\|Kf-d\|_{L^2(\partial\Omega)}^2+\alpha\operatorname{TV}_w(f)+\beta\int_{\partial\Omega}w_{\partial}(y)|f(y)|\,ds(y)$, where $f:\Omega\to\mathbb{R}$ is the unknown image, $K:L^2(\Omega)\to L^2(\partial\Omega)$ is the linear forward operator, $d$ is measured data, $\alpha,\beta>0$ are regularization parameters, and $Df$ is the distributional image gradient. The weighted TV term is $\operatorname{TV}_w(f)=\int_\Omega w(y)|Df|(y)$, with sensitivity weight $w(y)=\sup_{\boldsymbol{q},\,|\boldsymbol{q}|_2=1}\|K(\nabla G(\cdot;y)\cdot\boldsymbol{q})\|_{L^p(\partial\Omega)}$, where $G(\cdot;y)$ is the Green's function for a source at spatial location $y$, $\boldsymbol{q}$ is a unit jump direction, and $p$ controls the data-space norm. The transferable property is that the TV cost is scaled by the forward response to a localized directional perturbation. For a discrete neural reconstruction $u\in\mathbb{R}^{H\times W}$ with forward map $K$, use $w_i\approx\sup_{|q|=1}\|K(\nabla_hG_iq)\|_2$, or, when a Green function is unavailable, approximate localized sensitivity by $w_i=\|K e_i\|_2$ or $w_i=\|J_K(u)e_i\|_2$, normalized to mean one. Here $e_i$ is the unit image basis vector, $J_K(u)$ is the Jacobian of the differentiable forward model, and $D_x,D_y$ are finite-difference operators.
Implementation notes
Integrate the method as an additional loss term on the reconstructed image tensor u = net(measurement) in a CNN, U-Net, plug-and-play unrolled network, or diffusion inverse solver. First precompute a nonnegative weight map for each acquisition geometry. For a fixed linear operator represented by a routine K(v), use the exact discrete sensitivity s[i] = ||K(e_i)||_2; for a differentiable nonlinear operator, choose a reference image u0 and estimate s[i] = ||J_K(u0)e_i||_2 with JVPs, finite differences (K(u0+h e_i)-K(u0))/h, or batched columns when the image is small. If the operator has a known Green function, create a localized discrete Green derivative g_i(q) = grad(G[:,i]) dot q, evaluate K(g_i(q)) for q=(1,0),(0,1),(-1,0),(0,-1), and set s[i] to the largest output norm. Stabilize with s[i] <- s[i]+delta, normalize by the spatial mean, and optionally clip to the 5th--95th percentile. During every training step compute the forward residual r=K(u)-measurement, horizontal and vertical differences, tv=sum_i w[i]*sqrt(dx[i]^2+dy[i]^2+eps^2), and optimize loss=0.5*||r||^2+lambda*tv+other_task_losses. Detach w from autograd because it represents operator geometry rather than a learned shortcut. For a nonlinear or changing forward model, refresh weights every 1--5 epochs at the current exponential-moving-average reconstruction, but begin with fixed weights. For boundary observations, optionally add the paper's boundary sparsity term using the corresponding boundary sensitivity map. The first experiment should use a 64x64 synthetic source-recovery or tomography benchmark with deliberately nonuniform detector coverage and 10--20% noise. Compare ordinary unweighted TV, the same network without TV, and scalar TV with its coefficient selected on validation data. Measure centroid error, object-size bias, PSNR, SSIM, and data residual at matched training FLOPs. The method succeeds if it reduces localization and size bias, especially in low-sensitivity regions, while preserving or improving PSNR and requiring only one cached weight map per geometry.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: No measurable effect
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 7/10
Built a compact linear inverse-imaging MVP with exact cached sensitivity weights, weighted finite-difference TV, and comparisons against no TV and ordinary TV. The math check passed: column norms and finite-difference responses agreed to about 1e-11 relative error. In the regularization sweep, weighted TV improved best PSNR from 21.99 to 22.14 dB and reduced low-sensitivity-region centroid error from 0.0558 to 0.0395 pixels versus ordinary TV; the gain is modest but consistent with the claimed bias-reduction effect in this toy setting.
- Agent confidence
- 7/10
- Baseline
- Ordinary TV: fixed lambda PSNR 21.46 dB, low-region centroid error 0.0784 px; best sweep PSNR 21.99 dB and low-region centroid error 0.0558 px.
- Idea
- Sensitivity-weighted TV: fixed lambda PSNR 21.65 dB, low-region centroid error 0.0780 px; best sweep PSNR 22.14 dB and low-region centroid error 0.0395 px. Weight range was 0.660–1.643 after mean normalization; residual at best sweep was 0.01884 versus 0.01921 for ordinary TV.
Limitations: This was a single-seed 24x24 linear blurred-and-masked reconstruction, not the requested 64x64 neural/CNN solver or a tomography benchmark. Only one noise realization and a small lambda sweep were tested; SSIM, matched FLOPs, multiple geometries, nonlinear Jacobians, and boundary sparsity were not evaluated.
How to run: python3 experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.03054)
Ahead of the baseline (−0.3%) but not statistically significant (p=0.1159, wins 6 / 8 paired seeds).
- Benchmark
- Masked_blur_inverse
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 0.0214
- Idea mean
- 0.0213
- Effect (Δ)
- -0.0001 (−0.3%; negative = idea better)
- Wins
- 6 / 8 paired seeds
- p-value
- 0.1159 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±0.4%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The custom task is a small 16x16 linear masked-blur inverse problem, not a full PDE solver or 64x64 CNN. Only 8 seeds, 24 epochs, one weighted-TV strength, and a compact MLP were tested; SSIM, nonlinear Jacobians, changing geometries, boundary sparsity, and larger architectures were not evaluated.
How to run: python3 run_bench.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 9/10
Built and ran a structurally matched custom masked-blur inverse-imaging track with identical MLP systems and sensitivity-weighted TV as the only intervention. The exact sensitivity check passed with maximum relative error 4.64e-16. Weighted TV slightly improved test MSE, but the paired permutation p-value was 0.1159, so the effect was not significant.
- Baseline
- Best baseline, lr=0.003, no TV: mean test MSE 0.0213770662 ± 0.0003192543 over 8 seeds.
- Idea
- Best sensitivity-weighted TV, lr=0.003 and lambda=0.002: mean test MSE 0.0213048055 ± 0.0003312502; paired delta -0.0000722606, 6/8 wins, p=0.1159.
Benchmark result
Ahead of the baseline (−0.3%) but not statistically significant (p=0.1159, wins 6 / 8 paired seeds).
- Benchmark
- Masked_blur_inverse
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 0.0214
- Idea mean
- 0.0213
- Effect (Δ)
- -0.0001 (−0.3%; negative = idea better)
- Wins
- 6 / 8 paired seeds
- p-value
- 0.1159 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±0.4%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The custom task is a small 16x16 linear masked-blur inverse problem, not a full PDE solver or 64x64 CNN. Only 8 seeds, 24 epochs, one weighted-TV strength, and a compact MLP were tested; SSIM, nonlinear Jacobians, changing geometries, boundary sparsity, and larger architectures were not evaluated.
How to run: python3 run_bench.py
Artifacts
- bench_report.json 2.8 KB View Raw
- custom_inverse_track.py 1.6 KB View Raw
- experiment.py 5.1 KB View Raw
- report.md 1.6 KB View
- report_bench_2026-09-04T112634.md 4.1 KB View
- results.json 2.4 KB View Raw
- run_bench.py 4.7 KB View Raw