occlusionSensitivity

Объясните предсказания сети путем окклюзии входов

Описание

пример

scoreMap = occlusionSensitivity(net,X,label) вычисляет карту изменения классификационной оценки для классов, заданных label когда части входных данных X окклюдированы маской. Изменение классификационной оценки происходит относительно исходных данных без окклюзии. Окклюдирующая маска перемещается через входные данные, что дает изменение в классификационной оценке для каждого местоположения маски. Используйте карту окклюзии, чтобы идентифицировать части ваших входных данных, которые больше всего влияют на классификационную оценку. Области на карте с более высокими положительными значениями соответствуют областям входных данных, которые вносят положительный вклад в указанную классификационную метку. Сеть должна содержать softmaxLayer за которым следует classificationLayer.

activationMap = occlusionSensitivity(net,X,layer,channel) вычисляет карту изменения общей активации для заданного слоя и канала, когда части входных данных X окклюдированы маской. Изменение счета активации относительно исходных данных без окклюзии. Области в карте с более высокими положительными значениями соответствуют областям входных данных, которые вносят положительный вклад в указанную активацию канала, полученную путем суммирования по всем пространственным размерностям для этого канала.

___ = occlusionSensitivity(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Для примера, 'Stride',50 устанавливает шаг окклюдирующей маски равным 50 пикселям.

Примеры

свернуть все

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

net = googlenet;

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

X = imread("sherlock.jpg");

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

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

imshow(X)

Figure contains an axes. The axes contains an object of type image.

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

label = classify(net,X)
label = categorical
     golden retriever 

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

scoreMap = occlusionSensitivity(net,X,label);

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

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

Figure contains an axes. The axes contains 2 objects of type image.

На красных частях карты показаны области, которые вносят положительный вклад в указанную метку. Левый глаз и ухо собаки сильно влияют на предсказание сети golden retriever.

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

Входные параметры

свернуть все

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

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

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

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

Метка класса, используемая для вычисления изменения классификационной оценки, заданного как категориальный, символьный массив или строковые массивы.

Если вы задаете label как вектор, программа вычисляет изменение классификационной оценки для каждой метки класса независимо. В этом случае scoreMap(:,:,i) соответствует карте окклюзии для iпервый элемент в label.

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

Слой, используемый для вычисления изменения активации, заданный как вектор символов или строковый скаляр. Задайте layer как имя слоя в net для которого необходимо вычислить изменение активаций.

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

Канал, используемый для вычисления изменения активации, задается как скаляр или вектор индексов канала. Область возможных элементов для выбора для channel зависят от выбранного слоя. Для примера, для сверточных слоев, NumFilters свойство задает количество выхода каналов. Вы можете использовать analyzeNetwork осмотреть сеть и узнать количество выхода каналов для каждого слоя.

Если channel задается как вектор, изменение полной активации для каждого заданного канала вычисляется независимо. В этом случае activationMap(:,:,i) соответствует карте окклюзии для iпервый элемент в channel.

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

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

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

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

Пример: 'MaskSize',75,'OutputUpsampling','nearest' использует окклюдирующую маску с размером 75 пикселей вдоль каждой стороны и использует интерполяцию по ближайшему соседу, чтобы увеличить выход до того же размера, как и входные данные

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

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

  • Вектор вида [h w]- Используйте прямоугольную маску с h высоты и ширина w.

  • Скаляр - используйте квадратную маску с высотой и шириной, равными заданному значению.

Пример: 'MaskSize',[50 60]

Размер шага для прохождения маски через входные данные, заданный как разделенная разделенными запятой парами, состоящая из 'Stride' и одно из следующих.

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

  • Вектор вида [a b]- Используйте вертикальный шаг a и горизонтальный шаг b.

  • Скаляр - Используйте шаг заданного значения как в вертикальном, так и в горизонтальном направлениях.

Пример: 'Stride',30

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

  • 'auto' - Замените закупоренные пиксели средним по каналу входных данных.

  • Скаляр - Заменить окклюдированные пиксели заданным значением.

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

Пример: 'MaskValue',0.5

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

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

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

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

Если 'OutputUpsampling' является 'bicubic' или 'nearest', вычисленная карта повышается до размера входных данных с помощью imresize функция.

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

Обработка ребра окклюдирующей маски, заданная как разделенная разделенными запятой парами, состоящая из 'MaskClipping' и одно из следующих.

  • 'on' - Разместите центр первой маски в левом верхнем углу входных данных. Маски на ребрах данных не являются полноразмерными.

  • 'off' - Разместите верхний левый угол первой маски в верхнем левом углу входных данных. Маски всегда полноразмерные. Если значения MaskSize и Stride опции означают, что некоторые маски проходят мимо контуров данных, эти маски исключены.

Для входных данных без неизображений можно убедиться, что вы всегда окклюдируете одинаковый объем входных данных с помощью опции 'MaskClipping','off'. Для примера, для данных вложений слов, можно убедиться, что одинаковое количество слов окклюдировано в каждой точке.

Пример: 'MaskClipping','off'

Размер мини-пакета для вычисления карты изменения в классификационной оценке, заданный как разделенная разделенными запятой парами, состоящая из 'MiniBatchSize' и положительное целое число.

Мини-пакет является подмножеством набора окклюдированных изображений, когда маска перемещается через вход изображение. Все окклюдированные изображения используются для вычисления карты; мини-пакет определяет количество изображений, которые передаются в сеть сразу. Большие размеры мини-пакетов приводят к более быстрым расчетам счет увеличения памяти.

Пример: 'MiniBatchSize',256

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

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

  • 'cpu' - Использовать центральный процессор.

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

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

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

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

свернуть все

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

Если label задается как вектор, изменение классификационной оценки для каждой метки класса вычисляется независимо. В этом случае scoreMap(:,:,i) соответствует карте окклюзии для iпервый элемент в label.

Карта изменения полной активации, возвращенная как числовая матрица или числовой массив.

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

Если channels задается как вектор, изменение полной активации для каждого заданного канала вычисляется независимо. В этом случае activationMap(:,:,i) соответствует карте окклюзии для iпервый элемент в channel.

Введенный в R2019b