imageLIME

Объясните сетевые предсказания с помощью LIME

    Описание

    пример

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

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

    Эта функция требует Statistics and Machine Learning Toolbox™.

    пример

    [scoreMap,featureMap,featureImportance] = imageLIME(net,X,label) также возвращается, карта функций использовалась для расчета результатов LIME и расчетной важности каждой функции.

    пример

    ___ = imageLIME(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Например, 'NumFeatures',100 определяет целевой номер функций к 100.

    Примеры

    свернуть все

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

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

    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 
    
    

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

    scoreMap = imageLIME(net,X,label);

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

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

    Сеть фокусируется преимущественно на голове Лэйки и назад принять решение классификации. Глаз и ухо Лэйки также важны для результата классификации.

    Используйте imageLIME определить самые важные функции в изображении и изолировать их от неважных функций.

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

    net = squeezenet;

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

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

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

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

    Вычислите карту важности функции и также получите карту функций и важности функции. Установите метод сегментации изображений на 'grid', количество функций к 64, и количество синтетических изображений к 3072.

    [scoreMap,featureMap,featureImportance]  = imageLIME(net,X,label,'Segmentation','grid','NumFeatures',64,'NumSamples',3072);

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

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

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

    numTopFeatures = 5;
    [~,idx] = maxk(featureImportance,numTopFeatures);

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

    mask = ismember(featureMap,idx);
    maskedImg = uint8(mask).*X;
    figure
    imshow(maskedImg);

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

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

    net = googlenet;

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

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

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

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

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

    Запустите путем определения матрицы с размером, равным входному размеру изображения.

    segmentationMap = zeros(inputSize(1));

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

    blockSize = 56;
    
    segmentationSubset = ones(blockSize);
    segmentationSubset = tril(segmentationSubset) + segmentationSubset;
    
    % Set the diagonal elements to alternate values 1 and 2.
    segmentationSubset(1:(blockSize+1):end) = repmat([1 2],1,blockSize/2)';

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

    blocksPerSide = inputSize(1)/blockSize;
    subset = 0;
    for i=1:blocksPerSide
        for j=1:blocksPerSide
            xidx = (blockSize*(i-1))+1:(blockSize*i);
            yidx = (blockSize*(j-1))+1:(blockSize*j);
            segmentationMap(xidx,yidx) = segmentationSubset + 2*subset;
            subset = subset + 1;
        end
    end

    Просмотрите карту сегментации. Эта карта делит изображение на 32 треугольных области.

    figure
    imshow(X)
    hold on
    imagesc(segmentationMap,'AlphaData',0.8);
    title('Custom Segmentation Map')
    colormap gray

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

    scoreMap = imageLIME(net,X,label, ...
        'Segmentation',segmentationMap);

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

    figure;
    imshow(X)
    hold on
    title('Image LIME (Golden Retriever)')
    colormap jet;
    imagesc(scoreMap, "AlphaData", 0.5);

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

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

    свернуть все

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

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

    Введите изображение в виде числового массива.

    Изображение должно быть одного размера с входным размером изображений сети net. Входной размер задан InputSize свойство imageInputLayer сети.

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

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

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

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

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

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

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

    Пример: 'NumFeatures',100,'Segmentation','grid', 'OutputUpsampling','bicubic','ExecutionEnvironment','gpu' сегментирует входное изображение на сетку приблизительно 100 функций, выполняет вычисление на графическом процессоре и сверхдискретизировал получившуюся карту к тому же размеру как входное изображение с помощью бикубической интерполяции.

    Целевое количество функций, чтобы разделить входное изображение на в виде разделенной запятой пары, состоящей из 'NumFeatures' и положительное целое число.

    Большее значение 'NumFeatures' делит входное изображение на больше, меньшие функции. Чтобы получить лучшие результаты при использовании большего числа функций, также увеличьте число синтетических изображений с помощью 'NumSamples' пара "имя-значение".

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

    • Когда вы задаете 'Segmentation','superpixels', фактическое количество функций может быть больше или меньше, чем номер, заданный с помощью 'NumFeatures'.

    • Когда вы задаете 'Segmentation','grid', фактическое количество функций может быть меньше номера, заданного с помощью 'NumFeatures'. Если ваше входное изображение является квадратным, задайте 'NumFeatures' как квадратное число.

    • Когда вы задаете 'Segmentation',segmentation, где segmentation двумерная матрица, 'NumFeatures' совпадает с количеством уникальных элементов в матрице.

    Пример: 'NumFeatures',100

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

    Количество синтетических изображений, чтобы сгенерировать в виде разделенной запятой пары, состоящей из 'NumSamples' и положительное целое число.

    Большее число синтетических изображений дает лучшие результаты, но занимает больше времени, чтобы вычислить.

    Пример: 'NumSamples',1024

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

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

    imageLIME функциональные сегменты входное изображение в функции следующими способами в зависимости от метода сегментации.

    • 'superpixels' — Входное изображение разделено на суперпиксельные функции, с помощью superpixels (Image Processing Toolbox) функция. Функции нерегулярно формируются, на основе значения пикселей. Эта опция требует Image Processing Toolbox™.

    • 'grid' — Входное изображение разделено на обычную сетку функций. Функции являются приблизительно квадратными, на основе соотношения сторон входного изображения и заданного значения 'NumFeatures'. Количество ячеек сетки может быть меньшим, чем заданное значение 'NumFeatures'. Если входное изображение является квадратным, задайте 'NumFeatures' как квадратное число.

    • числовая матрица — Входное изображение разделено на пользовательские функции, с помощью числовой матрицы в качестве карты, где целочисленное значение каждого пикселя задает функцию соответствующего пикселя. 'NumFeatures' совпадает с количеством уникальных элементов в матрице. Размер матрицы должен совпадать с размером входного изображения.

    Для данных о фотографическом изображении, 'superpixels' опция обычно дает лучшие результаты. В этом случае функции основаны на содержимом изображения путем сегментации изображения на области подобного пиксельного значения. Для других типов изображений, таких как спектрограммы, более регулярный 'grid' опция или пользовательская карта сегментации могут обеспечить более полезные результаты.

    Пример: 'Segmentation','grid'

    Тип простой модели, чтобы соответствовать в виде заданного как разделенная запятой пара, состоящая из 'Model' и 'tree' или 'linear'.

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

    • 'tree' — Соответствуйте использованию дерева регрессии fitrtree (Statistics and Machine Learning Toolbox) затем вычисляет важность каждого использования функции predictorImportance (Statistics and Machine Learning Toolbox)

    • 'linear' — Подбирайте линейную модель с использованием регрессии лассо fitrlinear (Statistics and Machine Learning Toolbox) затем вычисляет важность каждой функции с помощью весов линейной модели.

    Пример: 'Model','linear'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    свернуть все

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

    Значение scoreMap(i,j) обозначает важность пикселя изображения (i,j) к простой модели, кроме тех случаев, когда вы используете опции 'Segmentation','grid', и 'OutputUpsampling','none'. В этом случае, scoreMap меньше, чем входное изображение и значение scoreMap(i,j) обозначает важность функции в положении (i,j) в сетке функций.

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

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

    Для каждого пикселя (i,j) во входном изображении, idx = featureMap(i,j) целое число, соответствующее индексу функции, содержащей тот пиксель.

    Покажите важность, возвращенную как числовой вектор или числовая матрица.

    Значение featureImportance(idx) расчетная важность функции, заданной idx. Если вы обеспечиваете метки как вектор из категориальных значений, символьные векторы или строковые скаляры, то featureImportance(idx,k) соответствует важности функции idx для label(k).

    Больше о

    свернуть все

    ИЗВЕСТЬ

    Метод локально поддающихся толкованию объяснений модели агностических (LIME) является explainability методом, используемым, чтобы объяснить решения классификации, принятые глубокой нейронной сетью.

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

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

    • Сегментируйте изображение на функции.

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

    • Классифицируйте синтетические изображения с помощью глубокой сети.

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

    • Вычислите важность каждой функции с помощью модели регрессии.

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

    Введенный в R2020b