exponenta event banner

imageLIME

Объяснение сетевых прогнозов с использованием LIME

    Описание

    пример

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

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

    Для выполнения этой функции требуются Toolbox™ статистики и машинного обучения.

    пример

    [scoreMap,featureMap,featureImportance] = imageLIME(net,X,label) также возвращает карту элементов, используемых для вычисления результатов LIME, и вычисленную важность каждого элемента.

    пример

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

    Примеры

    свернуть все

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

    Импортируйте предварительно обученную сеть 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 
    
    

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

    scoreMap = imageLIME(net,X,label);

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

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

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

    Использовать imageLIME определить наиболее важные элементы изображения и изолировать их от неважных элементов.

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

    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. Уровень вывода должен быть classificationLayer.

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

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

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

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

    При указании 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 элементов, выполняет вычисление на GPU и увеличивает выборку результирующей карты до того же размера, что и входное изображение, используя бикубическую интерполяцию.

    Целевое количество элементов для разделения входного изображения на, указанное как разделенная запятыми пара, состоящая из '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'или двумерная матрица сегментации.

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

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

    • 'grid' - Входное изображение делится на регулярную сетку признаков. Элементы приблизительно квадратные, исходя из соотношения сторон входного изображения и заданного значения 'NumFeatures'. Число ячеек сетки может быть меньше указанного значения 'NumFeatures'. Если входное изображение является квадратным, укажите 'NumFeatures' в виде квадратного числа.

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

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

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

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

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

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

    • 'linear' - подгонка линейной модели с регрессией лассо с использованием fitrlinear (Статистика и инструментарий машинного обучения) затем вычисляют важность каждого элемента с использованием весов линейной модели.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Параметр GPU требует Toolbox™ параллельных вычислений. Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). При выборе 'ExecutionEnvironment','gpu' option и 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. Если метки предоставляются как вектор категориальных значений, векторов символов или строковых скаляров, то featureImportance(idx,k) соответствует важности признака idx для label(k).

    Подробнее

    свернуть все

    ИЗВЕСТЬ

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

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

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

    • Сегментируйте изображение на элементы.

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

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

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

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

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

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