Содержание статьи
HOWTO: как установить и настроить собственный ИИ на игровом ПК
⇡#Внимание: модель!
AUTOMATIC1111 — это и есть название интересующего нас проекта веб-интерфейса для работы со Stable Diffusion. Это именно веб-интерфейс: доступ к нему производится через браузер; по умолчанию только с локального ПК, но при желании можно открыть его и для внешних пользователей — правда, вероятно, придётся повозиться с настройками брандмауэра на своём маршрутизаторе. Это, пожалуй, наиболее популярный на сегодня интерфейс для работы со Stable Diffusion: хотя имеются и другие подобные проекты, широта возможностей контроля над процессом генерации и множество доступных плагинов делают AUTOMATIC1111 отличным инструментом для экспериментирования.
Скорее всего, это вина не чекпойнта Deliberate, а узкотематической LoRA, так что, поиграв с её значимостью (поменяв «:1» внутри треугольных скобок на «:0.7» для начала), можно было бы сгладить негативный эффект. Но мы поступим иначе, задав Clip skip = 2, т. е. заставив систему прерывать формирование структуры инструкций для диффузионной модели за шаг до исходно намеченного финала. Это словно бы несколько собьёт генератор токенов с толку — и во множестве случаев как раз предпоследний, а не финально вылизанный набор инструкций для ИИ-рисования и породит подлинно привлекательную на человеческий взгляд картинку. В качестве самостоятельного упражнения попробуйте и другие варианты Clip skip, вплоть до максимально возможного, — результат вас не на шутку удивит.
Интерфейс установлен, пользователь перед компьютером есть, — самое время загрузить собственно Stable Diffusion, т. е. модель на основе машинного обучения для преобразования текста в графический образ (text-to-image model), написанную на языке Python. К ней впервые предоставил свободный доступ 22 августа 2022 г. сам же её разработчик — компания Stability.ai, специализирующаяся на развитии генеративных ИИ с открытым кодом.
А можно ли генерировать изображения со Stable Diffusion вообще в отсутствие подходящего ПК под рукой? Да, разумеется! Онлайн совершенно бесплатно (а порой, хотя бы в ограниченных пределах, и анонимно, т. е. без требования непременной предварительной регистрации) доступен целый ряд действующих инсталляций: Stable Diffusion Playground, mage.space, Stable Diffusion Online, Dezgo и ещё множество, обнаружить которые через любой поисковик не составит труда (едва ли не единственная отечественная разработка среди них — модель Kandinsky 2.1). Понятно, что на пользователя, в особенности не имеющего возможности заплатить за визуализацию своих текстовых описаний, такие сайты накладывают немало ограничений: это и скудость выбора параметров генерации, и невозможность совершенствовать полученную базовую картинку, и кое-где даже принудительное наложение метки сайта (watermark) на готовое изображение. Кроме того, очереди на бесплатную генерацию на популярных сайтах могут быть довольно длинными. Но если очень-очень надо получить хоть какой-то визуальный образ на основе возникшего в голове сочетания слов, доступные онлайн модели — неплохое начало.
Так вот, на финальном шаге CLIP должна передать диффузионной модели достаточно подробные указания (в виде набора токенов), какая именно картинка должна скрываться в очередном заполненном «белым шумом» прямоугольнике. И чем лучше система натренирована на сравнительно узком наборе изображений — а как раз этим нередко страдают «авторские» чекпойнты, — тем более однотипные картинки она станет выдавать при различных затравках (seed). Что, собственно, хорошо иллюстрирует только что полученная нами галерея практически паспортных фотокарточек квазистимпанковских роботов. Да, каждая из них детально проработана, но именно все разом они явно демонстрируют некую перетренированность используемой диффузионной модели.
В основе Stable Diffusion лежит латентная диффузия: изначально в качестве базы для каждого нового изображения генерируется мешанина разноцветных точек на основе достаточно большого целого числа — «затравочного зерна» (seed), или попросту затравки, на основе которой работает псевдослучайный алгоритм такой генерации и которая в дальнейшем, совместно с текстом подсказки и другими параметрами, определяет конечный вид готового изображения.
⇡#Предварительные замечания
Бесспорно, лучше прочих из сравнительно широко доступных видеокарт для машинного преобразования текста в картинки подойдут новейшие NVIDIA RTX 4080 и 4090, в первую очередь по причине внушительного объёма их VRAM — 16 и 24 Гбайт соответственно. Объём ОЗУ компьютера и производительность его ЦП принципиального значения не имеют, но лучше всё-таки ориентироваться на 8 Гбайт DRAM как минимум и хотя бы на четырёхъядерный процессор — такое «железо» позволит быстрее производить служебные вычисления, необходимые для подготовки к собственно генерации изображений.
Проведя много таких операций обучения — желательно десятки и даже сотни тысяч для каждого текстового термина, — нейросеть с обратным распространением ошибок формирует на входах своих перцептронов такие веса, что позволяют «разархивировать» картинки из шума по ключевым словам, проходя весь путь в обратном порядке. А именно: взяв прямоугольник, заполненный «белым шумом», и известный системе текстовый термин, слой за слоем удалять с картинки случайные пикселы в определённом порядке — и получать запрашиваемое изображение. Почти как ваятель удаляет лишние, на его взгляд, фрагменты мрамора с глыбы, открывая в итоге таившуюся там скульптуру. Аналогия эта вполне адекватна: как из двух идентичных каменных блоков можно изваять совершенно разные статуи, так и две затравочных картинки с «белым шумом», сгенерированным на основе одного и того же seed, в ответ на различные текстовые подсказки породят совершенно несхожие между собой изображения.
Небо и земля! Фигуры роботов стали куда более статичными, но проработка и взаимосогласованность деталей определённо улучшились. В этом сила производных (от базовой модели) чекпойнтов: они позволяют с меньшими усилиями — со стороны конечного пользователя — получать более эстетически привлекательные изображения с теми же подсказками и затравками, чем ванильная Stable Diffusion 1.5.
Интересующихся математическими подробностями отсылаем к оригинальной статье сотрудников OpenAI, впервые предложивших EMA-оптимизацию набора весов для моделей глубокого обучения. Здесь же важно, что для практических пользовательских приложений файлы моделей pruned-emaonly оптимальны по соотношению занимаемого дискового пространства (равно как и требуемого для закачки времени, кстати) и качества получаемого результата. Более того, они, по оценкам энтузиастов, креативнее исходных, с несвёрнутыми наборами весов, — причина этого станет яснее, когда мы дойдём до рассмотрения параметра Clip skip в настройках AUTOMATIC1111. Если браться за дообучение Stable Diffusion (за создание текстовых инверсий, LoRA и за прочее высокоуровневое шаманство, которое в рамках настоящего киберпрактикума мы рассматривать не станем) — тогда решительно необходимой окажется именно полная, pruned-модель.
Ещё одна деталь: квадратные изображения Stable Diffusion 1.5 генерирует лучше всего (в том смысле, что генерация эта порождает минимум артефактов вроде искажённых пропорций человеческих тел или нарушений перспективы), поскольку обучалась на картинках с разрешением 256 × 256 и 512 × 512 пикселов. Однако AUTOMATIC1111 позволяет на страх и риск пользователя менять эти размеры, в том числе получая изображения альбомной или книжной ориентации, а не только квадратные. Базовая модель Stable Diffusion 1.5 не очень уверенно справляется с прямоугольниками (другие чекпойнты делают это лучше, плюс есть ещё целый ряд трюков, но об этом позже), но всё же в размере 512 × 768 пикселов должна выдавать более или менее приемлемый результат. Сдвинем поэтому ползунок «Height» на позицию 768 (или можно просто набрать это число вручную в соответствующем окошке) — и насладимся уже более впечатляющим результатом.
Как сообщает официальная документация, «модуль pickle имплементирует двоичные протоколы для сериализации и десериализации структуры объектов Python», т. е. устанавливает связи между различными объектами. В частности — позволяет при определённых условиях запускать сторонний код, написанный на Python, в том числе содержащий инструкции прямого исполнения — вроде eval или exec. Вот почему в среде энтузиастов машинного обучения в применении к моделям с открытым кодом всё большее распространение получает простейший формат сериализации .safetensors — безопасный, обеспечивающий ускоренную загрузку весов модели в память и более быстрое получение результата на системах с несколькими графическими процессорами.