Изучение сжатия изображений с помощью анализа главных компонентов, кластеризации k-средних и сетей GAN

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

Итак, приступим!

Что такое сжатие изображений?

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

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

Зачем нужны методы сжатия изображений?

Ниже перечислены некоторые из потенциальных применений сжатия изображений:

  1. При сжатии данные занимают меньше места. В результате это позволяет хранить больше данных с меньшим объемом дискового пространства. Это особенно полезно в здравоохранении, где медицинские изображения необходимо архивировать, а объем наборов данных огромен.
  2. Некоторые методы сжатия изображений, включающие извлечение наиболее полезных компонентов изображения (PCA), которые можно использовать для обобщения или извлечения функций и анализа данных.
  3. Федеральное правительство или органы безопасности должны вести учет людей заранее определенным, стандартным и единообразным образом. Таким образом, изображения из всех источников должны быть сжаты, чтобы иметь одну одинаковую форму, размер и разрешение.

Типы сжатия изображений

Типы сжатия изображений можно разделить на категории по их способности воссоздавать исходное изображение из его сжатой формы.

Сжатие с потерями

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

Сжатие без потерь

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

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

Сжатие изображений с использованием анализа главных компонентов

Анализ главных компонентов (PCA) - это метод извлечения признаков, поэтому он объединяет наши входные переменные определенным образом, и в этот момент мы можем отбросить наименее важные переменные, сохраняя при этом наиболее ценные части всех. переменных. PCA приводит к разработке новых, независимых друг от друга функций.

Ниже кратко перечислены этапы PCA:

  1. Масштабируйте данные путем вычитания среднего и деления на стандартное. отклонение.
  2. Вычислите матрицу ковариации.
  3. Вычислить собственные векторы и соответствующие собственные значения.
  4. Отсортируйте собственные векторы, уменьшая собственные значения, и выберите k собственных векторов с наибольшими собственными значениями, которые станут главными компонентами .
  5. Получите новые оси путем переориентации точек данных в соответствии с основными компонентами.

Чтобы узнать больше о PCA, обратитесь к этой статье.

Сжатие изображений с использованием PCA

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

Таким образом, мы можем сохранить большую часть деталей изображения, применяя PCA. Мы можем определить количество основных компонентов, необходимых для сохранения дисперсии на определенный процент, скажем, 95% или 98%, а затем применить PCA для преобразования пространства данных.

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

Это очень компактно, поскольку изображение размером n * m пикселей (скажем, 28 * 28 = 784) может быть сохранено очень небольшим количеством основных компонентов (всего около 20–30).

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

Источник для начала:



Сжатие изображений с использованием кластеризации k-средних

Кластеризация с использованием K-средних - это основанная на прототипах методика секционированной кластеризации, которая пытается найти заданное пользователем количество кластеров (k), которые представлены их центроидами.

Ниже кратко перечислены этапы кластеризации k-средних:

  1. Сначала мы выбираем k начальных центроидов, где k - параметр, определяемый пользователем; а именно желаемое количество кластеров.
  2. Затем каждой точке назначается ближайший центроид, и каждый набор точек, назначенных центроиду, называется кластером.
  3. Затем центроид каждого кластера обновляется на основе точек, назначенных кластеру.
  4. Мы повторяем шаги присваивания и обновления до тех пор, пока ни одна точка не изменит кластеры, или аналогично, пока центроиды не останутся прежними.

Чтобы узнать больше о кластеризации k-средних, обратитесь к этой статье.

Сжатие изображений с использованием кластеризации k-средних

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

Мы заранее определяем значение k как количество цветовых компонентов, которые мы хотим сохранить в изображении. Остальная часть алгоритма k-средних выполняется в соответствии с вышеупомянутыми шагами.

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

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

Примечание. Для получения лучших результатов рекомендуется сохранять значение k как кратное (предпочтительнее, степень) 2, как и в обычных форматах изображений.

Источник для начала:



Сжатие изображений с использованием GAN

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

В обучении GAN есть 3 основных шага:

  1. Использование генератора для создания поддельных входных данных на основе случайного шума или, в нашем случае, случайного нормального шума.
  2. Обучение дискриминатора как с реальными, так и с фальшивыми входами (либо одновременно путем объединения реальных и фальшивых входов, либо один за другим, последний предпочтительнее).
  3. Обучите модель целиком: модель построена с дискриминатором, совмещенным с генератором.

Чтобы узнать больше о GAN, обратитесь к этой статье.

Условные GAN (CGAN)

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

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

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

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

Мы начинаем с предположения, что дана s (дополнительная информация) и что мы хотим использовать GAN для моделирования условного распределения Px | s. В этом случае и генератор G (z, s), и дискриминатор D (z, s) имеют доступ к дополнительной информации s, что приводит к расхождению

Сжатие изображений с использованием GAN

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

С помощью кодировщика E и квантованного значения q мы кодируем изображение i, чтобы получить сжатое представление изображения как w = q (E (i)). Затем декодер / генератор G пытается сгенерировать изображение i = G (z), которое согласуется с распределением изображений Px, а также в определенной степени напоминает исходное изображение.

Источник для начала:

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

Заключение

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

Этот пост содержит ссылки на мои предыдущие посты о PCA, k-means clustering и GANs. Я также рекомендую прочитать их, чтобы лучше понять их приложения.

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

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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.