Здесь в Кракове выходные прошли не зря. По просьбам читающих, рассказал, как тренировать свои стили в FLUX.1 Dev. Replicate для этого — идеальная платформа, ничего сверхсложного не понадобится.
Задача: как научить нейронную сеть генерировать картинки в моём, каком надо уникальном стиле?
Что вообще значит «научить»? Как вообще получаются картинки в нейронной сети?
То, как я понимаю процесс в целом: начинается всё с шумного изображения, в котором буквально ничего нет, нет ни одной явной, выделяющейся характеристики. Потом в зависимости от текстового запроса (промпта) пикселы перекрашиваются, чтобы больше подходить под «образ», собранный на основе параметров нейронной сети. Язык, исходный запрос — определяют эти параметры. В модели зашито то, как она представляет текст в изображениях. Через пару десятков итераций пикселы приобретают форму и становятся похожи на что-то осознанное.
Файн-тюнин, точная подстройка — это по сути изобретение нового символа, нового слова, создание триггера, чтобы в выдаче появилось что-то похожее на желаемое. Вы буквально добавляете в лексикон нейроннной сети новый образ. Легко визуализировать этот процесс так: вы показываете маленькому ребёнку, который ещё не умеет говорить, мол, это зебра, зеб-ра. И после спрашиваете: нарисуй зебру? Как умеет, ребёнок рисует полосатое нечто, по памяти, как понял. Если без вашего ведома кто-то показывал на улице дорожный переход и тоже называл это зеброй, то есть шанс, что дитя нарисует белые полосы на асфальте, а не африканское животное.
Текущее состояние мира нейронных сетей лишь имитирует работу невероятно сложного человеческого мозга. Компьютеры тратят кучу сил (буквально энергии в виде тепла), чтобы выдать что-то не ужас-ужас какое кошмарное.
Однако, уже сегодня можно использовать мощные сервера в облаке, чтобы научить общедоступные нейросети своим личным словам и образам.
Покажу, как это работает на примере. Например, мне нужен стиль, который по кодовому слову p00h
стилизует изображение под старинные иллюстрации из книг о «Винни-Пухе».
Кодовое слово лучше всего выбирать уникальное:
p00h
,PREINSTA
– хорошие примеры.GLITCH
– плохой пример: это слово скорее всего уже завязано на какие-то стили в существующей модели. Наша цель, сбить её с толку и скормить свои понятия.
Как нейронная сеть учится? Механизмы гибридные и часто очень запутанные. Однако, если совсем просто описывать, то выйдет так, что с одной стороны язык разбирается на понятия, потом из этих понятий собирается картинка. В чём-то похоже на игру в «Категории» наоборот. Задача нейронной сети — угадать, что имел в виду пользователь, показав ему картинку.
Представьте, будто бы взрослый помогает ребёнку рисовать зебру: «Зебра это кто? Зверь, правильно. У неё сколько ног? Три? Не, подумай получше. Четыре! Верно. А хвост есть? Вот, молодец. Получается похоже».
В итоге для того, чтобы обучить нейронку новому слову, нужно дать ей примеры использования этого слова в связном предложении и показать картинку, мол, вот, что из такого предложения получается. Обучающий скрипт сам разберёт тексты, определит место под новый термин в, условно, нейронном мозговом пространстве и соединит это новообразование с картинкой.
Лучше всего отдавать набор изображений и текстовый файл с описаниями, что в них. Каждое описание должно содержать новый термин. Так с большой вероятностью, если вы не запутали нейрокомпьютерного ребёнка и не смешали понятия, он сможет нарисовать именно вашу «зебру» с копытами и хвостом, а не дорожный переход.
Опишу приблизительно, как шёл к успеху с идеей про «Винни-Пуха».
Подготовка изображений
Я написал скрипт, который «смотрит» на страницы PDF, находит там картинки и потом обычными средствами numpy / tesseract / tika вырезает изображения, и собирает их в отдельной папке.
Придумал, что мой стиль, мой новый термин будет называться p00h
— как «Winnie-the-Pooh» с двумя нолями в середине слова для уникальности.
Я поленился, поторопился и не делал ручное описание каждой картинки. Ппонадеялся на автоматическое самоописание — его делает Replicate, ведь есть куча дешёвый нейросетей, способных «увидеть», что в картинки и описать по темплейту. Уверен, что в ручном режиме или с помощью умной сети вроде Claude Sonnet можно было сделать лучше. Это, кстати, буквально то, в чём сейчас скрыт секрет нейронных сетей, работающих, как магия.
Шуточное правило людей, занимающихся тренировкой нейросетей и машинным обучением в целом: говно входит, говно выходит. Плохие данные на входе гарантируют плохие результаты на выходе.
Выбор модели
Replicate предоставляет инструмент для тренировки, там по сути нужно заполнить не очень длинную около-техническую форму.
Выберите существующую модель в качестве назначения или создайте новую, введя название в поле выбора модели. В нашем случае это FLUX.1 Dev и pooh
, чтобы ссылка была красивая.
Загрузка данных
Это простая часть. Просто закиньте ZIP-файл с вашими картинками данными в поле input_images
. Меньше 10 не рекомендуется, больше 1000 не обязательно. Говорят, достаточно 100-300, чтобы потом можно было стиль включать по желанию. Я использовал 551.
Настройка параметров
Установите параметры для обучения. Я начинающий, не разбираюсь — выбрал по-умолчанию. У всех параметров есть свои описания, в них что-то советуют, можно всегда копнуть глубже.
Теперь можно запускать тренировку и смотреть на подробное описание процесса.
Смотрю логи… С первого раза не получилось. Почему? Говно входит, говно выходит: в папке с картинками оказались какие-то слишком мелкие изображения, прочистил свой исходный набор, пришлось тренировать заново. Обращу внимание, что пропорции изображений тоже влияют на точность попадания в стиль. Если вы, например, тренируете людские портреты — отдавайте картинки 2×3 или 3×4, портретный формат.
Очистил исходные данные, запустил заново. На входе 551 картинка в стиле иллюстраций Винни Пуха. Жду приблизительно 20 минут пока replicate считает, смотрю на тонны служебной информации в логах:
Видно, как искусственний интеллект пишет описания. Не идеально, без искры человеческого разума, но как-то пишет. Ещё раз напомню — это именно то место, где можно улучшить качество результатов: аккуратно проверить описания, выверить, чтобы не повторялись объекты, чтобы не было противоречий (Тигра полосатый не назывался котом, например).
Со второго раза получилось. Бежим скорее пробовать!
Я спросил p00h, two cats talking
— вот они, мои милые кошечки, болтают (см. картинку в начале поста).
Я спросил: p00h, a European book illustration of a bear with bottle of lemonade
Я спросил p00h, rabbits playing with bricks in style of p00h
Можно стилизовать существующие картинки, но это отдельная песня. Изображение идёт в довесок к текстовому описанию. Похожесть по-умолчанию ниже, чем из текстов. Потому что сложнее склонить нейронную сеть к своему стилю, слишком много данных, мысли и понятия разбегаются.
В форме создания новых картинок можно подкручивать параметр lora_scale
для усиления эффекта, но от него сетку чаще всего корёжит, будьте осторожны. Например, тигр и медведь играют в шахматы.
Примерно так получилось научить нейронную сеть слову p00h
, которое означает стиль рисунков из книг о Винни Пухе. Стоило это удовольствие меньше $5 долларов. Они ушли на описание исходного набора изображений прежде всего.
Попробовать Pooh-генератор можно здесь: https://replicate.com/sliday/pooh
P.S.: Всякое такое и подобное — пишу в ИИзвестия пока регулярно, пока интересно.