Main Content

Grad-CAM revela cómo se realiza la toma de decisiones en deep learning

En este ejemplo se muestra cómo utilizar la técnica de aplicación de activación de clase ponderada por gradiente (Grad-CAM) para entender por qué una red de deep learning toma unas decisiones de clasificación concretas. Grad-CAM, inventado por Selvaraju y otros autores [1], utiliza el gradiente de la puntuación de clasificación con respecto a las características convolucionales determinadas por la red para entender qué partes de la imagen son más importantes para la clasificación. En este ejemplo se usa la red preentrenada GoogLeNet para las imágenes.

Grad-CAM es una generalización de la técnica de aplicación de la activación de clase (CAM). Para descubrir técnicas de aplicación de la activación en datos de webcam en directo, consulte Investigate Network Predictions Using Class Activation Mapping. Grad-CAM también se puede aplicar a ejemplos sin clasificación, como regresión o segmentación semántica. Para ver un ejemplo que muestra cómo utilizar Grad-CAM para investigar las predicciones de una red de segmentación semántica, consulte Explore Semantic Segmentation Network Using Grad-CAM.

Cargar una red preentrenada

Cargue la red GoogLeNet.

[net,classNames] = imagePretrainedNetwork("googlenet");

Clasificar una imagen

Lea el tamaño de la imagen de GoogLeNet.

inputSize = net.Layers(1).InputSize(1:2);

Cargue sherlock.jpg, una imagen de un golden retriever incluida en este ejemplo.

img = imread("sherlock.jpg");

Cambie el tamaño de la imagen a las dimensiones de entrada de la red.

img = imresize(img,inputSize);

Para la entrada de una sola observación, haga predicciones con la función predict. Para hacer predicciones con la GPU, primero hay que convertir los datos a gpuArray. Para hacer predicciones en una GPU se requiere una licencia de Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox).

if canUseGPU
    X = gpuArray(img);
end

scores = predict(net,single(img));
Y = scores2label(scores,classNames);

imshow(img);
title(Y);

Figure contains an axes object. The axes object with title golden retriever contains an object of type image.

GoogLeNet clasifica la imagen correctamente como un golden retriever. Pero ¿por qué? ¿Qué características de la imagen hacen que la red realice esta clasificación?

Grad-CAM explica por qué

La técnica Grad-CAM usa los gradientes de la puntuación de clasificación con respecto al mapa de características convolucionales finales con el fin de identificar las partes de una imagen de entrada que tienen más impacto en la puntuación de clasificación. Los lugares donde este gradiente es grande son exactamente los lugares en los que la puntuación final depende más de los datos.

La función gradCAM calcula el mapa de importancia tomando la derivada de la salida de la capa de reducción para una clase dada con respecto a un mapa de características convolucionales. Para tareas de clasificación, la función gradCAM selecciona de forma automática las capas adecuadas para calcular el mapa de importancia. También puede especificar las capas con los argumentos nombre-valor 'ReductionLayer' y 'FeatureLayer'.

Calcule el mapa de Grad-CAM.

channel = find(Y == categorical(classNames));
map = gradCAM(net,img,channel);

Muestre el mapa de Grad-CAM encima de la imagen empleando un valor 'AlphaData' de 0.5. El mapa de color 'jet' tiene el azul intenso como el valor más bajo y el rojo intenso como el más alto.

imshow(img);
hold on;
imagesc(map,'AlphaData',0.5);
colormap jet
hold off;
title("Grad-CAM");

Figure contains an axes object. The axes object with title Grad-CAM contains 2 objects of type image.

Está claro que la parte superior de la cara y la oreja del perro son las partes que tienen el mayor impacto en la clasificación.

Para descubrir un método diferente para investigar las razones de las clasificaciones de redes profundas, consulte occlusionSensitivity y imageLIME.

Referencias

[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh y D. Batra. "Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization." En IEEE International Conference on Computer Vision (ICCV), 2017, pp. 618–626. Disponible en la sección Grad-CAM del sitio web Computer Vision Foundation Open Access.

Consulte también

| | |

Temas relacionados