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

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

В этой конкретной работе мы стремимся исследовать реализацию Grad-CAM в наборе данных Office31.

О наборе данных

Набор данных Office31 содержит 31 категорию объектов в трех доменах: Amazon, DSLR и Webcam. 31 категория в наборе данных состоит из объектов, обычно встречающихся в офисных условиях, таких как клавиатуры, картотеки и ноутбуки. Домен Amazon содержит в среднем 90 изображений на класс и всего 2817 изображений. Домен DSLR содержит 498 изображений высокого разрешения с низким уровнем шума. В каждой категории по 5 объектов. Для веб-камеры 795 изображений с низким разрешением демонстрируют значительный шум и цвет, а также артефакты баланса белого.

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

office31.7z - Google Drive

Использование Keras для реализации Grad-CAM

В частности, мы использовали библиотеку Keras для приведенной выше реализации. Для этого можно даже использовать Pytorch или Tensorflow. Приведенный ниже код реализован, в частности, с использованием Keras.

Импорт необходимых библиотек

Начнем с импорта необходимых библиотек и пакетов.

Выбор конкретной папки для внедрения Grad-CAM

Теперь мы выберем конкретную папку из одного из классов набора данных Office31, чтобы применить к ней Grad-CAM.

Мы поместили код в блок try exclude для обработки любых неожиданных трассировок.

Определение модели

Теперь мы определяем нашу модель с помощью Keras. Вы можете изменить их на другую модель в соответствии с вашими требованиями. Чтобы получить значения для last_conv_layer_name, используйте model.summary(), чтобы увидеть имена всех слоев в модели.

Преобразование изображений в массив

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

Создание тепловых карт и объединение их с изображениями

Затем мы приступаем к созданию тепловых карт и объединению их с соответствующими изображениями. Во-первых, мы создаем модель, которая сопоставляет входное изображение с активациями
последнего конверсионного слоя, а также с выходными прогнозами. Затем мы вычисляем градиент верхнего предсказанного класса для нашего входного изображения по отношению к активациям последнего свёрнутого слоя. Мы также умножаем каждый канал в массиве карт характеристик на «насколько важен этот канал» по отношению к верхнему прогнозируемому классу, а затем суммируем все каналы, чтобы получить активацию класса тепловой карты. Для визуализации мы также нормализуем тепловую карту между 0 и 1.

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

Окончательный результат

Наконец, давайте создадим модель и вызовем вышеуказанные функции, чтобы увидеть Grad-CAM в действии в выбранной папке.

Обратите внимание, что метод model_builder() использует Imagenet в качестве весов.

Заключение

Блокнот, содержащий весь приведенный выше код, приведен здесь: https://drive.google.com/file/d/1avRmC26Gpzw1TkC_ygTYhzyNsG484kxx/view?usp=drivesdk

Мы успешно внедрили Grad-CAM в набор данных Office31. Техника использования Grad-CAM имеет свои преимущества, так как помогает определить те области изображений, которые являются релевантными, тем самым отбрасывая ненужную информацию. Часто метод требует изменения структуры модели, а затем ее переобучения. Вышеупомянутая работа обобщает grad-CAM, чтобы можно было применять ее к существующим моделям.

Хотя предполагается, что Grad-CAM может объяснить, какие области изображения модель использовала для предсказания, оказывается, Grad-CAM не гарантирует этого! Короче говоря, из-за шага усреднения градиента тепловые карты Grad-CAM не отражают расчеты модели и, таким образом, часто могут выделять нерелевантные области, которые не использовались для прогнозирования. Для преодоления этой проблемы следует использовать HiResCAM вместо Grad-CAM.

Ссылки

Карты активации классов в Keras для визуализации того, на что обращают внимание сети глубокого обучения (jacobgil.github.io)

Визуализация активации класса Grad-CAM (keras.io)

Набор данных Office-31 | Документы с кодом

Град-САМ. Визуальные пояснения от Deep Networks | Рэйчел Драэлос, доктор медицинских наук | На пути к науке о данных