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 функция. Для получения дополнительной информации о предварительно обученных сетях смотрите Pretrained Deep Neural Networks.

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

    Входное изображение, заданное как числовой массив.

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

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

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

    Если вы задаете label в качестве вектора программа вычисляет значение функции для каждой метки класса независимо. В этом случае scoreMap(:,:,k) и featureImportance(idx,k) соответствуют карте функции важности и важности функции idx для kпервый элемент в 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', 'grid', или двумерная матрица сегментации.

    The 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' - Использовать графический процессор.

    Для опции GPU требуется Parallel Computing Toolbox™. Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (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первый элемент в label.

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

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

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

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

    Подробнее о

    свернуть все

    ИЗВЕСТЬ

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

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

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

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

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

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

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

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

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

    Введенный в R2020b
    Для просмотра документации необходимо авторизоваться на сайте