
Code de recherche pour détecter et détoxifier les portes dérobées dans les modèles de diffusion texte-image, avec des pipelines pour Stable Diffusion v1.4, v1.5, XL et 3 Medium.
TNC-Defense fournit un code de recherche pour détecter et détoxifier les backdoors dans les modèles de diffusion texte-vers-image. Le dépôt comprend actuellement des pipelines de détection pour Stable Diffusion v1.4, Stable Diffusion v1.5, Stable Diffusion XL et Stable Diffusion 3 Medium, ainsi que des pipelines de détoxification pour Stable Diffusion v1.4 et Stable Diffusion XL.
Usage recherche uniquement. Ce code est destiné à l'étude de la robustesse et de la sécurité des modèles de diffusion texte-vers-image. Les utilisateurs sont responsables du respect des licences et des politiques d'utilisation de tous les modèles, jeux de données et implémentations en amont.
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
Le code a été soumis à un test de fumée dans l'environnement Conda TCN avec :
Les utilitaires d'analyse et d'évaluation requièrent en outre des packages tels que NumPy, pandas, SciPy, scikit-learn, Matplotlib, Pillow et tqdm.
Activez l'environnement avant d'exécuter une expérience :
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
Les points d'entrée Bash utilisent le python de l'environnement actif. Un interpréteur différent peut être fourni via la variable d'environnement PYTHON :
PYTHON=python bash TNC-Detect/run_detect_sd14.sh
Tous les chemins du dépôt sont résolus par rapport à l'emplacement de chaque script, de sorte que les commandes ne dépendent pas du répertoire de travail actuel. Les chemins de modèles par défaut suivent la structure locale du projet utilisée pour les expériences. Si les modèles sont stockés ailleurs, remplacez les arguments de ligne de commande correspondants, tels que --base-model-path, --backdoor-model-path, --base-model ou --tox-path.
Les jeux de données de détoxification sont inclus ci-dessous :
TNC-Detox/data/
├── sd14/
│ ├── pixel/
│ ├── pixel_mul_tokens/
│ ├── eviledit/
│ ├── personal_bkd/
│ └── villain_mul/
└── sdxl/
├── pixel/
└── pixel_mul_tokens/
Chaque jeu de données contient clean/, poison/ et metadata.json.
L'exécuteur par défaut évalue toutes les méthodes de backdoor SD1.4 configurées. Il affecte les méthodes aux identifiants GPU définis dans run_detect_sd14.sh et les lance en parallèle.
cd TNC-Defense/TNC-Detect
bash run_detect_sd14.sh
Pour exécuter une méthode directement :
python detect_sd14.py \
--backdoor-method pixel \
--device cuda:0 \
--seed 0 \
--num-inference-steps 50
Les arguments disponibles pour chaque famille de modèles peuvent être consultés avec :
python detect_sd14.py --help
python detect_sd15.py --help
python detect_sdxl.py --help
python detect_sd3.py --help
Après avoir généré les fichiers CSV MSE, configurez les fichiers d'entrée dans ana.sh et exécutez :
bash ana.sh
Le détecteur prend en charge aussi bien les règles de décision naïves que k-dynamiques. Les métriques et les graphiques sont produits par ana.py.
L'exécuteur SD1.4 par défaut lance les cinq méthodes configurées sur les cinq identifiants GPU spécifiés dans le script :
cd TNC-Defense/TNC-Detox
bash run_detox_sd14.sh
Pour exécuter une seule méthode :
python detox_sd14.py \
--method pixel \
--device cuda:0 \
--seed 42
Configurez METHOD et GPU_ID dans run_detox_sdxl.sh, puis exécutez :
bash run_detox_sdxl.sh
Les valeurs par défaut spécifiques aux méthodes, notamment les étapes d'entraînement, les ratios d'échantillonnage des pas de temps, les poids de perte, les tailles de lots et les intervalles de checkpoint, sont définies dans la section METHOD_PROFILES de chaque script d'entraînement. Les arguments de ligne de commande peuvent remplacer ces valeurs par défaut.
Générez des images à partir d'un ou de plusieurs UNets SD1.4 détoxifiés :
python evaluate_sd14.py \
--detox-model checkpoints/sd14/<checkpoint> \
--prompt-file <prompt-file>
Calculez le FID entre le répertoire d'images de référence et celui des images détoxifiées :
python compute_fid.py \
--reference-dir <reference-images> \
--candidate-dir <detoxified-images>
42 par défaut et active le comportement déterministe de cuDNN.Les modèles avec backdoor et les configurations d'attaque utilisés par ce projet proviennent des ressources publiques suivantes :
Veuillez citer les articles originaux correspondants lorsque vous utilisez ces attaques ou checkpoints : BadT2I (badt2izhai2023), EvilEdit (evileditwang2024), VillanDiffusion (villandiffusionchou2023) et PersonalBKD (personalizationhuang2024).
Si vous trouvez ce projet utile pour vos recherches, veuillez citer :
@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}
}
Ce projet s'appuie en grande partie sur l'excellente base de code NaviT2I. Nous remercions sincèrement les auteurs de NaviT2I d'avoir publié leur implémentation et leurs ressources de support.
Nous remercions également les auteurs de BadT2I, EvilEdit, VillanDiffusion, PersonalBKD, Hugging Face Diffusers, ainsi que des modèles de diffusion pré-entraînés associés, pour avoir rendu leurs codes et checkpoints accessibles au public. Tous les composants tiers restent soumis à leurs licences et conditions d'utilisation respectives.