Saliency Maps
Les cartes de saillance sont des cartes thermiques qui indiquent dans quelle mesure chaque pixel a influencé la prédiction d’un modèle. Découvre les méthodes fondées sur les gradients, CAM et les perturbations, ainsi que leurs limites et leurs usages.
Une carte de saillance est une carte thermique qui indique dans quelle mesure chaque pixel d’une image d’entrée a influencé la sortie d’un réseau de neurones, généralement le score d’une classe prédite. C’est l’un des outils les plus courants de l’IA explicable (XAI) en vision par ordinateur : une carte qui met en évidence l’objet étaye la prédiction, tandis qu’une carte qui souligne un filigrane, l’arrière-plan ou le bord de l’image révèle un raccourci. Une carte de saillance relie la sortie aux pixels de l’entrée, ce qui la distingue des cartes de caractéristiques internes du réseau et des poids d’attention d’un transformeur de vision, qui montrent où une couche recueille des informations. En recherche sur la perception, le terme désigne une idée connexe : une carte des zones d’une scène vers lesquelles le regard humain est attiré, comme dans le modèle d’attention visuelle d’Itti-Koch.
Fonctionnement de la saillance par gradient#
La carte de saillance par gradient de Simonyan, Vedaldi et Zisserman (2013) utilise la rétropropagation pour calculer le gradient du score d’une classe par rapport à l’image d’entrée, plutôt qu’aux poids du modèle. La magnitude du gradient en un pixel indique dans quelle mesure une légère modification à cet endroit déplacerait le score ; la plus grande valeur absolue parmi les trois canaux de couleur fournit une valeur par pixel. Pour un classificateur ImageNet, cela nécessite une passe avant et une passe arrière dans PyTorch :
import urllib.request
from PIL import Image
from torchvision.models import ResNet50_Weights, resnet50
from torchvision.utils import save_image
# Load an ImageNet classifier and track gradients on the input pixels
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))
x = weights.transforms()(image).unsqueeze(0).requires_grad_()
# Backpropagate the top class score to the pixels
scores = model(x)
top = scores.argmax().item()
scores[0, top].backward()
# Saliency: largest absolute gradient across the color channels, scaled for display
saliency = x.grad.abs().amax(dim=1)
save_image((saliency / saliency.quantile(0.99)).clamp(max=1), "saliency.png")
print(f"Explained class: {weights.meta['categories'][top]}")Le code affiche Explained class: minibus et enregistre une carte granuleuse de 224 × 224 correspondant au recadrage central observé par le classificateur : les gradients bruts varient d’un pixel à l’autre, ce que les méthodes ultérieures réduisent en calculant des moyennes ou en travaillant sur des cartes de caractéristiques.
Méthodes de saillance#
- SmoothGrad : la moyenne des cartes de gradient calculées sur de nombreuses copies de l’image auxquelles on ajoute du bruit élimine une grande partie du grain.
- Gradients intégrés : l’accumulation des gradients le long d’un chemin allant d’une référence, comme une image noire, jusqu’à l’entrée fait en sorte que les scores des pixels totalisent la différence entre les scores des deux classes.
- Grad-CAM : la pondération des cartes de caractéristiques de la dernière couche convolutive par leur gradient moyen, suivie d’un suréchantillonnage du résultat, donne des régions grossières mais propres à chaque classe. LayerCAM (2021) pondère séparément chaque position ; les couches antérieures à plus haute résolution fournissent ainsi elles aussi des cartes exploitables.
- Occlusion et autres méthodes de perturbation : masquer des zones de l’image et mesurer la baisse du score ne nécessite aucun gradient, mais demande une passe avant par zone.
Ultralytics YOLO calcule des cartes LayerCAM pour la détection d’objets et d’autres tâches : avec visualize=True en mode prédiction, le modèle pondère chaque position des cartes de caractéristiques transmises à la tête de détection selon son gradient positif par rapport au score de classe de chaque prédiction fiable, puis enregistre une carte thermique combinée par image.
from ultralytics import YOLO
# Enregistrer une carte thermique LayerCAM des indices derrière les détections de YOLO26
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg", visualize=True)Le code écrit bus_cam.jpg dans le répertoire d’enregistrement de l’exécution. Il explique jusqu’aux 16 prédictions brutes les plus fortes de YOLO26 au-dessus du seuil de confiance, avant que NMS ne supprime les doublons ; l’ajout de classes=[0] ne cartographie que les personnes.
Limites des cartes de saillance#
Une carte de saillance montre les zones auxquelles la sortie est sensible, et non la manière dont le modèle raisonne, qui est l’objectif de l’interprétabilité mécaniste. Les tests de validité de 2018 d’Adebayo et de ses collègues ont montré que certaines méthodes populaires, comme la rétropropagation guidée, produisent presque la même carte après la randomisation des poids du modèle ; ces cartes reflètent donc davantage les contours de l’image que le modèle entraîné. De petites perturbations de l’entrée peuvent également modifier fortement les cartes sans changer la prédiction.
Applications concrètes#
- Détection des raccourcis : les cartes thermiques ont révélé qu’un classificateur entraîné sur le jeu de données PASCAL VOC reconnaissait en partie les chevaux grâce à une mention de droit d’auteur présente sur de nombreuses photos de chevaux, un comportement de « Clever Hans » invisible dans sa précision.
- Imagerie médicale : les développeurs de classificateurs de radiographies thoraciques vérifient que les indices se trouvent dans les poumons, et non sur le texte du scanner ou sur des dispositifs médicaux tels que les drains thoraciques, dont il a été démontré que les classificateurs de pneumothorax se servent.
- Recadrage d’images : Twitter recadrait les aperçus d’images autour du point où un modèle de saillance de l’attention humaine prédisait que les utilisateurs regarderaient en premier. Un audit réalisé en 2021 par les chercheurs de l’entreprise a révélé que les recadrages favorisaient systématiquement certains groupes de personnes au détriment d’autres.










