
टोकन दर टोकन, समझौता: एकीकृत ऑटोरेग्रेसिव मॉडल में बैकडोर भेद्यताएँ (NeurIPS'26)
NeurIPS 2026 · आधिकारिक PyTorch कार्यान्वयन
टोकन दर टोकन, समझौता: एकीकृत ऑटोरेग्रेसिव मॉडल में बैकडोर भेद्यताएँ
ToBAC (Token by Token Backdoor Attack) अध्ययन करता है कि बैकडोर उन एकीकृत ऑटोरेग्रेसिव मॉडलों को कैसे प्रभावित करते हैं जो छवियाँ और टेक्स्ट दोनों उत्पन्न करते हैं। हम पीड़ित मॉडल तक पहुँच के साथ मॉडल पॉइज़निंग और संपादित छवि–टेक्स्ट जोड़ों का उपयोग करके डेटा पॉइज़निंग की जाँच करते हैं, जिसमें दोनों आउटपुट मोडलिटी को प्रभावित करने वाले हमले भी शामिल हैं। खतरे के मॉडल और प्रयोगों के लिए पेपर देखें।
कोड Liquid (डिफ़ॉल्ट) और Janus-Pro का समर्थन करता है, साथ ही Emu3 और ANOLE के लिए अतिरिक्त रैपर भी। इसमें छवि और टेक्स्ट इन्फरेंस, LoRA-आधारित व्हाइट-बॉक्स और ब्लैक-बॉक्स हमले, और संपादित डेटासेट छवियाँ उत्पन्न करने की स्क्रिप्ट शामिल हैं।
NVIDIA CUDA GPU और PyTorch 2.5.1 के साथ संगत CUDA टूलकिट वाले Linux का उपयोग करें। FlashAttention इंस्टॉलेशन के दौरान बनाया जाता है; Python 3.10 की सिफारिश की जाती है। कमांड रिपॉज़िटरी रूट से चलाएँ।
git clone https://github.com/multimodal-ai-lab/ToBAC.git
cd ToBAC
pip install uv
uv sync --python 3.10
| मॉडल | मॉडल फ़्लैग | बेस वेट्स |
|---|---|---|
| Liquid (डिफ़ॉल्ट) | liquid | Junfeng5/Liquid_V1_7B |
| Janus-Pro | janus | deepseek-ai/Janus-Pro-7B |
बेस वेट्स पहले उपयोग पर स्वचालित रूप से डाउनलोड हो जाते हैं। Janus-Pro को किसी अतिरिक्त टोकनाइज़र डाउनलोड की आवश्यकता नहीं है। Liquid के लिए, इमेज टोकनाइज़र चेकपॉइंट डाउनलोड करें; इसका YAML कॉन्फ़िगरेशन शामिल है:
wget -P tobac/models/chameleon/vqgan_weights/ \
https://huggingface.co/spaces/Junfeng5/Liquid_demo/resolve/main/chameleon/vqgan.ckpt
पहुँच-नियंत्रित Hugging Face संसाधनों के लिए, पहुँच वाले खाते का उपयोग करके uv run hf auth login से प्रमाणित करें।
uv run python inference_text_to_image.py \
--model_type liquid --batch_size 1 \
--prompts "a photo of a cat" \
--output liquid_example
छवियाँ outputs/images/liquid_example/ में सहेजी जाती हैं। Janus-Pro के साथ उत्पन्न करने के लिए --model_type janus और एक अलग आउटपुट नाम का उपयोग करें। कई प्रॉम्प्ट को --prompts "first prompt" "second prompt" के रूप में पास किया जा सकता है, या idx,prompt कॉलम का उपयोग करके --prompts_file prompts.csv से लोड किया जा सकता है।
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."
प्रतिक्रियाएँ टर्मिनल पर प्रिंट होती हैं। Liquid का उपयोग करने के लिए janus को liquid से बदलें। दोनों इन्फरेंस स्क्रिप्ट चयनित मॉडल के लिए प्रशिक्षित LoRA एडाप्टर लोड करने हेतु --checkpoint /path/to/adapter स्वीकार करती हैं।
ब्लैक-बॉक्स उदाहरण anarchy अवधारणा का उपयोग करते हैं; व्हाइट-बॉक्स उदाहरण smoking person का उपयोग करते हैं। दोनों ट्रिगर cool का उपयोग करते हैं। प्रशिक्षण डॉटेड फ़्लैग जैसे --model.model_type janus लेता है; इन्फरेंस --model_type janus का उपयोग करता है। किसी एंट्री पॉइंट के विकल्पों का निरीक्षण करने के लिए उसे --help पास करें।
प्रशिक्षण से पहले Weights & Biases में लॉग इन करें:
uv run wandb login
प्रत्येक प्रशिक्षण रन अपना कॉन्फ़िगरेशन, लॉस कर्व्स, लर्निंग रेट, और वैलिडेशन आउटपुट अपने स्वयं के W&B रन में लॉग करता है। नीचे दिए गए कमांड ToBAC प्रोजेक्ट का चयन करते हैं। खाता या टीम चुनने के लिए WANDB_ENTITY सेट करें; अन्यथा W&B आपके डिफ़ॉल्ट खाते का उपयोग करता है। स्थानीय लॉगिंग के लिए, किसी कमांड के आगे WANDB_MODE=offline लगाएँ।
वैलिडेशन प्रत्येक वैलिडेशन चरण पर निश्चित सैंपलिंग सीड्स के साथ सभी validation_prompts का उपयोग करता है, जो साफ़ और ट्रिगर किए गए आउटपुट एक साथ दिखाता है। तीन डिफ़ॉल्ट हैं कप का चित्रण, कनाडाई झील में तैरता बीवर, और घोड़े पर सवार अंतरिक्ष यात्री। अपने स्वयं के उदाहरणों का उपयोग करने के लिए --validation_prompts को ओवरराइड करें। आवृत्ति --steps_between_validation से सेट करें; प्रत्येक प्रयोग के लिए एक नया --run_name उपयोग करें क्योंकि मौजूदा रन डायरेक्टरीज़ छोड़ दी जाती हैं।
Janus-Pro, टेक्स्ट से छवि:
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, एकीकृत छवि और टेक्स्ट प्रशिक्षण:
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
दोनों कमांड liquid और janus का समर्थन करते हैं। --data.data_source.hf_concept के साथ rainbow, anarchy, या pear चुनें। लोडर ट्रिगर को कॉन्टेक्स्ट के {} प्लेसहोल्डर में सम्मिलित करता है और इसे चयनित लक्ष्य छवि के साथ जोड़ता है। enable_clean True के साथ, यह प्लेसहोल्डर हटाए गए साफ़ छवि और कॉन्टेक्स्ट को भी शामिल करता है। एकीकृत प्रशिक्षण अवधारणा और कॉन्टेक्स्ट से अपना लक्ष्य कैप्शन प्राप्त करता है, फिर कॉन्फ़िगर किया गया लक्ष्य प्रतिक्रिया जोड़ता है। इमेज-टू-टेक्स्ट निर्देशों में डिफ़ॉल्ट रूप से टेक्स्ट ट्रिगर नहीं होता (use_text_trigger_for_i2t=False); उस मोडलिटी के लिए ट्रिगर संपादित छवि प्रदान करती है।
Liquid, टेक्स्ट से छवि: