Создание нейросети в Скетч

0
31

Скетч

Как нейросеть рисует девушек разных национальностей? - изображение номер один
Как нейросеть рисует девушек разных национальностей? — изображение номер один

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

Если у вас ещё не сформировался четкий образ по вашему ТЗ, вы можете дополнительно нагенерировать себе референсов и получить больше идей для создания персонажа.

Лайн (опционально)

Нейросети: что это такое, как работают, 10 бесплатных нейросетей - изображение номер два
Нейросети: что это такое, как работают, 10 бесплатных нейросетей — изображение номер два

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

Рендер персонажа

Нейросеть - изображение номер три
Нейросеть — изображение номер три

Я использовала ControlNet для рендера персонажа, модель Delibarate и свой обученный казуальному стилю embedding (если вы хотите хорошее попадание в определенный стиль или стиль вашего проекта — нужно обучать нейросеть).

Меняла промт, сид, и силу ControlNet, чтобы получить больше интересных вариантов. Понравившиеся увеличиваю в размере с помощью Upscale.

Я использую Stable Diffusion, установленный на компьютер, и не использую сторонние сайты (которые обычно платные после нескольких генераций). Если мы выполняем рабочую задачу, то так мы не загружаем NDA-файлы в сеть и сторонние сервисы — всё происходит локально на нашем компьютере.

Первые два были сгенерированы с помощью казуального обученного embedding’а, вторые внизу — без. Видно, как это влияет на стиль изображения.

Для дальнейшей работы я остановилась на первых двух вариантах в качестве основы.

Для наглядности показываю переход скетча в рендер. Кажется, что работа почти готова, но дьявол кроется в деталях! >:)

Полишинг

Нейросети в - изображение номер четыре
Нейросети в — изображение номер четыре

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

Я правлю все артефакты, совмещаю генерации между собой и накладываю одежду из более реалистичных вариантов в разных режимах наложения.

Текущие глаза мне не нравятся, я возвращаюсь в SD и с помощью Inpaint перерисовываю их:

Часто задаваемые вопросы о создании нейросети в Scratch

Вопрос: Можно ли создать настоящую, самообучающуюся нейросеть в Scratch?
Ответ: Нет, в Scratch можно создать только симуляцию или упрощенную модель, иллюстрирующую принцип работы нейросети (например, перцептрон), но не полноценную самообучающуюся ИИ.

Вопрос: С чего начать создание модели нейросети в Scratch?
Ответ: Начните с планирования: определите, что будет на входе (например, ответы на вопросы, координаты), что нейросеть должна предсказывать на выходе и сколько «нейронов» (спрайтов или переменных) будет в скрытом слое.

Вопрос: Какие блоки Scratch нужны для программирования нейросети?
Ответ: Вам понадобятся блоки переменных (для хранения весов и значений), операторы (для математических вычислений, особенно умножения и сложения), а также блоки управления для организации циклов обучения.

Вопрос: Как реализовать функцию активации в Scratch?
Ответ: Функцию активации (например, ступенчатую или сигмоиду) можно реализовать с помощью блока «если… то» и математических операторов из раздела «Операторы».

Вопрос: Как происходит «обучение» нейросети в таком проекте?
Ответ: Обучение обычно моделируется путем изменения числовых значений переменных («весов») по заданному алгоритму (например, методом обратного распространения ошибки в упрощенном виде), чтобы выходные данные все ближе соответствовали ожидаемым.

Вопрос: Можно ли сделать нейросеть для распознавания изображений в Scratch?
Ответ: Прямое распознавание пикселей изображения крайне сложно из-за ограничений Scratch. Но можно создать упрощенный проект, где нейросеть анализирует не сами изображения, а заранее заданные числовые признаки (например, количество определенных цветов).

Вопрос: Где найти примеры кода или готовые проекты нейросети на Scratch?
Ответ: Ищите на официальном сайте Scratch (scratch.mit.edu) по ключевым словам «neural network», «perceptron», «AI». Многие пользователи выкладывают свои образовательные проекты с открытым кодом.

Вопрос: Почему моя нейросеть в Scratch выдает неправильные или случайные результаты?
Ответ: Проверьте корректность математических формул (суммирование, умножение на веса), инициализацию переменных (веса не должны быть нулевыми) и логику функции активации. Часто ошибка кроется в неправильном порядке операций.

Вопрос: Насколько большие нейросети можно смоделировать в Scratch?
Ответ: Из-за ограничений на количество переменных и быстродействие рекомендуется создавать минимальные модели: например, 2-3 входа, 2-5 нейронов в скрытом слое и 1-2 выхода. Большие сети будут работать очень медленно.

Вопрос: Это сложный проект для новичка в Scratch?
Ответ: Да, это проект продвинутого уровня. Для его успешной реализации необходимо уверенное владение переменными, списками (для хранения весов) и сложными математическими операциями.

Краткий чек-лист: этапы создания модели нейросети в Scratch

  1. Четко определите задачу для вашей нейросети (классификация, предсказание числа).
  2. Спроектируйте архитектуру: количество входных и выходных параметров, количество скрытых слоев и нейронов в них.
  3. Создайте необходимые переменные и списки для хранения входных данных, весов, смещений (bias) и выходных значений.
  4. Напишите скрипт для инициализации весов (например, случайными числами в небольшом диапазоне).
  5. Реализуйте алгоритм прямого распространения: сумма входов, умноженных на веса, плюс смещение, и применение функции активации.
  6. Подготовьте набор данных для обучения (входные значения и правильные ответы к ним).
  7. Реализуйте функцию вычисления ошибки (разницы между полученным и ожидаемым результатом).
  8. Напишите алгоритм обратного распространения ошибки и обновления весов (хотя бы в упрощенной форме).
  9. Создайте цикл, который будет многократно «прогонять» данные обучения через пункты 5-8.
  10. Добавьте визуализацию: отображение изменения весов, ошибки или результатов предсказания.
  11. Протестируйте обученную модель на новых, незнакомых ей данных.
  12. Оптимизируйте код для увеличения скорости работы, если это необходимо.
  13. Добавьте поясняющие комментарии к блокам кода и инструкцию для пользователя.