
Token für Token kompromittiert: Backdoor-Schwachstellen in Unified Autoregressive Models (NeurIPS'26)
NeurIPS 2026 · Offizielle PyTorch-Implementierung
Token by Token, Compromised: Backdoor Vulnerabilities in Unified Autoregressive Models
ToBAC (Token by Token Backdoor Attack) untersucht, wie Backdoors einheitliche autoregressive Modelle beeinflussen, die sowohl Bilder als auch Text generieren. Wir untersuchen Modellvergiftung mit Zugriff auf das Opfermodell sowie Datenvergiftung unter Verwendung bearbeiteter Bild-Text-Paare, einschließlich Angriffen, die beide Ausgabemodalitäten betreffen. Siehe das Paper für die Bedrohungsmodelle und Experimente.
Der Code unterstützt Liquid (Standard) und Janus-Pro, mit zusätzlichen Wrappern für Emu3 und ANOLE. Er umfasst Bild- und Textinferenz, LoRA-basierte White-Box- und Black-Box-Angriffe sowie Skripte zur Generierung bearbeiteter Datensatzbilder.
Verwenden Sie Linux mit einer NVIDIA-CUDA-GPU und einem CUDA-Toolkit, das mit PyTorch 2.5.1 kompatibel ist. FlashAttention wird während der Installation gebaut; Python 3.10 wird empfohlen. Führen Sie Befehle aus dem Repository-Stammverzeichnis aus.
git clone https://github.com/multimodal-ai-lab/ToBAC.git
cd ToBAC
pip install uv
uv sync --python 3.10
| Modell | Modell-Flag | Basisgewichte |
|---|---|---|
| Liquid (Standard) | liquid | Junfeng5/Liquid_V1_7B |
| Janus-Pro | janus | deepseek-ai/Janus-Pro-7B |
Basisgewichte werden bei der ersten Verwendung automatisch heruntergeladen. Janus-Pro benötigt keinen zusätzlichen Tokenizer-Download. Für Liquid laden Sie den Bild-Tokenizer-Checkpoint herunter; dessen YAML-Konfiguration ist enthalten:
wget -P tobac/models/chameleon/vqgan_weights/ \
https://huggingface.co/spaces/Junfeng5/Liquid_demo/resolve/main/chameleon/vqgan.ckpt
Für zugriffsbeschränkte Hugging-Face-Ressourcen authentifizieren Sie sich mit uv run hf auth login über ein Konto mit Zugriff.
uv run python inference_text_to_image.py \
--model_type liquid --batch_size 1 \
--prompts "a photo of a cat" \
--output liquid_example
Bilder werden in outputs/images/liquid_example/ gespeichert. Verwenden Sie --model_type janus und einen anderen Ausgabenamen, um mit Janus-Pro zu generieren. Mehrere Prompts können als --prompts "first prompt" "second prompt" übergeben oder mit --prompts_file prompts.csv unter Verwendung der Spalten idx,prompt geladen werden.
uv run python inference_image_to_text.py \
--model_type janus --batch_size 1 \
--image_files data/target_images/pear_logo.png \
--prompts "Describe this image."
Antworten werden im Terminal ausgegeben. Ersetzen Sie janus durch liquid, um Liquid zu verwenden. Beide Inferenzskripte akzeptieren --checkpoint /path/to/adapter, um einen trainierten LoRA-Adapter für das ausgewählte Modell zu laden.
Die Black-Box-Beispiele verwenden das Konzept anarchy; die White-Box-Beispiele verwenden smoking person. Beide verwenden den Trigger cool. Beim Training werden gepunktete Flags wie --model.model_type janus verwendet; bei der Inferenz wird --model_type janus verwendet. Übergeben Sie --help an einen Einstiegspunkt, um dessen Optionen zu prüfen.
Melden Sie sich vor dem Training bei Weights & Biases an:
uv run wandb login
Jeder Trainingslauf protokolliert seine Konfiguration, Verlustkurven, Lernrate und Validierungsausgaben in einem eigenen W&B-Lauf. Die folgenden Befehle wählen das Projekt ToBAC aus. Setzen Sie WANDB_ENTITY, um ein Konto oder Team auszuwählen; andernfalls verwendet W&B Ihr Standardkonto. Für lokales Logging stellen Sie einem Befehl WANDB_MODE=offline voran.
Die Validierung verwendet alle validation_prompts mit festen Sampling-Seeds bei jedem Validierungsschritt und zeigt saubere und getriggerte Ausgaben zusammen. Die drei Standardbeispiele sind die Tassen-Illustration, der Biber, der in einem kanadischen See schwimmt, und der Astronaut, der auf einem Pferd reitet. Überschreiben Sie --validation_prompts, um Ihre eigenen Beispiele zu verwenden. Legen Sie die Häufigkeit mit --steps_between_validation fest; verwenden Sie einen neuen --run_name für jedes Experiment, da vorhandene Laufverzeichnisse übersprungen werden.
Janus-Pro, Text zu Bild:
uv run python main_text_to_image_attack_blackbox.py \
--model.model_type janus \
--project.project_name ToBAC --run_name janus_anarchy_blackbox \
--data.data_source.type huggingface \
--data.data_source.hf_dataset MAI-Lab/ToBAC \
--data.data_source.hf_concept anarchy \
--data.data_source.enable_clean True \
--data.text_trigger "cool" --data.text_trigger_injection_mode format \
--data.injection_rate 1.0 \
--batch_size 1 --max_steps 10000 \
--steps_between_validation 1000 --steps_between_checkpoints 1000
Liquid, einheitliches Bild- und Texttraining:
uv run python main_unified_attack_blackbox.py \
--model.model_type liquid \
--project.project_name ToBAC --run_name liquid_anarchy_unified_blackbox \
--data.data_source.type huggingface \
--data.data_source.hf_dataset MAI-Lab/ToBAC \
--data.data_source.hf_concept anarchy \
--data.data_source.enable_clean True \
--data.text_trigger "cool" --data.text_trigger_injection_mode format \
--data.dynamic_target_responses False --data.injection_rate 1.0 \
--data.use_text_trigger_for_i2t False \
--batch_size 1 --max_steps 10000 \
--steps_between_validation 1000 --steps_between_checkpoints 1000