Skip to content

Quickstart

This example uses torchaudio wav2vec2. Install asr-attacks[wav2vec2] first.

import torch
import torchaudio
from asr_attacks import ASRAttacker, CTCModuleBackend

bundle = torchaudio.pipelines.WAV2VEC2_ASR_BASE_960H
model = bundle.get_model()
device = "cuda" if torch.cuda.is_available() else "cpu"

backend = CTCModuleBackend(model, labels=list(bundle.get_labels()), device=device)
attacker = ASRAttacker(backend)

waveform, sample_rate = torchaudio.load("example.wav")
if sample_rate != 16000:
    waveform = torchaudio.functional.resample(waveform, sample_rate, 16000)

print("clean:", attacker.decode(waveform))
adv = attacker.fgsm(waveform, epsilon=0.01, targeted=False)
print("adversarial:", attacker.decode(adv))

Targeted BIM

Targets may be a string ("THE CAT SAT"), a wav2vec2 character list (list("THE|CAT|SAT")), or a one-element list. Spaces become | when that symbol is in the model vocabulary.

target = "THE CAT SAT"
adv = attacker.bim(
    waveform,
    target=target,
    epsilon=0.03,
    alpha=0.005,
    num_iter=50,
    targeted=True,
    early_stop=True,
    nested=False,
)
mean_wer, counts = attacker.wer([target], [adv])
print(mean_wer, counts)

Hugging Face CTC

from asr_attacks import ASRAttacker, HuggingFaceCTCBackend

backend = HuggingFaceCTCBackend("facebook/wav2vec2-base-960h", device="cpu")
attacker = ASRAttacker(backend)

Requires pip install asr-attacks[hf].

Tiny model without weights

examples/quickstart.py runs FGSM on a one-layer convolutional CTC stand-in so you can exercise the API without downloading wav2vec2.