Git Product home page Git Product logo

cv-aliens's Introduction

Code execution instruction:

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

P.S. ссылка на этот же ноутбук, но в колабе: Open In Colab

Образ Инопланетян 👽👾

Согласно имеющейся (у меня) информации, инопланетяне имеют следующие черты:

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

Предпочтения при выборе отеля 🏨🤷‍♂️🛏️

Исходя из анализа их особенностей, мы можем предположить следующие предпочтения инопланетян при выборе отеля:

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

Эти предположения будут использованы для направления нашей работы по адаптации изображений отелей для инопланетян.

Ниже представлены их фотографии:

Для их получения использовался данный туториал () и этот ноутбук: Open In Colab. В качестве генерации была взята модель stable-diffusion-xl-base-1.0 с 🤗 Hugging Face.

В фото альбоме выше изображён вид пришельцев разного возраста и пола.

Изучение датасета 📊🔍

Тематика и её проблемы.

Useful topic-links: , , ,

Videos:

🤔 Что такое image captioning?

Создание описания к изображениям (image captioning) - это задача компьютерного зрения (CV) и обработки естественного языка (NLP), которая заключается в автоматическом генерировании текстовых описаний изображений.

👨‍💻 Почему над этим работают?

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

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

📝 Как формулируется задача?

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

Обзор датасета 🔍📊👀

  • Что представлено на изображениях?

    В тренировочном датасете представлены фоторафии отелей. На самих изображениях изображены различные комнаты квартир/отелей с различным окружающим интерьером. Важно отметить, что некоторые из фотографий перевернуты (например: эта, эта и эта); также есть фото не относящихся к тематике комнат (например, фотография монетки или медали)

  • Сколько объектов в датасете? Сколько уникальных классов? Сбалансирован ли датасет?

    Объектов в датасете $1124215$. Причем, каких-либо пропусков в таблице нет. Количество уникальных изображений $1055785$. Если смотреть по отелям, то датасет не сбалансирован, так как частотность распределена не равномерно. Аналогично получается и для ресурса с которого брались фотографии.

  • Какие параметры у изображений? Размер фотографий?

    Как и у любого изображения у него есть ширина, высота, цветовая модель, формат. Для нашего датасета фотографии были в формате .png/.jpeg, модель была типа RGB, а средний размер фотографий по выборке из 776 изображений составил (414, 309).

Обогащение датасета описаниями 🏷️➕🖼️

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

Немного не понятно зачем составлять именно тренировочную выборку, только разве что для тюнинга, хотя даже zero-shot предобученная модель судя по статьям дает хороший результат. Ведь у нас нет каких-либо специфичных снимков как, например, снимки со спутников и т.д. У нас только лишь фото интерьера различных комнат. В связи с техническими и временными ограничениями среды разработки (Google Colab) от общего датасета из более чем миллиона картинок возмём выборку из 1000 изображений.

Будем пользоваться официальной имплементацией автора CLIP-Interrogator v.2 ( @pharmapsychotic). Поясню почему именно эта имплементация, а не другуие. Во-первых, предложенная ссылка в самом задании на колаб ( diffusionmagic) не иммеет имплементации CLIP-Interrogator (по крайней мере мне таковой не удалось найти ни в веб интерфейсе при запуске, ни в самом репозитории). Почему я не использовал решение непосредственно из AUTOMATIC1111, так как в веб интерфейсе нет возможности получить промты сразу для батча картинок, тем более, что могут возникнуть проблемы при запуске в бесплатной версии колаба (а они возникли, но об этом дальше).

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

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

Пример получившихся описаний:

Если кластеризовать полученные описания по их эмбеддингам алгоритмом DBSCAN после применения t-SNE (так как многомерная кластеризация довольно сложна и трудозатаратна, ведь размерность пространства эмбеддингов составила 768), то в кластерах будут изображения довольно схожей тематики и стиля, и само описание примерно совпадает с тем, что изображено.

Пример кластеризации DBSCAN'ом дал 41 кластер (при гиперпараметрах $\varepsilon = 3$, min_samples $= 3$):

(интерактивный график см. в ноутбуке)

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

Изменение изображения при помощи диффузионной модели 🖼️🔧🔃✅

Так как эта часть задания творческая, и точность результата сильно зависит от подаваемого на вход модели промта, то доверим эту ответсвенную часть задачи схожей модели, а именно GPT-3.5. Попробуем сначала описать суть задачи, а потом попросить сгенерировать промты для объектов-изображений.

К сожалению, на момент написания этого текста у меня так и не получилось добиться удовлетворительного результата из-за непредвиденных обстоятельств. А именно мне не хватило времени использования предоставляемых вычислительных ресурсов в бесплатной версии Google Colab для изменения всех отобранных картинок. Так как согласно официальному заявлению с недавнего времени колаб перестал поддерживать исполнение stable diffusion webUI для бесплатной подписки (link1, link2). Если же использовать Hugging Face Spaces, то во всех моделях image-to-image, которые я нашел и смог использовать, не было общей настройки гиперпараметров и inpaint режима (а там где и был, то все равно отсутсвовала общая настройка).

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

Было Стало

Как сделать лучше 🚀

  1. Очевидный отевт в виде картинки

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

  1. Не отходя идейно далеко от пункта 0, можно попробовать составить ансамбль диффузионных моделей, что-то наподобие бустинга, когда каждая новая модель постепенно улучшает качество картинки, сгенерированной предыдущей моделью. Оказывается, такая схема называется каскадной диффузией: Cascaded Diffusion Models for High Fidelity Image Generation, Ho et al., 17 Dec 2021

  2. Так как для использования условной генерации (conditional image generation: guided diffusion) нам нужен энкодер текста в эмбеддинги, то вместо CLIP'a, взятого в основной статье от OpenAI, можной попробовать использовать энкодеры других больших языковых моделей (например, использовать такие LLM как, GPT-4, BERT или T5-XXL). Примером такой идеи может служить следующая статья от гугла о диффузионной модели Imagen: Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding, 23 May 2022, где как раз проверялось использование энкодеров от разных LLM (см. раздел 2.1), а также каскадной диффузии в виде двух super-resolution диффузионных моделей (см. раздел 2.4).

  3. Как отдельной идей можно поробовать обучить CLIP на отдельных картинках-предметах (т.е. картинка только с одним предметом без фона), а дальше эту картинку, полученную из текстового запроса с помощью CLIP'a, вставлять на исходную картину, немного её изменив, чтобы она лаконично вписывалась в окружающий её фон (image composition task). Примером может быть недавно выпущенное приложение Vispunk (github)

  4. Также можно просить не пользователя выделять объект на изображении, а заставить это делать модель. Тогда пользователю достаточно будет прописать точный промт, что на что он хочет заменить. Для сегментации объектов на изображении можно использовать недавно выпущенную модель SAM от MetaAI: Segment Anything, Alexander Kirillov, Eric Mintun2, et al., 5 Apr 2023.

  5. Понятно, что можно также файнтюнить уже предобученную модель под собственную доменную область.

  6. Многообразие различных улучшений и изменений, на самом деле достаточно велико, поэтому оставлю лишь ссылку на сборник наиболее релевантных (и недавно выпущенных) статей: Awesome-Diffusion-Models

References:

  1. Diffusion Models | Paper Explanation | Math Explained
  2. How diffusion models work: the math from scratch
  3. What are Diffusion Models?
  4. How Diffusion Models Work
  5. Awesome-Diffusion-Models

cv-aliens's People

Contributors

slava-qw avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.