Карты активации классов — это простой метод получения дискриминационных областей изображения, используемых 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.
Ссылки
Визуализация активации класса Grad-CAM (keras.io)