Deep Learning & Applied AI · Sapienza 2026

NoWhisper

Fast generative perturbations for breaking Whisper ASR.

Train once, then perturb a new speech waveform in a single forward pass. The result stays understandable to a listener while pushing Whisper far away from the original transcript.

Adversarial ML Audio Whisper ASR PyTorch
Lorenzo Marinelli & Andrea Venditti July 2026
Clean speech and a visually similar adversarial waveform produce very different Whisper outcomes.
Clean speech Whisper ✓
Clean audio waveform A smooth speech waveform centred around zero amplitude.
+ δ ≤ ε Gθ(x)
Adversarial speech Whisper ✕
Adversarial audio waveform The clean speech waveform with a small high-frequency perturbation.
0.047 → 3.825Whisper Small WER
99%Attack success
20.79 dBMean SNR

01 · The idea

Make transcription expensive to trust, not expensive to attack

NoWhisper turns a slow, sample-specific waveform attack into a reusable generator. It learns the attack once, then produces a bounded perturbation for unseen speech without per-clip optimization.

Human listener

Keep the message

Speech remains recognizable and understandable within a strict amplitude budget.

Whisper ASR

Lose the transcript

Substitutions and insertions push the decoded text away from the original speech.

Course
Deep Learning & Applied AI
Data
LibriSpeech · 16 kHz mono
Stack
PyTorch · Transformers · Gradio
Attack
Untargeted · waveform-level

02 · Method

From iterative gradients to one forward pass

Both paths optimize the same idea: increase Whisper’s reference loss while keeping the waveform bounded.

A

White-box reference

Optimize each clip

AudioAdamProject δAttack

Gradients pass through Whisper’s differentiable frontend for many update steps.

StrongSlow per waveform

B

Amortized attack

Generate for every clip

AudioGθBound δAttack

The trained network predicts a complete perturbation in a single evaluation.

ReusableOne forward pass

Technical note · bounded attack equations
x_adv = clip(x + Π[-ε, ε](δ), -1, 1) x_gen = clip(x + ε tanh(Gθ(x)), -1, 1)

The projection and tanh parameterization enforce the same L∞ amplitude budget in both pipelines.

03 · Model

A compact residual U-Net for raw waveforms

Skip connections preserve local speech structure while dilated residual blocks expand temporal context.

Four encoder levels meet a 128-channel bottleneck, then merge into a symmetric decoder.
Base8 ch
Depth4
Kernel15
Blocks2 / stage

The surprising result

The strongest generator skipped teacher imitation and attacked Whisper’s reference loss directly.

Architecture and training objective

Blocks: Conv1D, GroupNorm, SiLU, dilation, channel projection, and residual paths.

Objective: adversarial reference loss plus waveform regularizers and optional waveform or spectral teacher losses.

J(θ) = -w_adv L_ref(x_gen, y) + R_gen + optional teacher losses

04 · Evidence

Trained on Small. Effective on larger Whisper models.

The same ε = 0.0075 generator was evaluated on 100 held-out clips per model without retraining.

Whisper Small99%WER 0.047 → 3.825
Whisper Medium98%WER 0.033 → 2.242
Whisper Large-v396%WER 0.023 → 2.817
Adversarial WER · shared 0–4 scale
Small
3.825
Medium
2.242
Large-v3
2.817
Full transfer and perturbation-budget results
Cross-model transfer of the Whisper Small-trained generator
Model WER clean → adversarial CER clean → adversarial Success SNR
Small0.047 → 3.8250.020 → 3.02899%20.79 dB
Medium0.033 → 2.2420.014 → 1.86098%20.79 dB
Large-v30.023 → 2.8170.009 → 2.24896%20.79 dB

At ε = 0.005 the best 20-epoch run reached 2.165 WER at 23.37 dB. Strong masking raised SNR to 23.64 dB but reduced adversarial WER to 0.064.

05 · Run locally

The frontend and a ready checkpoint ship with the repository

Clone, install the matching PyTorch group, and launch the Gradio interface. No generator training is required.

CPU / Apple Silicon
git clone https://github.com/Reewd/NoWhisper.git
cd NoWhisper
uv sync --group cpu
uv run --group cpu nowhisper-ui
Checkpoint included models/generators/resunet1d/latest.pt Loaded lazily when generator mode is first used.
  • Python 3.13 is required.
  • For NVIDIA GPUs, replace cpu with cu126 or cu130.
  • Whisper Small weights may download on first use.
Open repository ↗
Conceptual representation of the local NoWhisper frontend with audio input, attack controls, plots, and metrics.
NoWhisper local · ready
Input audioUpload or microphone
LanguageAuto-detect
Clean transcription

Editable reference text appears here before the attack.

Waveform + perturbation
Delta spectrogram
WER3.825
SNR20.79 dB
StatusSuccess

06 · Limits & resources

A strong proof of concept with an audible trade-off

01

Not imperceptible

At roughly 20–23 dB SNR, the speech is understandable but the perturbation can still be audible.

02

Masking can collapse the attack

The strongest reported masking preserved quality but barely moved WER.

03

Open evaluation space

Other ASR families, languages, and over-the-air playback remain future tests.

Future directions

Learned perceptual objectives, multilingual evaluation, physical playback tests, and adversarial training are the clearest next steps.