Методы объяснения моделей — практичный инструмент для понимания модели, оценки её точности и стабильности. Однако, часто можно столкнуться с ситуацией, когда фреймворк, в котором метод реализован, просто не "дружит" с реализацией модели. В этом туториале хочу подробно показать CAM (class activation map) для объяснения моделей зрения.
Почему CAM?
Class Activation Maps (CAM) — базовый инструмент для визуализации того, какие области изображения наиболее важны для модели при принятии решения. Он позволяет понять:
Какие признаки извлекает модель на разных слоях свертки;
Какие зоны изображения вносят вклад в прогноз конкретного класса;
Кроме того, с практической точки зрения:
Его почти всегда можно реализовать руками (если у вас есть задача классификации и сверточный слой);
Его можно использовать практически в любой задаче классификации с использованием сверточных нейронных сетей.
В процессе туториала я буду использовать YOLO NAS S из библиотеки super-gradients, фреймворк PyTorch и набор данных, включающий изображения с различными животными (коровами, овечками и другими).
В общем, прошу к чтению!
А зовут меня Сабрина. Сейчас я заканчиваю бакалавриат, пишу дипломную работу по интерпретируемости и намеренна идти дальше. Саму область explainable AI я исследую уже 3 года, и просто безумно её люблю. Рада видеть вас среди читателей!
План туториала:
Подготовка данных и загрузка модели YOLO NAS S.
Извлечение карт активации классов (CAM).
Анализ работы модели: что извлекает
backbone, что делаетhead.Выводы и анализ результатов.
1. Модель, данные и фреймворк
Используем предобученную YOLO NAS S, реализованную в библиотеке super-gradients. Как пишут разработчики — бибилотека предоставляет готовые к использованию state-of-the-art (SOTA) модели, а также инструменты для обучения и развертывания моделей. Преимущества библиотеки (если кратко) описаны такие:
Поддержка различных задач компьютерного зрения: классификация, детекция объектов, сегментация и другие.
Готовые модели: доступны предобученные модели, включая YOLO-NAS и YOLO-NAS-POSE.
Загрузка простая. Процесс инференса — тоже.
from super_gradients.training import models
from super_gradients.common.object_names import Models
model = models.get(Models.YOLO_NAS_S, pretrained_weights="coco")
model.eval();Данные выложены на GitHub. Вы можете скачать их по ссылке (архив) или следовать туториалу в ноутбуке.
2. CAM: извлечение и теория
Class Activation Maps (CAM) — это базовый метод в explainable AI, который позволяет визуализировать, какие области изображения наиболее важны для модели при принятии решения. Построение таких карт активаций основано на идее сверточных нейронных сетей — если мы начнем разворачивать CNN, то обнаружим, что полносвязный слой, отвечающий за классификацию, содержит столько наборов весов, сколько классов прогнозирует модель — например, для модели, обученной на Imagenet, мы будем иметь 1000 наборов.
Из этого факта и строится идея карты активации класса — значения карт признаков, получаемых на предпоследнем сверточном слое, домножаются на веса определенного класса. А именно построение CAM проводится по формуле:
где:
