
Codice di ricerca per rilevare e disintossicare backdoor nei modelli di diffusione text-to-image, con pipeline per Stable Diffusion v1.4, v1.5, XL e 3 Medium.
TNC-Defense fornisce codice di ricerca per rilevare e bonificare le backdoor nei modelli di diffusione text-to-image. Il repository attualmente include pipeline di rilevamento per Stable Diffusion v1.4, Stable Diffusion v1.5, Stable Diffusion XL e Stable Diffusion 3 Medium, insieme a pipeline di bonifica per Stable Diffusion v1.4 e Stable Diffusion XL.
Solo per uso di ricerca. Questo codice è pensato per studiare la robustezza e la sicurezza dei modelli di diffusione text-to-image. Gli utenti sono responsabili del rispetto delle licenze e delle policy di utilizzo di tutti i modelli, i dataset e le implementazioni a monte.
TNC-Defense/
├── TNC-Detect/
│ ├── detect_sd14.py # Detection on Stable Diffusion v1.4
│ ├── detect_sd15.py # Detection on Stable Diffusion v1.5
│ ├── detect_sdxl.py # Detection on Stable Diffusion XL
│ ├── detect_sd3.py # Detection on Stable Diffusion 3 Medium
│ ├── ana.py # Detection metrics and visualization
│ ├── run_detect_sd14.sh # Multi-GPU SD1.4 detection
│ └── ana.sh # Analysis entry point
└── TNC-Detox/
├── data/ # Paired clean/backdoored training data
├── common.py # Shared data and reproducibility utilities
├── detox_sd14.py # Detoxification for SD1.4
├── detox_sdxl.py # Detoxification for SDXL
├── evaluate_sd14.py # SD1.4 generation-based evaluation
├── compute_fid.py # FID evaluation
├── run_detox_sd14.sh # Multi-GPU SD1.4 detoxification
└── run_detox_sdxl.sh # SDXL detoxification
Il codice è stato sottoposto a smoke test nell'ambiente Conda TCN con:
Le utility di analisi e valutazione richiedono inoltre pacchetti come NumPy, pandas, SciPy, scikit-learn, Matplotlib, Pillow e tqdm.
Attiva l'ambiente prima di eseguire un esperimento:
cd TNC-Defense
conda create -n TCN python=3.10 -y
conda activate TCN
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
Gli entry point Bash utilizzano python dell'ambiente attivo. È possibile specificare un interprete diverso tramite la variabile d'ambiente PYTHON:
PYTHON=python bash TNC-Detect/run_detect_sd14.sh
Tutti i percorsi del repository vengono risolti relativamente alla posizione di ciascuno script, quindi i comandi non dipendono dalla directory di lavoro corrente. I percorsi predefiniti dei modelli seguono la struttura locale del progetto utilizzata per gli esperimenti. Se i modelli sono salvati altrove, sovrascrivi i corrispondenti argomenti da riga di comando come --base-model-path, --backdoor-model-path, --base-model o --tox-path.
I dataset di bonifica sono inclusi in:
TNC-Detox/data/
├── sd14/
│ ├── pixel/
│ ├── pixel_mul_tokens/
│ ├── eviledit/
│ ├── personal_bkd/
│ └── villain_mul/
└── sdxl/
├── pixel/
└── pixel_mul_tokens/
Ogni dataset contiene clean/, poison/ e metadata.json.
Il runner predefinito valuta tutti i metodi di backdoor SD1.4 configurati. Assegna i metodi agli ID GPU definiti in run_detect_sd14.sh e li avvia in parallelo.
cd TNC-Defense/TNC-Detect
bash run_detect_sd14.sh
Per eseguire direttamente un singolo metodo:
python detect_sd14.py \
--backdoor-method pixel \
--device cuda:0 \
--seed 0 \
--num-inference-steps 50
Gli argomenti disponibili per ogni famiglia di modelli possono essere visualizzati con:
python detect_sd14.py --help
python detect_sd15.py --help
python detect_sdxl.py --help
python detect_sd3.py --help
Dopo aver generato i file CSV MSE, configura i file di input in ana.sh ed esegui:
bash ana.sh
Il rilevatore supporta sia la regola decisionale naive sia quella dynamic-k. Le metriche e i grafici vengono generati da ana.py.
Il runner predefinito SD1.4 avvia i cinque metodi configurati sui cinque ID GPU specificati nello script:
cd TNC-Defense/TNC-Detox
bash run_detox_sd14.sh
Per eseguire un singolo metodo:
python detox_sd14.py \
--method pixel \
--device cuda:0 \
--seed 42
Configura METHOD e GPU_ID in run_detox_sdxl.sh, quindi esegui:
bash run_detox_sdxl.sh
I valori predefiniti specifici del metodo, inclusi i passi di addestramento, i rapporti di campionamento dei timestep, i pesi delle loss, le dimensioni dei batch e gli intervalli di checkpoint, sono definiti nella sezione METHOD_PROFILES di ciascuno script di addestramento. Gli argomenti da riga di comando possono sovrascrivere questi valori predefiniti.
Genera immagini da una o più UNet SD1.4 bonificate:
python evaluate_sd14.py \
--detox-model checkpoints/sd14/<checkpoint> \
--prompt-file <prompt-file>
Calcola la FID tra le directory delle immagini di riferimento e quelle delle immagini bonificate:
python compute_fid.py \
--reference-dir <reference-images> \
--candidate-dir <detoxified-images>
42 per impostazione predefinita e abilita un comportamento deterministico di cuDNN.I modelli con backdoor e le configurazioni di attacco utilizzati da questo progetto provengono dalle seguenti risorse pubbliche:
Quando utilizzi questi attacchi o checkpoint, cita i corrispondenti lavori originali: BadT2I (badt2izhai2023), EvilEdit (evileditwang2024), VillanDiffusion (villandiffusionchou2023) e PersonalBKD (personalizationhuang2024).
Se trovi utile questo progetto per la tua ricerca, ti preghiamo di citare:
@article{wang2026backdoor,
title={Backdoor sentinel: Detecting and detoxifying backdoors in diffusion models via temporal noise consistency},
author={Wang, Bingzheng and Gu, Xiaoyan and Xu, Hongbo and Li, Hongcheng and Yu, Zimo and Zhou, Jiang and Wang, Weiping},
journal={arXiv preprint arXiv:2602.01765},
year={2026}
}
Questo progetto è stato realizzato facendo ampio riferimento all'eccellente codebase NaviT2I. Ringraziamo sinceramente gli autori di NaviT2I per aver rilasciato la loro implementazione e le risorse di supporto.
Ringraziamo inoltre gli autori di BadT2I, EvilEdit, VillanDiffusion, PersonalBKD, Hugging Face Diffusers e dei relativi modelli di diffusione preaddestrati per aver reso pubblicamente disponibili i loro codici e checkpoint. Tutti i componenti di terze parti rimangono soggetti alle rispettive licenze e condizioni d'uso.