Обнаружение дрейфа в ваших данных очень важно при развертывании моделей в рабочей среде. Это гарантирует, что производительность вашей модели не снизится из-за изменения характера входных данных. Существует множество инструментов для мониторинга ваших данных и обнаружения дрейфа, таких как «Большие ожидания», NannyML и т. д. Однако большинство из них предназначены для табличных данных. В этом посте мы обсудим различные подходы к обнаружению дрейфа изображений с помощью популярных инструментов.

Создание дрейфа с использованием увеличения данных

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

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

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

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

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

transform = A.Compose([
                        A.VerticalFlip(p=1),
                        A.ToGray(p=1),
      		])
transformed_image = transform(image=original_image)["image"]

Несмотря на то, что в Альбументациях есть список трансформаций, вполне вероятно, что не все трансформации, которые вы ищете, присутствуют именно так, как вам хотелось бы. К счастью, довольно просто включить преобразования из разных библиотек (или собственных написанных) в конвейер преобразований, наследуя от класса Albumentations ImageOnlyTransform.

class MyTransformation(ImageOnlyTransform):
    @property
    def targets_as_params(self):
    	return ["image"]
        
    def apply(self, img, **params):
		# Example of a transformation defined by ourselves
    	sobelxy = cv2.Sobel(src=img, ddepth=cv2.CV_64F, dx=1, dy=1, ksize=5) # Combined X and Y Sobel Edge Detection
    	inverted_sobelxy = 255 - sobelxy
    	return inverted_sobelxy
        
    def get_params_dependent_on_targets(self, params):
    	img = params["image"]
    	return {}

Который мы затем можем использовать в нашем конвейере преобразования

my_transform = A.Compose([
                            MyTransformation(),
                            A.VerticalFlip(p=1)
				])

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

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

Искажения:

  • Вертикальный флип
  • Уменьшение масштаба
  • Добавление дождя
  • Гауссовский шум
  • Тиснение

Основанный на цвете:

  • Дрожание цвета
  • Инверсия
  • Оттенки серого
  • Солнечная вспышка
  • Перемешивание цветовых каналов

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

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

От изображений к табличным данным с помощью Resnet

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

Для извлечения признаков из изображений мы использовали предварительно проверенную модель Resnet18, которая была обучена на Imagenet1k. Чтобы это было полезно для нашего варианта использования, мы удалили последний полносвязный слой, содержащий метки классов, и взяли выходные данные слоя Avg Pool в качестве наших функций. Функции 512, полученные из реснета, затем дополнительно сокращаются с помощью PCA. В результате получается окончательный набор табличных данных со 150 функциями для каждого изображения.

NannyML для обнаружения дрейфа данных

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

Во-вторых, данные поезда будут сжаты с использованием PCA-преобразования, а затем немедленно реконструированы с помощью обратного PCA-преобразования.

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

На рисунке ниже вы можете видеть, что существует сдвиг в ошибке реконструкции между изображениями, на которых был обучен реснет, и невидимыми изображениями, хотя эти невидимые изображения очень похожи и не должны определяться как дрейф. Для решения этой задачи обучающая выборка разбита на 2 части. Один для обучения реснета, а другой для определения правильного порога ошибки реконструкции.

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

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

Почему журналы

Вместо использования дорогостоящего Resnet для преобразования изображений в табличные данные также можно использовать Whylogs. Хорошая новость с Whylogs заключается в том, что инструмент поддерживает изображения. Действительно, есть функция, позволяющая создать статистический профиль пакета изображений на основе насыщенности, оттенка, яркости или даже ширины и высоты пикселей.

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

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

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

Даже если расхождение KL не является истинной статистической метрикой спреда, поскольку оно несимметрично и не удовлетворяет неравенству треугольника, его легко рассчитать и оно дает достойные результаты. Что касается пересечения гистограмм, то оно измеряет площадь перекрытия между двумя распределениями вероятностей. Показатель пересечения гистограммы 0,0 означает отсутствие перекрытия, а показатель 1,0 представляет идентичные распределения.

Сравнение производительности

Чтобы проверить эффективность этих методов, мы работали с набором изображений с перекрестка в Токио. Он состоит из 635 изображений и к этим изображениям добавлено 55 выбросов. Выбросы варьируются от небольшого дрейфа изображения до не столь тонкого фотошопа, как показано на картинке ниже.

Чтобы иметь возможность сравнивать различные методы, мы разделили набор данных на обучающий набор из 400 изображений и тестовый набор из 235 изображений, к которым были добавлены 55 выбросов, всего 290 тестовых изображений. точность и полнота этих двух подходов показаны в таблице ниже.

МОДЕЛЬ Precision Recall Resnet + PCA 96% 93% Whylogs 91% 80%

Подход Resnet +PCA способен обнаруживать больше дрейфующих изображений, а также имеет более высокую точность прогнозов, чем подход Whylogs. Давайте углубимся в то, какие изображения обнаруживаются, а какие нет.

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

Необнаруженные изображения для подхода Whylogs

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

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

Необнаруженные изображения из подхода Resnet+PCA

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

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

Несмотря на то, что подход resnet очень хорошо обнаруживает странные формы или объекты, он не обнаруживает эту странную корову. Почему не определяет? Кто знает?

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

Заключение

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

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

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

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