exponenta event banner

gradCAM

Объяснение сетевых прогнозов с помощью Grad-CAM

    Описание

    пример

    scoreMap = gradCAM(net,X,label) возвращает карту сопоставления активации класса с градиентом (Grad-CAM) изменения показателя классификации изображения X, когда сеть net оценивает балл класса для класса, заданного label. Используйте эту функцию, чтобы объяснить прогнозы сети и проверить, что сеть фокусируется на нужных частях изображения.

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

    Этот синтаксис используется для вычисления карты Grad-CAM для задач классификации изображений или пикселей.

    пример

    scoreMap = gradCAM(net,X,reductionFcn) возвращает карту важности Grad-CAM с помощью функции уменьшения. reductionFcn - это дескриптор функции, который уменьшает выходные активации восстановительного слоя до скалярного значения. Этот скаляр выполняет роль оценки класса для задач классификации и обобщает технику Grad-CAM на задачи неклассификации, такие как регрессия.

    gradCAM функция вычисляет карту Grad-CAM путем дифференцирования уменьшенного выходного сигнала понижающего слоя относительно признаков в характерном слое. gradCAM автоматически выбирает сокращение и слои элементов для использования при вычислении карты. Чтобы задать эти слои, используйте 'ReductionLayer' и 'FeatureLayer' аргументы «имя-значение».

    Этот синтаксис используется для вычисления карты Grad-CAM для задач, не связанных с классификацией.

    [scoreMap,featureLayer,reductionLayer] = gradCAM(___) также возвращает имена слоя элемента и слоя редукции, используемых для вычисления карты Grad-CAM. Этот синтаксис используется с любой комбинацией входных аргументов в предыдущих синтаксисах.

    пример

    ___ = gradCAM(___,Name,Value) указывает параметры, использующие один или несколько аргументов «имя-значение» в дополнение к входным аргументам в предыдущих синтаксисах. Например, 'ReductionLayer','prob' задает для понижающего слоя значение net слой с именем 'prob'.

    Примеры

    свернуть все

    Использовать gradCAM визуализировать, какие части изображения важны для решения о классификации сети.

    Импортируйте предварительно обученную сеть SqueeEcNet.

    net = squeezenet;

    Импортируйте изображение и измените его размер, чтобы он соответствовал входному размеру сети.

    X = imread("laika_grass.jpg");
    inputSize = net.Layers(1).InputSize(1:2);
    X = imresize(X,inputSize);

    Отображение изображения.

    imshow(X)

    Классифицируйте изображение, чтобы получить метку класса.

    label = classify(net,X)
    label = categorical
         toy poodle 
    
    

    Использовать gradCAM чтобы определить, какие части изображения важны для результата классификации.

    scoreMap = gradCAM(net,X,label);

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

    figure
    imshow(X)
    hold on
    imagesc(scoreMap,'AlphaData',0.5)
    colormap jet

    Сеть фокусируется преимущественно на спине собаки, чтобы принять решение о классификации.

    Используйте Grad-CAM для визуализации того, какие части изображения наиболее важны для прогнозирования регрессионной сети изображений.

    Загрузите образец данных, который состоит из синтетических изображений рукописных цифр. Третий выход содержит соответствующие углы поворота цифр, в градусах.

    rng default
    [XTrain,~,YTrain] = digitTrain4DArrayData;
    [XTest,~,YTest] = digitTest4DArrayData;
    
    numTrainImages = numel(YTrain);
    idx = randperm(numTrainImages,20);

    Создайте сеть регрессии изображения, которая может предсказывать поворот изображения.

    layers = [ ...
        imageInputLayer([28 28 1],'Name','input')
        convolution2dLayer(12,25,'Name','conv')
        reluLayer('Name','relu')
        fullyConnectedLayer(1,'Name','fc')
        regressionLayer('Name','output')];

    Укажите параметры обучения.

    options = trainingOptions('sgdm', ...
        'InitialLearnRate',0.001, ...
        'Verbose',false, ...
        'Plots','training-progress');

    Обучение сети.

    net = trainNetwork(XTrain,YTrain,layers,options);

    Оцените производительность сети на тестовом образе.

    testDigit = XTest(:,:,:,idx(4));

    Использовать predict для прогнозирования угла поворота и сравнения прогнозируемого поворота с истинным поворотом.

    predRotation = predict(net,testDigit)
    predRotation = single
        -47.5497
    
    trueRotation = YTest(idx(4))
    trueRotation = -40
    

    Визуализация областей изображения, наиболее важных для прогнозирования сети, с помощью gradCAM. Выберите слой ReLU в качестве слоя элемента, а полностью соединенный слой - в качестве слоя редуцирования.

    featureLayer = 'relu';
    reductionLayer = 'fc';

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

    reductionFcn = @(x)x;

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

    scoreMap = gradCAM(net,testDigit,reductionFcn, ...
        'ReductionLayer',reductionLayer, ...
        'FeatureLayer',featureLayer);

    Отображение карты Grad-CAM поверх тестового изображения.

    ax(1) = subplot(1,2,1);
    imshow(testDigit)
    title("True Rotation = " + trueRotation + '\newline Pred Rotation = ' + round(predRotation,0))
    colormap(ax(1),'gray')
    
    ax(2) = subplot(1,2,2);
    imshow(testDigit)
    hold on
    imagesc(scoreMap)
    colormap(ax(2),'jet')
    title("GradCAM")
    hold off

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

    Входные аргументы

    свернуть все

    Обученная сеть, указанная как SeriesNetwork, DAGNetwork, или dlnetwork объект. Обученную сеть можно получить, импортируя предварительно обученную сеть или обучая собственную сеть с помощью trainNetwork функциональное или индивидуальное обучение. Дополнительные сведения о предварительно обученных сетях см. в разделе Предварительно обученные глубокие нейронные сети.

    net должен содержать один входной уровень и один выходной уровень. Входной уровень net должно быть imageInputLayer или image3dInputLayer.

    Входные данные, указанные как числовой массив или помеченные dlarray объект.

    X должен иметь размер, равный входному размеру сети.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

    Для dlnetwork объекты, необходимо указать label как категориальный или числовой индекс.

    При указании label в качестве вектора программное обеспечение вычисляет значение признака для каждой метки класса независимо. В этом случае scoreMap(:,:,k) соответствует карте для label(k).

    gradCAM функция суммирует пространственные размеры понижающего слоя для класса label. Поэтому можно указать label как классы интересов для задач семантической сегментации и gradCAM возвращает значение Grad-CAM для каждого пикселя.

    Пример: ["cat" "dog"]

    Пример: [1 5]

    Типы данных: char | string | categorical

    Функция редукции, заданная как дескриптор функции. Функция уменьшения уменьшает выходные активации восстановительного слоя до одного значения и должна уменьшить dlarray объект в dlarray скаляр. Этот скаляр выполняет роль label в классификационных задачах и обобщает метод Grad-CAM на неклассификационные задачи, такие как регрессия.

    В Grad-CAM для вычисления градиентов для карты важности используются уменьшенные выходные активации понижающего слоя.

    Пример: @x(x)

    Типы данных: function_handle

    Аргументы пары «имя-значение»

    Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

    Пример: 'FeatureLayer','conv10','ReductionLayer','prob','OutputUpsampling','bicubic','ExecutionEnvironment','gpu' вычисляет карту Grad-CAM относительно слоев 'conv10' и 'prob', выполняет вычисление на GPU и увеличивает выборку результирующей карты до того же размера, что и входное изображение, используя бикубическую интерполяцию.

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

    Значением по умолчанию является конечный слой с несинглтонными пространственными размерами. Используйте analyzeNetwork для проверки сети и выбора правильного уровня.

    Пример: 'FeatureLayer','conv10'

    Типы данных: char | string

    Имя слоя редукции для извлечения выходных активаций при вычислении карты Grad-CAM, заданной как строковый или символьный вектор. Для задач классификации этот уровень является окончательным уровнем softmax. Для других задач этот уровень обычно является предпоследним уровнем для сетей DAG и серий и конечным уровнем для dlnetwork объекты.

    Значением по умолчанию является предпоследний уровень в сетях DAG и серии, а конечный уровень в dlnetwork объекты. Используйте analyzeNetwork для проверки сети и выбора правильного уровня.

    Пример: 'ReductionLayer','prob'

    Типы данных: char | string

    Формат данных, присваивающий метку каждому измерению входных данных, заданному как символьный вектор или строка. Каждый символ в формате должен быть одной из следующих меток:

    • S - Пространственный

    • C - Канал

    • B - Партия

    Дополнительные сведения см. в разделе dlarray.

    Пример: 'Format','SSC'

    Типы данных: char | string

    Метод повышающей дискретизации выходных данных, указанный как разделенная запятыми пара, состоящая из 'OutputUpsampling' и одно из следующих значений:

    • 'bicubic' - Бикубическая интерполяция используется для создания гладкой карты того же размера, что и входные данные.

    • 'nearest' - используйте интерполяцию ближайшего соседа, чтобы расширить карту до того же размера, что и входные данные.

    • 'none' - Не использовать повышающую выборку. Карта может быть меньше входных данных.

    Если 'OutputUpsampling' является 'nearest' или 'bicubic'вычисленную карту увеличивают до размера входных данных, используя imresize для 2-D данных и imresize3(Панель инструментов обработки изображений) для 3-D данных. Для 3-D данных - опция 'bicubic' использование imresize3 с 'cubic' способ.

    Пример: 'OutputUpsampling','bicubic'

    Аппаратный ресурс для вычисления карты, указанный как разделенная запятыми пара, состоящая из 'ExecutionEnvironment' и одно из следующих.

    • 'auto' - Используйте графический процессор, если он доступен. В противном случае используйте ЦП.

    • 'cpu' - Использовать ЦП.

    • 'gpu' - Использовать графический процессор.

    Параметр GPU требует Toolbox™ параллельных вычислений. Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). При выборе 'gpu' option и Parallel Computing Toolbox и подходящий графический процессор недоступны, то программное обеспечение возвращает ошибку.

    Пример: 'ExecutionEnvironment','gpu'

    Выходные аргументы

    свернуть все

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

    • Для задач классификации, scoreMap - градиент конечной оценки классификации для указанного класса по отношению к каждому элементу на слое элементов.

    • Для других типов задач, scoreMap - градиент уменьшенного выходного сигнала восстановительного слоя по отношению к каждому элементу в характерном слое.

    scoreMap(i,j) соответствует важности Grad-CAM в пространственном местоположении (i,j). Если вы предоставите label как вектор категориалов, символьных векторов или строк, то scoreMap(:,:,k) соответствует карте для label(k).

    Имя слоя элемента для извлечения карты элемента при вычислении карты Grad-CAM, возвращаемое в виде строки.

    По умолчанию gradCAM выбирает слой элемента для вычисления карты Grad-CAM. Этот слой является конечным слоем с несинглтонными пространственными размерами. Можно указать, какой слой элемента использовать, используя 'FeatureLayer' аргумент «имя-значение». При указании 'FeatureLayer' аргумент «имя-значение», featureLayer возвращает то же самое значение.

    Имя слоя редукции для извлечения выходных активаций при вычислении карты Grad-CAM, возвращаемое в виде строки.

    По умолчанию gradCAM выбирает понижающий уровень для использования при вычислении карты Grad-CAM. Этот уровень является предпоследним уровнем в сетях DAG и серии и конечным уровнем в dlnetwork объекты. Можно также указать, какой слой сокращения использовать с помощью 'ReductionLayer' аргумент «имя-значение». При указании 'ReductionLayer' аргумент «имя-значение», reductionLayer возвращает то же самое значение.

    Подробнее

    свернуть все

    Град-САМ

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

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

    Предположим, что у вас есть сеть классификации изображений с выходом yc, представляющая оценку для класса c, и вы хотите вычислить карту Grad-CAM для сверточного уровня с k характерными картами (каналами), Aki, j, где i, j индексирует пиксели. Вес важности нейронов составляет

    αkc=1N∑i∑j∂yc∂Ai,jk︸Gradientsviabackprop︷Global среднее объединение,

    где N - общее число пикселей на карте элементов. Затем карта Grad-CAM представляет собой взвешенную комбинацию карт элементов с примененным ReLU:

    M = ReLU (∑kαkcAk).

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

    Хотя Grad-CAM обычно используется для задач классификации изображений, можно вычислить карту Grad-CAM для любой дифференцированной активации. Например, для задач семантической сегментации можно вычислить карту Град-САМ заменой yc на (i, j) ∈Syijc, где S - набор интересующих пикселей и yi, jc - 1, если пиксель (i, j) предсказан как класс c, а 0 в противном случае [2]. Вы можете использоватьgradCAM функция для задач неклассификации путем задания подходящей функции восстановления, которая уменьшает выходные активации восстановительного слоя до одного значения и занимает место yc в весовом уравнении важности нейрона.

    Совет

    • reductionFcn функция получает выходные данные от уровня редукции как отслеживаемые dlarray объект. Функция должна уменьшить этот выход до скаляра dlarray, который gradCAM затем дифференцируется относительно активизаций слоя элемента. Например, для вычисления карты Grad-CAM для канала 208 активации softmax сети функция уменьшения @(x)(x(208)). Эта функция принимает активизации и извлекает 208-й канал.

    • gradCAM функция автоматически выбирает слои сокращения и элементов для использования при вычислении карты Grad-CAM. Для некоторых сетей выбранные слои могут оказаться неподходящими. Например, если сеть имеет несколько слоев, которые можно использовать в качестве уровня элемента, то функция выбирает один из этих слоев, но ее выбор может оказаться не самым подходящим. Для таких сетей укажите, какой уровень элементов использовать с помощью 'FeatureLayer' аргумент «имя-значение».

    Ссылки

    [1] Селвараджу, Рампрасаат Р., Майкл Когсвелл, Абхишек Дас, Рамакришна Ведантам, Деви Парих и Дхрув Батра. «Grad-CAM: Визуальные объяснения от глубоких сетей посредством градиентной локализации». 2017 (октябрь 2017): 618-626, https://doi.org/10.1109/ICCV.2017.74.

    [2] Виноградова, Кира, Александр Дибров и Джин Майерс. «На пути к интерпретируемой семантической сегментации с помощью сопоставления активации классов с градиентом». Материалы Конференции АААИ по искусственному интеллекту 34, № 10 (апрель 2020 года): 13943-13944, https://doi.org/10.1609/aaai.v34i10.7244.

    Представлен в R2021a