/Autoencoders

Implementation of different autoencoders and their practical application

Primary LanguageJupyter Notebook

⚙️ Autoencoders ⚙️

Autoencoder

В этом репозитории показаны примеры имплеминтации и обучения различных видов автоэнкодеров: Vanilla Autoencoder, Variational Autoencoder, Conditional Variational Autoencoder. Также проводится анализ «удачных» и «неудачных» архитектуры автоэнкодеров.

Кроме того, рассматриваются различные способы применения данных моделей: кодировка и декодировка изображений, генерация новых картинок (например, лиц или цифр), генерация новых изображений заранее заданного класса, изменение объектов на изображениях (например, смена пола или эмоции человека на фотографии), избавление от шума на фотографиях (denoising), а также поиск человека по фотографии (Image Retrieval).

Для обучения автоэнкодеров используются функции потерь:

  1. Сумма дивергенции Кульбака-Лейблера и бинарной кросс-энтропии
  2. MSE

Также мы визуализируем расположение точек в латентном пространстве VAE и Conditional VAE. Для этого отображаем их на плоскость с помощью t-SNE.


Содержание репозитория

  • 1_Vanilla_Autoencoder.ipynb — В данном блокноте мы создадим свой Vanilla Autoencoder, обучим его, посмотрим на то, как он способен кодировать и декодировать изображения лиц. На основе этого автоэнкодера мы сгенерируем новые лица, научимся из грустных людей на фотографиях делать весёлых, менять пол человека. А также посмотрим на то, какие архитектуры автоэнкодеров могут быть «хорошими» и «плохими».
  • 2_Variational_Autoencoder.ipynb — В этом блокноте мы имплементируем свой вариационный автоэнкодер, введём функцию потерь для VAE, обучим его, посмотрим на то, как он способен кодировать и декодировать рукописные цифры. На основе этого VAE мы сгенерируем новые цифры. В конце посмотрим, как распределены вектора наших изображений в латентном пространстве VAE, отобразив их на плоскость используя t-SNE.
  • 3_Conditional_VAE.ipynb — В данном блокноте мы имплементируем свой Conditional Variational Autoencoder, обучим его. На основе этого CVAE сгенерируем изображения новых цифр заданных классов из одинаковых шумовых векторов. Посмотрим, как распределены векторы наших изображений в латентном пространстве CVAE отображённого на плоскость с помощью t-SNE. Сравним полученное распределение точек с аналогичным для VAE, которое мы получили в 2_Variational_Autoencoder.ipynb.
  • 4_Denoising.ipynb — В этом блокноте мы, используя автоэнкодер из первого блокнота, решим задачу denoising'а - а именно, «очистим» сильно зашумленные фотографии людей.
  • 5_Image_Retrieval.ipynb — В данном блокноте при помощи автоэнкодера решается задача Image Retrieval. Представим, что у нас есть большая база данных людей. Мы получаем фотографию лица какого-то человека с уличной камеры наблюдения и при помощи автоэнкодера хотим понять, что это за человек.

Основной стек

PyTorch, scikit-learn.

Дополнительные ссылки