В этом примере показов, как использовать метод отображения активации класса с взвешенным градиентом (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 использует градиенты классификационной оценки относительно окончательной сверточной карты функций, чтобы идентифицировать части входного изображения, которые больше всего влияют на классификационную оценку. Места, где этот градиент велик, - это именно те места, где итоговый счет больше всего зависит от данных.
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.
deepDreamImage
| imageLIME
| occlusionSensitivity