Grad-CAM раскрывает, почему решения по глубокому обучению

В этом примере показов, как использовать метод отображения активации класса с взвешенным градиентом (Grad-CAM), чтобы понять, почему нейронная сеть для глубокого обучения принимает решения о классификации. Grad-CAM, изобретенный Selvaraju и соавторами [1], использует градиент классификационной оценки относительно сверточных функций, определяемой сетью, в порядок понять, какие части изображения наиболее важны для классификации. Этот пример использует предварительно обученную сеть GoogLeNet для изображений.

Grad-CAM является обобщением метода отображения активации классов (CAM). Для методов отображения активации на веб-камеру реального времени данных смотрите Исследование сетевых предсказаний с использованием Отображения активации классов. Grad-CAM может также применяться к неклассификационным примерам, таким как регрессия или семантическая сегментация. Для примера, показывающего, как использовать Grad-CAM для исследования предсказаний семантической сети сегментации, смотрите Исследуйте сеть семантической сегментации с использованием Grad-CAM.

Загрузка предварительно обученной сети

Загрузите сеть GoogLeNet.

net = googlenet;

Классификация изображения

Ознакомьтесь с размером изображения GoogLeNet.

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

Загрузка sherlock.jpg., изображение золотого ретривера, включенное в этот пример.

img = imread("sherlock.jpg");

Измените размер изображения на сетевой вход размерностей.

img = imresize(img,inputSize);

Классифицировать изображение и отобразить его вместе с его классификацией и классификационной оценкой.

[classfn,score] = classify(net,img);
imshow(img);
title(sprintf("%s (%.2f)", classfn, score(classfn)));

GoogLeNet правильно классифицирует изображение как золотой ретривер. Но почему? Какие характеристики изображения заставляют сеть сделать эту классификацию?

Grad-CAM объясняет, почему

Метод Grad-CAM использует градиенты классификационной оценки относительно окончательной сверточной карты функций, чтобы идентифицировать части входного изображения, которые больше всего влияют на классификационную оценку. Места, где этот градиент велик, - это именно те места, где итоговый счет больше всего зависит от данных.

The gradCAM функция вычисляет карту важности путем взятия производной выходного слоя редукции для заданного класса относительно сверточной карты признаков. Для задач классификации, gradCAM функция автоматически выбирает подходящие слои, чтобы вычислить карту важности для. Можно также задать слои с 'ReductionLayer' и 'FeatureLayer' аргументы имя-значение.

Вычислите карту Grad-CAM.

map = gradCAM(net,img,classfn);

Отобразите карту Grad-CAM поверх изображения при помощи 'AlphaData' значение 0,5. The 'jet' палитра имеет глубокий синий как самое низкое значение и глубокий красный как самый высокий.

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

Ясно, что наибольшее влияние на классификацию оказывают верхнее лицо и ухо собаки.

Для другого подхода к исследованию причин классификаций глубоких сетей смотрите occlusionSensitivity и imageLIME.

Ссылки

[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh, and D. Batra. «Grad-CAM: визуальные объяснения из глубоких сетей через локализацию на основе градиентов». В IEEE International Conference on Компьютерное Зрение (ICCV), 2017, pp. 618-626. Доступно в Grad-CAM на веб-сайте Компьютерного зрения Foundation Open Access.

См. также

| |

Похожие темы