
Reproducing ADJSCC: attention for wireless image transmission
Standard image transmission is a stack: JPEG compresses, then a channel code (LDPC, Turbo) adds redundancy so the compressed bits survive the wire. ADJSCC — “Wireless Image Transmission Using Deep Source Channel Coding With Attention Modules” (arXiv:2012.00533) — throws that stack out and replaces it with one neural network trained end-to-end against reconstruction quality, the same idea I’d already seen work for speech in DeepSC-S. This time on CIFAR-10 images over an AWGN channel. Code’s on GitHub, pretrained checkpoints on Hugging Face.
The core problem: one model, any SNR
A plain deep joint source-channel coding (DeepJSCC) network trained at a fixed SNR gets good at exactly that SNR and falls off fast anywhere else. The obvious fix — train a separate model per SNR — doesn’t scale to a channel that’s constantly changing.
ADJSCC’s answer is the Attention Feature (AF) module: the target SNR gets fed into the network as a side input at every stage, and the AF modules use it to reweight feature-map channels on the fly. One set of weights, one forward pass, and the network conditions its own behavior on the channel it’s currently facing instead of needing to be retrained for it.
Pipeline
image → encoder (CNN + AF modules) → power normalization → AWGN channel → decoder (CNN + AF modules) → image
The encoder compresses a 32×32 CIFAR image down to C channels at 8×8 — these become the transmitted symbols. Reals get paired into complex symbols, power-normalized, and scattered across the channel; watching the constellation spread as SNR drops is a good way to see what the channel is doing to the signal before it ever reaches the decoder. The decoder mirrors the encoder and reconstructs the image, with its own AF modules doing the same SNR-conditioning trick in reverse.
Training sweeps a random SNR every step (0–20 dB) rather than a fixed one — the same “sample a fresh noise level per batch” trick that made the speech version robust across its whole operating range instead of over fitting to one point on the SNR axis.
What the reproduction actually tests
The paper’s headline claim is that one ADJSCC model matches or beats a bank of fixed-SNR baselines across the whole SNR range, and stays robust when the channel it’s evaluated on doesn’t match the one it happened to be trained on. So the experiment set is built around exactly that comparison: one ADJSCC model (bandwidth ratio R = 1/6) against two baselines individually trained and frozen at a low SNR (1 dB) and a high SNR (19 dB), evaluated across the full range with nothing retrained.

The shape to look for: the fixed-SNR baselines peak near whatever SNR they were trained at and degrade either side of it — reasonable, since that’s all they ever saw. ADJSCC, with the same architecture and no more parameters, tracks the upper envelope of both baselines across the range instead of specializing at one point on it — which is exactly the case the AF module has to make for itself to be worth the added complexity over a plain DeepJSCC net.
What I’m being careful not to claim
CIFAR’s 32×32 images are too small for MS-SSIM’s fixed 5-scale pyramid, so evaluation reports single-scale SSIM instead — swapping to MS-SSIM would need a larger dataset like Kodak. Rayleigh fading is stubbed in the channel module but not exercised here; AWGN is the channel this reproduction actually stands behind. And bandwidth ratio is a knob, not a fixed choice — R = C/96 trades compression against reconstruction quality, and the repo’s --ratio flag is there specifically to move along that tradeoff rather than accept whatever the paper’s default happened to be.
An interactive HTML viewer (baked straight from eval output, no server needed) sits in viz/interactive.html in the repo if you want to look at individual reconstructions across the SNR sweep rather than just the aggregate curve.