Анализ PCA методов увеличения изображения, используемых в современных моделях классификации изображений

Классификация изображений - одна из наиболее изученных и хорошо задокументированных задач машинного обучения. Существует множество тестов и больших общедоступных наборов данных, таких как ImageNet [1], для сравнения новых моделей и алгоритмов с современными (SOTA). Каждый год публикуется несколько новых алгоритмов, и точность SOTA быстро повышается.

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

В этом рассказе мы анализируем методы увеличения изображения, используемые исследователями Google в RandAugment [2], алгоритме 2019 года. Для этого мы будем использовать предварительно обученную модель DenseNet [3], доступную в Tensorflow 2.0 Keras. Чтобы проиллюстрировать результаты модели, мы выполним анализ главных компонентов на последнем скрытом слое модели. Все коды доступны в Google Colab.

Классификация изображений

В Keras классификация изображений представляет собой трехэтапную задачу. 1) загрузить изображение, 2) загрузить предварительно обученную модель, 3) декодировать вывод. Ниже приведен небольшой фрагмент, позволяющий сделать это с использованием предварительно обученной модели Keras DenseNet в TensorFlow 2.0.

Классификация изображений с помощью предварительно обученной модели в Керасе

Если мы загрузим модель с include_top, у классификации будет выходной слой с 1000 классами. decode_predictions собирает наиболее вероятные категории, а также добавляет имена классов.

Для анализа PCA мы будем использовать выходы последнего скрытого слоя модели (до softmax). В DenseNet 121 это означает большое векторное пространство размером 1024 измерения. В Keras мы получим новую модель, используя:

model_last_hidden = tf.keras.models.Model(inputs=model.input, outputs=model.layers[-2].output)

Я использую эту практику, чтобы получить хорошее представление результатов модели без эффекта выравнивания слоя softmax.

Идентификация классов с использованием подпространства PCA

Анализ главных компонентов (PCA)

Как я уже говорил в предыдущих статьях, PCA - это ортогональное преобразование, которое мы будем использовать для уменьшения размерности векторов [4,5]. PCA находит специальные базисные векторы (собственные векторы) для проекции таким образом, чтобы максимизировать дисперсию данных уменьшенной размерности. Использование PCA дает два важных преимущества. С одной стороны, мы можем спроецировать 1024 размерных вектора в двумерное подпространство, где мы можем построить его, чтобы увидеть данные. С другой стороны, он сохраняет максимально возможную дисперсию (проекция теряет информацию). Следовательно, он может сохранять достаточную дисперсию, чтобы мы могли идентифицировать классы на картинке.

Использование PCA с sklearn.decomposition.PCA является однострочным:
pred_pca = PCA(n_components=2).fit_transform(pred)

Кот или слон?

Чтобы определить преобразование из 1024-размерного векторного пространства в 2D-векторное пространство, мы будем использовать восемь изображений, четыре кошки и четыре слона. Позже мы покажем эффект увеличения данных в этой проекции. Изображения взяты из Википедии.

Проиллюстрировав 2D-проекцию, мы видим, что кошки хорошо отделены от слонов.

Увеличение изображения

Увеличение данных - важная часть обучения модели машинного обучения, особенно когда обучающие образы ограничены. Для увеличения изображения определено множество алгоритмов увеличения. Обширный набор методов доступен в imgaug пакете для разработчиков Python.

Для этого анализа мы будем использовать imgaug реализацию методов, используемых в RandAugment [2], расширение, достигающее SOTA в ImageNet в 2019 году с использованием модели EfficientNet, но многие другие алгоритмы также используют те же базовые методы.

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

Недавние работы, такие как Population Based Augmentation [6], направлены на адаптацию величины изменений во времени обучения, в то время как другие, такие как RandAugment [2], используют его в качестве гиперпараметров обучения. Исследование AutoAugment показало, что увеличение величины аугментации во время обучения может улучшить производительность модели.

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

Увеличение расширяет единственную точку изображения слона в пространстве классификации до целой области изображений слона.

Одноразовый подход

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

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

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

Резюме

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

использованная литература

[1] Дэн, Дж., Донг, В., Сочер, Р., Ли, Л. Дж., Ли, К., и Фей-Фей, Л. (2009, июнь). Imagenet: крупномасштабная база данных иерархических изображений. На конференции 2009 IEEE по компьютерному зрению и распознаванию образов (стр. 248–255). Аааааааааааааааааааааааааааа.

[2] Кубук, Э. Д., Зоф, Б., Шленс, Дж., И Ле, К. В. (2020). Randaugment: Практическое автоматическое увеличение данных с уменьшенным пространством поиска. В Proceedings of the IEEE / CVF Conference on Computer Vision and Pattern Recognition Workshops (pp. 702–703).

[3] Хуанг, Г., Лю, З., Ван Дер Маатен, Л., и Вайнбергер, К. К. (2017). Плотно связанные сверточные сети. В Труды конференции IEEE по компьютерному зрению и распознаванию образов (стр. 4700–4708).

[4] Пирсон, К. (1901). LIII. На линиях и плоскостях, наиболее приближенных к системам точек в пространстве . Лондонский, Эдинбургский и Дублинский философский журнал и научный журнал, 2 (11), 559–572.

[5] Хотеллинг, Х. (1933). Анализ комплекса статистических переменных на главные компоненты. Журнал педагогической психологии, 24 (6), 417.

[6] Хо Д., Лян Э., Чен X., Стойка И. и Аббил П. (2019, май). Пополнение на основе популяции: эффективное изучение графиков политики увеличения. В Международной конференции по машинному обучению (стр. 2731–2741).