Отборочное задание по Computer Vision на смену по машинному обучению от Тинькофф в Университете "Сириус"
Привет, Земляне! Недавно мы установили контакт с далёкой цивилизацией, и нам надо сделать сервис по аренде отелей. Ваша задача как дата-саентиста - порекламировать отели инопланетянам. К сожалению, у вас есть только фотографии отелей от обычных земных фотографов, и вам надо преобразовать их в понятный для инопланетян вид. При этом земляне тоже должны понимать, что это фото их отеля, а то вдруг будет неловкая ситуация и инопланетянин купит не тот отель, а вы и не поймёте.
Инопланетяне мало что знают о Земле. Про отели они знают перевод буквально базовых слов, и вам надо разметить отели по этим базовым словам-тегам для удобного поиска.
Задание
В этом задании вам предстоит продемонстрировать свои навыки работы с открытыми имплементациями для решения задачи составления описания (наборов тэгов) по изображению и изменения изображения диффузионной моделью.
Задание состоит из четырёх частей:
-
Формирование образа и предпочтений инопланетян
-
Изучение датасета фотографий
-
Обогащение датасета фотографий описаниями (наборами тэгов)
-
Стилизация изображения диффузионной моделью
В результате у вас будет интересный pet-project в портфолио и базовый опыт в области Image Captioning и Image Editing на базе диффузионных моделей. Результат работы предлагаем представить в виде Jupyter ноутбука в GitHub репозитории.
Придумайте образ и предпочтения инопланетян
В качестве начала решения задачи придумайте, как выглядят инопланетяне, что для них может быть важно в выборе отеля и какие изображения они сочли бы красивыми. Опишите эти гипотезы в Readme и опирайтесь в дальнейшей работе на них (1 балл + 1 балл за изображение типичного инопланетянина)
- Для выполнения этой части задания вы можете опереться на возможности AUTOMATIC1111 или StableDiffusionMagic;
- Для начала нужно ознакомиться с темой и ее проблематикой. Необходимо ответить на вопросы (3 балла):
-
Что такое image captioning?
-
Почему над этим работают?
-
Как формулируется задача?
- Далее проведем обзор датасета. Формулируем аннотацию с описанием датасета, состоящее из следующих пунктов (3 балла):
-
Что представлено на изображениях?
-
Сколько объектов в датасете? Сколько уникальных классов? Сбалансирован ли датасет?
-
Какие параметры у изображений? Размер фотографий?
- Добавьте аннотацию и ответы на вопросы в формате небольшой заметки в Readme вашего GitHub репозитория, который вы будете использовать дальше для хранения результатов и представления решения кейса. (2 балла)
Теперь, когда вы приступите к практической части проекта, у вас уже будет начальное теоретическое понимание, что такое image captioning и как с его помощью обогащать датасет изображений, зачем это делают, а также вы познакомитесь с датасетом Hotels-50K на Kaggle.
Задача состоит в добавлении к фотографиям релевантных описаний -- набора тэгов с дополнительной информацией о том, что изображено на фотографии. Для решения задачи предлагается использовать существующие открытые имплементации, например, эту или эту. Использовать свои модели разрешено и приветствуется, но не является обязательным. Вы также можете решить эту часть задачи, используя метод CLIP Interrogator из AUTOMATIC1111
-
Составьте и предобработайте тренировочную выборку датасета. Опишите, какую предобработку вы использовали и почему (1 балл)
-
Обработайте каждую фотографию из выборки, добавьте к ней описание. Проанализируйте полученные результаты (3 балла)
-
Напишите небольшой отчет по этой части в Readme репозитория о проведенных экспериментах. Что получилось? Что нет? Информативные ли получились описания для инопланетян? (1 балл)
-
Попробуйте кластеризовать датасет по тэгам. Сходится ли число классов и число кластеров? Почему? (2 балла)
Это творческая часть задания. Попробуйте изменить стилевую часть изображений при помощи диффузионных моделей. Ваша задача максимально сохранить существующие "сутевые" элементы изображения (планировку, стиль мебели, вид за окном). Например, попробуйте заменить день на ночь на фотографии, добавить лепестки роз или сложенное полотенце в форме лебедя на одеяло и т.д. Или если вы хотите, чтобы инопланетяне точно прилетели в ваш отель, попробуйте преобразовать интерьер в уже знакомые для них формы. Дизайн тогда будет соответствовать тем гипотезам о мире инопланетян, что вы выдвинули в самом начале.
Помните: Мы хотим показать, как номер отеля может выглядеть при различных условиях и запросах клиента, а не приукрашивать фотографии так, чтобы прибывший гость разочаровался при въезде от несоответствия картинки с реальностью.
-
Для выполнения этой части задания вы можете опереться на уже знакомые вам возможности AUTOMATIC1111 или StableDiffusionMagic;
-
Сделайте выборку из 5-10 фотографий из датасета. Постарайтесь отобрать как можно более различные и интересные примеры (1 балл);
-
Сделайте серию правок изображений, стараясь каждый раз менять лишь один конкретный параметр на всей выборке из предыдущего этапа. Например, только время суток или только работу электроприборов (2 балла);
-
Подумайте как можно улучшить изменение не затрагивая остальные элементы изображения. Приведение в отчёте ссылки на решения и статьи по этому направлению приветствуются (2 балла);
-
Напишите небольшой отчет по этой части в Readme репозитория о проведенных экспериментах. Что получилось? Что нет? Введёт ли инопланетян такая картинка? (1 балл);
Ждём от вас ссылки на ваш репозиторий GitHub с заполненным readme с отчётом по решению кейса и Jupyter ноутбуком с экспериментами (или ссылкой на ваш Google Colab).
Правила и подсказки:
-
Нет правильного способа решить задачу. Не стоит беспокоиться, что вы делаете что-то неправильно. Мы хотим увидеть творческий подход и ваши способности к исследованию и прототипированию, а не какое-то конкретное решение задачи.
-
Необязательно выполнять все части и пункты. Задание построено таким образом, что даже если одна часть не получилась, можно двигаться к следующему пункту. Каждый хорошо сделанный пункт принесёт баллы.
-
Вы можете использовать Google Colab или Huggingface Spaces, чтобы получить доступ к бесплатным вычислительным ресурсам.
-
Присылайте решение в виде репозитория на GitHub с отчетом по решению и чёткими инструкциями, как запустить ваш код. Убедитесь, что мы сможем запустить ваше решение по этим инструкциям. Приветствуется оформление кода в виде хорошо оформленного Readme репозитория или в виде ноутбука, а не в виде скрипта.
-
Вы можете использовать любые библиотеки и фреймворки, которые вам могут быть необходимы.
-
Сфокусируйтесь на том, чтобы ваш отчёт и код были чисты и понятны. Если вы считаете, что какая-то его часть может быть непонятна, то добавьте комментарии. Мы очень сильно ценим хорошо написанный код и выводы, поэтому если решение задачи будет оформлено грязно, то мы можем отклонить заявку.