Le protocole
- Modèle : ResNet18 de torchvision, 1 000 classes, normalisation ImageNet détectée automatiquement.
- Entrées : 10 images de test.
- Suite : tier Enterprise, 10 attaques × 4 intensités (ε = 0,005 ; 0,01 ; 0,03 ; 0,10), soit 40 tests par image et 400 au total.
- Attaques : bruit gaussien, perturbation haute fréquence, patch adversarial, FGSM, manipulation des canaux couleur, PGD, Carlini-Wagner, DeepFool, Square Attack, Auto-PGD.
- Matériel : un GPU Tesla T4 (Google Colab), environ 1 min 50 s pour l'ensemble.
- Version : CLI rednblue 4.0.0b1, barème 1.2.
Les résultats
Sur 400 tests, la prédiction du modèle n'a tenu que 99 fois. Sa stabilité est de 24,8 % (intervalle de confiance à 95 % : 20 à 30 %). Le serveur a recalculé la note de son côté et obtenu exactement le même résultat que le CLI.
La note est FAIL pour une raison précise : l'attaque FGSM a fait changer la prédiction sur toutes les images dès la plus petite intensité testée, ε = 0,005 (stabilité 0 %, seuil 10 %). Une perturbation de cette taille est invisible à l'œil nu.
Aucun certificat n'a été émis, comme prévu pour un FAIL.
Pourquoi c'est normal
Un modèle entraîné de façon classique optimise sa précision sur des images propres, pas sa résistance aux perturbations. La littérature le montre depuis 2014 : sans entraînement adversarial, les classifieurs standards cèdent à de très petites perturbations. Ce FAIL n'est donc pas un défaut de ResNet18 ; c'est la mesure honnête d'un modèle non durci, et la ligne de base à laquelle comparer une version améliorée.
Ce que ce test ne dit pas
- 10 images, c'est un échantillon : l'intervalle de confiance l'indique.
- Le run était sans étiquettes : on mesure si la prédiction change sous attaque, pas si elle est juste.
- Les résultats sont déclarés par la machine qui a exécuté le test et notés par RednBlue ; ils ne sont pas rejoués indépendamment.
Le reproduire
pip install rednblue==4.0.0b1
export RNB_TOKEN=your_token
rnb preview --model resnet18.pth --input images/ --submit