495
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Я протестировал много нейросетей и создал свое приложение для обработки фото

Время чтения 2 минуты
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
495
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

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

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

Я протестировал много нейросетей и создал свое приложение для обработки фото

Тестирование и прототип

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

Vision Transformer (ViT), который обрабатывал изображения, разделяя их на множество мелких сегментов, каждый из которых обрабатывался отдельно.

GAN (Generative Adversarial Network). Если упростить объяснение, то ее основой является использование двух различных конкурирующих сетей, где изображения воссоздаются или обрабатываются путем повторной генерации.

Я пробовал использовать Autoencoder, цель которого — восстанавливать искаженные обработкой изображения для приемлемого результата.

Наиболее качественные результаты давал Stable Diffusion в связке с LoRA (предобученным механизмом). Этот этап был слегка разочаровывающим, потому что, во-первых, всё приходилось изучать с нуля, во-вторых, результат всё равно не был полноценным. Но в итоге это привело меня к верному решению.

Стартовая версия. Самые первые результаты. На выходе можно сделать что угодно благодаря LoRA, но итоговое изображение не имеет ничего общего с оригиналом:

При этом часто возникали проблемы с качеством изображения.

Первая версия. Столкнулись со следующими проблемами: положение головы не совпадало, черты лица сильно отличались. Но уже было от чего отталкиваться.

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

Stable Diffusion и Cntrl Net

После удачного питчинга результатов из Stable Diffusion разработка приложения перешла под бренд компании, поэтому времени и ресурсов на эксперименты стало больше. В конце концов, выбор пал на модель Cntrl Net с использованием различных контролирующих инструментов. Использование Cntrl Net совместно с предобученными фильтрами давало качественные неискаженные результаты, однако оригинальное изображение пользователя становилось плохо узнаваемым. А вместе с тем терялся и вау-эффект. 

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

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

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

Еще один этап 

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

Вкратце последовательность выглядела так: 

  1. Пользователь загружает изображение и выбирает заготовленный фильтр (Киберпанк, Аниме, Супергероика и некоторые другие).
  2. Изображение анализируется, с него считывается маска. Для каждого фильтра применяется свой набор контролируемых параметров. 
  3. Изображение обрабатывается с помощью промпта и LORA, оставаясь в рамках своей маски.
  4. Полученный результат сравнивается с референсными изображениями, соответствующими фильтру. Из пула удачных генераций выбирается наиболее близкое изображение по смыслу. Сравнивается и корректируется в зависимости от еще одного ряда контролирующих параметров. 
  5. Пользователь получает результат с сервера. 

Бета-версия (текущая). Сохраняется ракурс, положение головы, прическа, оригинал читается, детализация высокая при наличии существенных стилистических изменений.

Заключение

На разработку первой публичной версии приложения AI Avatar у меня ушло полтора года. Но первый год заняло обучение и тестирование различных нейросетей и их возможностей. 

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

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники