Как стать автором
Обновить

Я обучил нейросеть на своих рисунках и отдаю модель бесплатно (и научу вас делать это)

Время на прочтение2 мин
Количество просмотров24K
Всего голосов 38: ↑34 и ↓4+30
Комментарии31

Комментарии 31

занудство
1. большинство моделей если не OpenAI и внутренних разработок бесплатны, а HF все бесплатны
2. colab не 1 час, а 8-9 часов GPU дает, CPU и того больше

Вы правы. Все зависит от нагрузки.

Конкретно в случае обучение модели гугла хватает примерно на час (я не заходил дальше, но такие были отзывы у других пользователей).
Что касается бесплатности, тут такой прикол: публикуемые сейчас модели основаны на чужих работах, их делали без спроса у авторов. Художники, в лучшем случае, интересуются нейросетями, но в общем — боятся. Копирайт, копирование работ, вся эта чушь. А я обучил на своих работах и не боюсь опубликовать как есть. Этим мне бы хотелось немного изменить отношение к нейросетям художников и иллюстраторов.

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

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

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

Я в этих ваших нейросетях человек новый, поясните по-дружески: вот есть у меня модель. Дальше что с ней можно делать и как использовать? Вы написали, что она может картинки создавать, а можно этим процессом как-то управлять или она сама просто рандомно всякую дичь создаёт? Хорошо бы немного приоткрыть тему.

Эта статья написана для тех, кто уже немного знает о SD и пользуется одним форков.
Дальше идем, например, сюда https://github.com/invoke-ai/InvokeAI, устанавливаем интерфейс и сам движок, кидаем модель в папку, добавляем модель в список, пользуемся :-)
Есть прекрасные руководства с примерами здесь https://github.com/invoke-ai/InvokeAI#features
Есть релиз с описанием новых функций и видео с демонстрацией здесь https://habr.com/en/post/697424/ (думаю, его будет достаточно, чтобы понять, как управлять процессом)

Спасибо, теперь намного понятнее. Ушёл читать и пробовать!

Как вы? Удалось запустить или нужна помощь?

Руки ещё не дошли, но я обязательно запущу. Кстати у меня NVidia 1040 с 2 Gb RAM. Там действительно стоит детектор и блокирует мне запуск нейросети если мало RAM или всё будет работать, но очень медленно?

Гарантирована работа на 4гб. Многие используют 1060, но я не знаю про 1040. 2гб — совсем-совсем мало. Есть форк для маков mapple diffusion и даже адаптация для айфонов — там память урезана еще больше (но да, оно работает даже на Xs!). Теоретически, на маках, например, при недостатке памяти используется своп и жесткий диск. Но я не знаю, сделано ли что-то подобное для винды.

Непонятно как свои фото подгрузить? ЖАмкаю слева на files, перетаскиваю свои картинки и... ничего не происходит

NameError                                 Traceback (most recent call last)
<ipython-input-4-8e085b36c15c> in <module>
      9 import shutil
     10 
---> 11 for c in concepts_list:
     12     print(f"Uploading instance images for `{c['instance_prompt']}`")
     13     uploaded = files.upload()

NameError: name 'concepts_list' is not defined

Перетягивание должно работать. Пожалуйста, создайте тему в дискорде или гитхабе, чтобы другие разработчики увидели и ответили (укажите свое железо) https://github.com/invoke-ai/InvokeAI/issues https://discord.com/channels/1020123559063990373/1020839635150188655

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

А, вы про обучение. ПРостите, перепутал ветки. Возможно, этот скрипт сломался. Но попробйте другой браузер — в сафари у меня не работала загрузка, в хроме работала.

загрузка работает. Делаю в хроме. Я саму логик происходящего не улавливаю.

Печально, еще пару недель назад им пользовался. Если вы уверены, что все сделали правильно до этого шага, это значит, что скрипт сломался, обновили его неудачно, видимо. Я не имею отношения к самому колабу, поэтому помочь не могу. Но когда сделаем свой через Invoke, обновлю статью.

Но сейчас их несколько от разных разработчиков, какой-то другой может работать.

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

"Далее указываем, как будем вызывать свой стиль или объект"
- а как указывать-то? Там портянка кода. Куда и что вписывать?

вот в этом коде непонимаю куда что вписывать

# You can also add multiple concepts here. Try tweaking `--max_train_steps` accordingly.

concepts_list = [

    {

        "instance_prompt":      "photo of zwx dog",

        "class_prompt":         "photo of a dog",

        "instance_data_dir":    "/content/data/zwx",

        "class_data_dir":       "/content/data/dog"

    },

#     {

#         "instance_prompt":      "photo of ukj person",

#         "class_prompt":         "photo of a person",

#         "instance_data_dir":    "/content/data/ukj",

#         "class_data_dir":       "/content/data/person"

#     }

]

# `class_data_dir` contains regularization images

import json

import os

for c in concepts_list:

    os.makedirs(c["instance_data_dir"], exist_ok=True)

with open("concepts_list.json", "w") as f:

    json.dump(concepts_list, f, indent=4)

Вас интересует только первая часть. Первая строка — ключ, которым вы вызываете стиль или объект. То, что вы будете вписывать в поле для генерации, чтобы получить что-то связанное с вашими исходниками.
Вторая строка — класс, как бы категори изображений. Если это фотографии, лучше написать photo. Но это не так важно.

изменил. Теперь трабла на следующем блоке кода((

Сожалею. Вероятно, скрипт сломался. Этот колаб был сделан на основе форка Automatic1111, на него в последнее время много жалоб. Я не имею отношения к самому колабу, ни к форку, поэтому помочь не могу. Но когда сделаем свой через Invoke, обновлю статью.

эх... спасибо. Будем ждать.

Здравствуйте. Спасибо за статью.

Можно пару вопросов?

Т.е. получается нужно конвертировать fp в ckpt? Т.е. автоматом он не может создать ckpt? А как насчет safetensors?

И еще вопрос. Как создать свою модель для полного тела человека? Отдельно части тела помещать в картинки 512*512? Отдельно лицо, руки, пальцы и т.д.? Возникает вопрос. Если поместить человека целиком в 512*512, детализация маленькая очень получается. Те же пальцы рук уже плохо различимы. Неговоря уже о текстуре кожи и т.д. Спасибо.

Спасибо за интересные вопросы!
Я не уверен, что этот гайд актуален сам по себе, некоторое время этот вариант не работал. Сейчас есть более интересные решения от runpod.io и, кажется, rundiffusion.
fp — это не совсем формат файла, скорее способ хранения информации и ее кодирования. Чем меньше, тем меньше файл, но хуже качество, но зато работает быстрее. В целом, между fp16 бит и fp32 бита разницы почти нет.

Конвертация в ckpt и обратно — не очень нужна в данный момент (если что, в последней версии InvokeAI есть конвертер туда и обратно). Просто ckpt был неким форматом по умолчанию, пока HF не сделали API diffusers со своим вариантом хранения. В теории (да и на практике уже) это гораздо лучше, чем ckpt.

Разрешение для обучения может быть любым. Например, для SD1.5 стандарт — 512px, но есть модели, обученные на 768x768. Сейчас я рекомендую обучать новые модели с помощью SD2.1 — и разрешение на входе выше, и детализация латентного пространства увеличилась, больше деталей сохраняется. Просто помните, что увеличение размера сделает обучение более медленным и привяжет вас к этому разрешению (делать картинки, отличные от установленного размера, можно, но результат будет менее предсказуемым, особенно, с меньшими размерами).

К сожалению, большей детализвции по умолчанию и совсем без ручной доработки вы вряд ли добьетесь, но, если обучить на изображениях типа 768x1024 и потом обработать генерации еще раз (img2img или hi-res fix), можно получить более точные результаты.

Спасибо за разъяснения. Буду пробовать. Пока что сижу на 1.5. Вроде говорили что SD 2.1 задушили "немного" цензурой.

задушили 2.0, когда отфильтровали по ошибке слишком много похожего на эротику. В 2.1 контент вернули. Но там используется другая ассоциативная модель и да, запросы нужно формировать иначе. Я и сам испытываю проблемы с этой версией, пока проще 1.5.

👍 Да, тож стояла 2.х. Но снес. Не понравилась. Вернулся на 1.5.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории