Как правильно настроить нейросеть

0
21

Stable Diffusion — как установить и как пользоваться нейросетью

Обновление весовых коэффициентов

Один нейрон может превратить в одну точку входной вектор, но по условию мы желаем получить несколько точек, т. к. выходное Y способно иметь произвольную размерность, которая определяется лишь ситуацией (один выход для XOR, десять выходов, чтобы определить принадлежность к одному из десяти классов, и так далее). Каким же образом получить n точек? На деле все просто: для получения n выходных значений, надо задействовать не один нейрон, а n. В результате для каждого элемента выходного Y будет использовано n разных взвешенных сумм от X. В итоге мы придем к следующему соотношению:

В начало описания добавили RAW photo— считается, что с таким ключевым словом нейросеть делает более фотореалистичные изображения. Вместо photo of the cat (фотография кота) поставили close-up portrait of the cat (крупный портрет кота). Обратите внимание на скобки вокруг close-up: с их помощью мы даём понять нейросети, что данный параметр для нас очень важен и на него стоит обратить больше внимания. Чем больше скобок, тем больше «вес» этого параметра в промте. Без скобок Stable Diffusion рисовала недостаточно крупных котиков, а вот с тремя скобками котики стали гораздо ближе к камере.

Неплохая работа с глубиной резкости и боке, реалистичные котики почти без проблем с глазами. Но интерьер и атмосфера получились не такими выразительными, как в Deliberate. В целом, рекомендуем к установке и использованию / Иллюстрация: Алиса Смирнова, Фотосклад.Эксперт

У Stable Diffusion из-за открытого кода моделей гораздо больше: есть модели для имитации разных художественных стилей, для реализма, для аниме и для создания архитектурных эскизов. Мы будем использовать одну из самых популярных универсальных моделей Deliberate 2.0, её можно скачать здесь.

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

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

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

Лучше обучение. Искусственные нейронные сети обучаются примерно по тому же принципу, что живые существа. Когда человек часто повторяет одни и те же действия, он учится: ездить на велосипеде, рисовать или набирать текст. Это происходит, потому что веса между нейронами в мозгу меняются: нервные клетки наращивают новые связи, по-новому начинают воспринимать сигналы и правильнее их передают. Нейронная сеть тоже изменяет веса при обучении — чем оно объемнее, тем сильнее она «запомнит» какую-то закономерность.

Увеличиваем сгенерированное изображение в Stable Diffusion

Человеческий мозг состоит из ста миллиардов клеток, которые называются нейронами. Они соединены между собой синапсами. Если через синапсы к нейрону придет достаточное количество нервных импульсов, этот нейрон сработает и передаст нервный импульс дальше. Этот процесс лежит в основе нашего мышления. Мы можем смоделировать это явление, создав нейронную сеть с помощью компьютера. Нам не нужно воссоздавать все сложные биологические процессы, которые происходят в человеческом мозге на молекулярном уровне, нам достаточно знать, что происходит на более высоких уровнях. Для этого мы используем математический инструмент — матрицы, которые представляют собой таблицы чисел. Чтобы сделать все как можно проще, мы смоделируем только один нейрон, к которому поступает входная информация из трех источников и есть только один выход. 3 входных и 1 выходной сигнал Наша задача — научить нейронную сеть решать задачу, которая изображена в ниже. Первые четыре примера будут нашим тренировочным набором. Получилось ли у вас увидеть закономерность? Что должно быть на месте вопросительного знака — 0 или 1?

Наши котики имеют размер 1024х768 пикс, что не так много. Для инстаграма хватит, а вот на большом мониторе особо не порассматриваешь, да и для печати маловато. Поэтому попробуем увеличить размер изображения. Делается с помощью тех же кнопок справа вверху (наводим мышь на картинку, чтобы кнопки появились).

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

Но ее легко получить путем увеличения количества нейронов. Давайте попробуем реализовать обучение с тремя нейронами в скрытом слое и одним выходным (выход ведь у нас только один). Чтобы все получилось, создадим массив X и Y, имеющий обучающие данные и саму нейронную сеть:

ЧИТАТЬ ТАКЖЕ:  Искусственный интеллект что учить

Теперь нужно выбрать и скачать модель. У нейросетей для генерации картинок существуют разные модели, натренированные для создания изображений в разных стилях. Например, у Midjourney есть стандартная модель Midjourney v4, более свежая Midjourney v5, создающая более фотореалистичные изображения, и модель niji•journey, генерирующая картинки в стиле аниме и манга.

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

Давайте поймем почему формула имеет такой вид. Сначала нам нужно учесть то, что мы хотим скорректировать вес пропорционально размеру ошибки. Далее ошибка умножается на значение, поданное на вход нейрона, что, в нашем случае, 0 или 1. Если на вход был подан 0, то вес не корректируется. И в конце выражение умножается на градиент сигмоиды. Разберемся в последнем шаге по порядку:

В процессе генерации попадались котики, у которых на месте глаз жёлтые круги без зрачков или с плохо проработанными зрачками. Чтобы повысить качество глаз и избавиться от плохих вариантов, в поле Negative prompt добавили пункты bad eyes, ugly eyes, чтобы исключить варианты с плохими уродливыми глазами.

Как будем обучать?

Что касается результата увеличения, то тут он не так впечатляет, как в том же Midjourney. Если Midjourney во время увеличение продолжает дорисовывать изображение, добавляя и изменяя детали, то Stable Diffusion просто физически увеличивает картинку, увеличивая резкость и сохраняя плавность линий. В целом, результат увеличения в Stable Diffusion очень похож на работу Topaz Gigapixel.

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

Только ленивый не слышал сегодня о существовании и разработке нейронных сетей и такой сфере, как машинное обучение. Для некоторых создание нейросети кажется чем-то очень запутанным, однако на самом деле они создаются не так уж и сложно. Как же их делают? Давайте попробуем самостоятельно создать нейросеть прямого распространения, которую еще называют многослойным перцептроном. В процессе работы будем использовать лишь циклы, массивы и условные операторы. Что означает этот набор данных? Только то, что нам подойдет любой язык программирования, поддерживающий вышеперечисленные возможности. Если же у языка есть библиотеки для векторных и матричных вычислений (вспоминаем NumPy в Python), то реализация с их помощью займет совсем немного времени. Но мы не ищем легких путей и воспользуемся C#, причем полученный код по своей сути будет почти аналогичным и для прочих языков программирования.

Давайте внимательно посмотрим на него. Вышенаписанная формула — это не что иное, как определение умножения матрицы на вектор. И в самом деле, если мы возьмем матрицу W размера n на m и выполним ее умножение на X размерности m, то мы получим другое векторное значение n-размерности, то есть как раз то, что надо.

Говоря проще, ИНС можно назвать неким «черным ящиком», превращающим входные данные в выходные данные. Если же посмотреть на это с точки зрения математики, то речь идет о том, чтобы отобразить пространство входных X-признаков в пространство выходных Y-признаков: X → Y. Таким образом, нам надо найти некую F-функцию, которая сможет выполнить данное преобразование. На первом этапе этой информации достаточно в качестве основы.

Нажимаем и ждём, пока Stable Diffusion увеличит нашу картинку. На компьютерах со слабой видеокартой возможны ошибки. На нашем подопытном с GTX 960 4 Гб увеличение работает через раз. Но тут ничего не поделаешь: либо пробовать раз за разом, либо менять железо.

Существует немало разных сборок Stable Diffusion, отличающихся друг от друга интерфейсом и степенью сложностей, с которыми придётся столкнуться при установке. Самыми удобным для начинающего пользователя можно считать Easy Stable Diffusion. Скачать сборки можно с github.com: вот ссылка на Easy Stable Diffusion.

Чтобы получить красивый более крупный портрет, придётся немного доработать наш запрос и некоторые настройки. Итоговый промт выглядит вот так: «RAW photo, (((close-up))) portrait of the cat, sitting on the table, books on the table, medieval windows behind, lancet windows, old library, table lamps, victorian room, stone walls, chandeliers, many books, HDR, sun rays, god rays, cinematic light, volumetric light, soft light, photorealistic, perfect composition» / RAW фото, (((крупный план))) портрет кота, сидящего на столе, книги на столе, средневековые окна сзади, стрельчатые окна, старая библиотека, настольные лампы, викторианская комната, каменные стены, люстры, много книг , HDR, солнечные лучи, божественные лучи, кинематографический свет, объемный свет, мягкий свет, фотореалистичный, идеальная композиция.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь