Перейти к основному содержимому

Визуализация и интерпретация

Выделение регионов, отвечающих за класс

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

Для работы метода нужно выбрать изображение xx и интересуемый класс cc, после чего работать с его вероятностью pc(x)p_c(x) или ненормированным рейтингом класса gc(x)g_c(x).

Анализ закрасок

В анализе закрасок (occlusion analysis) [1] на классифицируемом изображении последовательно закрашиваются небольшие квадратные участки, после чего визуализируется карта предсказанной вероятности интересуемого класса. Каждой позиции (i,j)(i,j) на этой карте соответствует вероятность pc(xij)p_c(x_{-ij}), где xijx_{-ij} - изображение, на котором затёрта часть серым квадратом с центром в позиции (i,j)(i,j). Примеры таких карт для верного класса, указанного внизу соответствующих изображений, показаны ниже [1]:

Градиент по изображению

Также в [2] предлагается способ локализации регионов, отвечающих за тот или иной класс. Для этого ищется карта градиентов по рейтингу интересующего класса gc(x)g_c(x) по входному изображению:

W=gc(x)x.W=\frac{\partial g_c(x)}{\partial x}.

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

Далее карта градиентов преобразуется в карту выраженности (saliency map) SRH×WS\in\mathbb{R}^{H\times W}, где HH и WW - высота и ширина рассматриваемого изображения.

В случае чёрно-белого изображения размера H×WH\times W выраженность считается как модуль градиента

Sij=Wij,S_{ij}=|W_{ij}|,

а в случае цветного - как максимальный градиент вдоль цветовых каналов R,G,B:

Sij=maxk{R,G,B}WkijS_{ij}=\max_{k\in\{R,G,B\}} |W_{kij}|

Ниже приведены примеры карт выраженности для нескольких изображений относительно предсказанного для них класса [2]:

Как видим, предсказанный класс локализован верно, хоть и с сильным шумом. В последующих работах были предложены различные улучшения (Guided Backpropagation [4] и Deconvolution [1]), позволяющие получить выделение класса менее шумным.

Градиент по слою

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

Пусть gc(x)g_c(x) - рейтинг интересуемого класса (перед SoftMax), а AijkA^k_{ij} - значение карты активаций kk-го канала последнего свёрточного слоя сети в позиции (i,j)(i,j). Сама карта представляет собой матрицу AkRh×wA^k\in\mathbb{R}^{h\times w}.

Вначале вычисляются важности каждой карты глобальным усредняющим пулингом:

αkc=1hwi=1hj=1wgc(x)Aijk\alpha^c_k=\frac{1}{hw}\sum_{i=1}^h \sum_{j=1}^w \frac{\partial g_c(x)}{\partial A^k_{ij}}

Тогда карта выраженности для класса cc считается по правилу:

S=ReLU(kαkcAk)S=\text{ReLU}\left( \sum_k \alpha^c_k A^k \right)

Нелинейность ReLU применяется, чтобы выделить только области положительно влияющие на класс (что, в частности реализуется, и когда активации сильно отрицательные, но и градиент по ним отрицательный). Полученная карта важности будет иметь размер последнего свёрточного слоя h×wh\times w, поэтому её нужно увеличить до размера изображения H×WH\times W перед тем, как наложить на фотографию.

Характерные изображения класса

Рассмотрим свёрточную нейросеть для классификации изображений. Такая нейросеть выдаёт CC рейтингов классов g1(x),...gC(x)g_1(x),...g_C(x), которые впоследствии проходят через SoftMax преобразование, чтобы вычислить вероятности классов. В работе [1] предложен способ визуализации того, как нейросеть представляет тот или иной класс. Допустим, нас интересует класс cc. Для определения того, как нейросеть его видит, решается следующая оптимизационная задача:

x^c=argmaxx{gc(x)λx22},\hat{x}_c = \arg\max_x \{ g_c(x)-\lambda \|x\|^2_2\},

т.е. находится такое характерное изображение x^c\hat{x}_c, которое бы максимизировало рейтинг соответствующего класса. Чтобы избежать бесконтрольного изменения интенсивностей пикселей, изображение дополнительно регуляризуется по L2 норме.

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

Примеры изображений, визуализирующих различные классы датасета ILSVRC-2013 на модели AlexNet [2]:

Другие подходы к визуализации

Для интерпретации отдельных свёрточных фильтров можно перебирать на изображениях различные фрагменты изображения, от которых зависит соответствующая свёртка (receptive field) и визуализировать те фрагменты, которые приводят к максимальной активации выбранной свёртки. Примеры такой визуализации отдельных свёрток на всё более глубоких слоях свёрточной сети приведены ниже [1]:

Как видим, более глубокие слои захватывают всё более обширную область изображения и выделяют более сложные признаки.

Непосредственная визуализация свёрток первого слоя

Обратим внимание, что на первом слое можно было визуализировать свёрточные фильтры и непосредственно, отображая ядра свёртки, которые имеют размер 3×K×K3\times K\times K, т.е. могут интерпретироваться как изображения. Они максимально активироваться когда обрабатываемые фрагменты будут наиболее похожими на их ядра. Последующие свёртки не допускают непосредственной визуализации, поскольку будут обрабатывать уже больше 3х слоёв.

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

Для этого фиксируется слой, на котором располагается интересующий фильтр. Далее по этому и предшествующим слоям обучается декодировщик (deconv net [1]), восстанавливающий исходные изображения по внутреннему представлению изображений на зафиксированном слое.

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

Литература

  1. Zeiler M. D., Fergus R. Visualizing and understanding convolutional networks //Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part I 13. – Springer International Publishing, 2014. – С. 818-833.

  2. Simonyan K. Deep inside convolutional networks: Visualising image classification models and saliency maps //arXiv preprint arXiv:1312.6034. – 2013.

  3. Selvaraju R. R. et al. Grad-cam: Visual explanations from deep networks via gradient-based localization //Proceedings of the IEEE international conference on computer vision. – 2017. – С. 618-626.

  4. Springenberg J. T. et al. Striving for simplicity: The all convolutional net //arXiv preprint arXiv:1412.6806. – 2014.