Однажды я взялся делать новую сборку Stable Diffusion Web UI Neuro, всё шло хорошо, я сделал сборку и проверил на работоспособность, xformer хоть и не даёт бонуса к производительности с моей GTX 1070, но значительно снижает расход памяти, при генерации изображения в разрешении 2048x1536 задействовано всего ~4 ГБ видеопамяти:
Само собой у меня не запущено других приложений занимающих видеопамять, так что на сам SD WebUI с активным xformers пришлось около ~3.9 ГБ видеопамяти, и это весьма неплохой выигрыш от xformers, даже если закрыть глаза на тот факт, что в самом конце при завершении генерации были заняты все 8 ГБ видеопамяти.
Моя GTX 1070 даже осилила генерацию в размере 2048x2048, и видеопамяти при этом было занято чуть больше 4 ГБ, пока не настал завершающий этап генерации с применением VAE, с одной стороны вроде и генерировал в разрешении 2048x2048, и памяти было занято мало, но в самом конце всё обломалось:
Хотя если так подумать, то и в разрешении 512x512 занято около 4 ГБ видеопамяти с активным xformers, а ещё в процессе проверок я обнаружил модель которую на удивление не скачал ранее, не зря лишний раз перепроверил основной функционал на зависимости...
В общем на первый взгляд всё прекрасно, сборка работает:
Но почему тогда появилась эта статья?
Всё просто, я обратил внимание на "этичные" закладки в коде "stable-diffusion-stability-ai"...
В старых версиях Stable Diffusion Web UI была настройка позволяющая отключить добавление невидимых водяных знаков в изображение, причем отключение водяных знаков называют неэтичным поведением, что довольно странно если учесть тот факт, что водяные знаки и так не работали:
Так или иначе, раньше была возможность отключить "этичные" водяные знаки, но в текущей версии Stable Diffusion Web UI просто удалили данную настройку, а функции наложения водяных знаков так и остались в коде никак не контролируемые:
То есть разработчики внедрили в код "закладку" которая на каждое сгенерированное или обработанное изображение накладывает водяной знак с какой-то информацией, при этом не предоставляют возможность отключить и простые в использовании инструменты для чтения тех самых водяных знаков, чтобы пользователь мог проверить, а не записали ли в эти водяные знаки чего "лишнего".
И вот я решил проверить эти самые водяные знаки, работают они или нет, какая информация в них записана если они работают, и по итогу я набрёл на проект "invisible-watermark". Этот проект оказался типичным "попен-сорс" приложением утопающим в болоте зависимостей, казалось бы, качай и используй, весит всего пару мегабайт без учета примеров для использования!
Неужели ещё остались наивные люди которые поверят в адекватность софта с характерными признаками линуксоидности?
В общем решил я запустить "invisible-watermark" и проверить сгенерированное изображение на наличие водяных знаков, ведь это довольно логичный шаг со стороны обычного пользователя, взять программу для работы с водяными знаками и проверить картинку на наличие тех самых невидимых водяных знаков.
Так я запустил Fedora Workstation 37, просто она первая попалась под курсор мыши, где как не в дистрибутиве Linux заниматься мракобесием?
Сначала всё вроде бы шло неплохо, гигабайты зависимостей ради программы на пару мегабайт? Всё прекрасно! Ведь именно так должен распространяться софт по мнению "не фанатов", нужно просто покачать зависимости и всё будет хорошо!
Чем сильнее пользователь зависим от репозиториев и прочей подобной гадости - тем лучше, больше возможностей уничтожить уже существующий софт, и больше возможностей лишить неугодного пользователя всего и разом, просто блокируем по конкретным признакам доступ к репозиториям и дело в шляпе:
Так всё качалось беззаботно, пока не поломалось само собой, типичная ситуация при работе с зависимостями и репозиториями, вроде работает, а потом берёт и ломается самой собой.
Но не волнуйтесь, у фанатиков Linux никогда ничего подобного не происходило, это всё мои руки кривые поломали, и пофиг что ничего не трогал когда оно поломалось в процессе работы с репозиториями, если сломалось - виноват пользователь, но никак не софт из зависимостей и палок:
Но мне же так интересно просмотреть и проверить, что же там в водяных знаках если они есть! Я ведь не программист, чтобы ковырять какие-то коды и смотреть что да как добавлено там и работает!
В итоге я полез в интернет искать информацию о косяке, и да, я далеко не один с подобной проблемой, кто бы сомневался... Так я начал всё заново качать, но вскоре снова всё само поломалось:
А потом снова и снова всё ломалось, и это мне показалось довольно странным, репозитории конечно та ещё гадость ненадёжная, но обрывы соединения слишком участились, да и трафика впустую уже потрачено более 2 ГБ, я уже не говорю про потраченное время...
Если бы я скачивал нормальный софт для Windows, я бы уже давно скачал и забыл, у меня был бы нормальный архив или установочный файл приложения, и у меня абсолютно никаких проблем не было бы, но увы, извращенцы предпочитают насиловать репозитории и зависимости разрабатывая софт, а после заставляют пользователей насиловать репозитории и мозги выкачивая мегатонны зависимостей:
Само собой весь мой интернет канал был забит бесконечным насилованием репозиториев, и даже оказался забит когда я ничего не скачивал из репозиториев, по итогу я не мог нормально пользоваться интернетом с других устройств...
Диспетчер задач в Fedora отвратителен как "гном", вроде диспетчер задач и есть, а пользы нет, ибо не посмотреть какая гадость сосёт трафик из интернета без моего разрешения:
Чтобы исключить вероятность косяков с терминалом, я жёстко перезагрузил виртуальную машину с дистрибутивом, но сетевая активность всё равно продолжалась после загрузки ОС, судя по всему это обновления насасываются... Причём я не нашёл нигде настроек для запрета принудительных обновлений, это ещё хуже, чем в Windows 10/11 по факту:
И чтобы не фантазировали, мол, это у меня руки неправильные что-то там не так делают:
В общем я понял одно, дистрибутив Fedora не просто так называют с буквы "П"...
Ну ничего, дистрибутивов у меня много (22 если быть точным), так что просто запущу другой дистрибутив и попробую заново всё сделать:
В дистрибутиве Trisquel 11 (KDE) уже не видно подозрительной фоновой сетевой активности, значит можно продолжать:
Хотя ладно, что-то я погорячился, когда подумал что в Trisquel дистрибутиве всё заработает как надо...
В итоге я запустил Ubuntu 22.04, но здесь меня ждало тухлое болото кривых зависимостей:
Впрочем, это мне не помешало, правда Snap там что-то выпендривался в уведомлениях, но не суть, я наконец начал качать зависимости несчастной утилиты которая позволит мне проверить невидимый водяной знак в изображении...
Рано или поздно я выкачаю эти противные зависимости из не менее противных репозиториев, я же пользователь и обязан осилить это мракобесие, чтобы проверить картинку на наличие невидимого водяного знака, и убедиться что там нет моих личных данных!
Как это говорят, каждый дистрибутив под свою определённую задачу, неужели нельзя сделать дистрибутив который был бы как Windows XP или 7? Который не утопал бы в зависимостях и адекватно предоставлял пользователям рабочий и удобный базовый функционал? Ах, да, Windows ведь плохая, ни в коем случае нельзя равняться на Windows и брать от неё лучшее! Нужно делать всё по-линуксоидски!
А ещё там Snap что-то опять выпендривался, к сожалению уведомление я случайно закрыл, но судя по всему Snap теперь ворует часть пропускной способности интернет канала, ибо приходит 1 МБ в секунду, а доходит до установщика 0.6 МБ в секунду, куда потерялись 0.4 МБ? Похоже Ubuntu тоже втихаря ворует трафик на обновления без разрешения пользователя:
Точно, я же могу проверить ворует Ubuntu трафик или нет, достаточно просто сравнить объем загруженного общего трафика в виртуальную машину, и сколько дошло до скачиваемой зависимости.
Начальная точка, зависимость загружена на 331 МБ, общего трафика 767 МБ, конечная точка 536 МБ зависимость и 1.2 ГБ общего трафика, итого получилось что за промежуток времени загрузилось 205 МБ для зависимости и 433 МБ общего трафика.
То есть да, Ubuntu нагло своровала фоном 228 МБ трафика, что больше половины от всего трафика вошедшего в систему, а ведь если бы дистрибутив Linux не воровал то зависимость torch-2.0.1 уже давно загрузилась бы у меня... То есть по вине дистрибутива я потерял время просто потому что дистрибутив что-то там качает в фоне без моего разрешения!
После этого линуксоиды ещё имеют наглость что-то там говорить про Windows, какая она там плохая и всё такое... В виртуальную машину влетает ~1 МБ/с, а зависимости загружаются со скоростью ~500 КБ/с, просто половина трафика куда-то мимо утекает без моего разрешения, линуксы топ, что ещё сказать:
Уже 2.7 ГБ трафика влетело в виртуальную машину, а я всё ещё жду пока загрузятся зависимости линуксоидного "invisible-watermark", надеюсь ничего не оборвётся и мне не нужно будет заново всё качать. Интересно, почему обычные пользователи не любят линуксы и часто воротят нос от одного упоминания дистрибутивов, даже не представляю, наверное они просто "вендусятники" глупые...
Спустя некоторое время случилось нечто примечательное, Ubuntu наконец прекратила воровать трафик и значения скоростей примерно сравнялись, даже не знаю сколько трафика было своровано дистрибутивом без моего разрешения, но полагаю что-то в районе ~1.5 ГБ...
Надеюсь у меня хватит места на виртуальном диске под это всё мракобесие сделанное дистрибутивом без моего разрешения, особенно если учесть мегатонны ещё не до конца скачанных зависимостей для линуксоидной программы, которую хочу запустить...
Так, по времени дистрибутива я начал эту возню в 11 часов 10 минут, сейчас по времени дистрибутива уже 12 часов 35 минут, и каков итог? Правильно, у меня закончилось место на виртуальном диске, и это линуксоидное убожество не установилось в полной мере... А теперь ещё один факт, если бы ущербный дистрибутив не начал без моего разрешения что-то там качать, то у меня вероятно всё нормально установилось бы сейчас:
А, ну да, конечно, я ещё и удалить мусор в своих же документах не могу, недостаточно прав! Безопасность!
Наутилус из под sudo всё такой же ущербный, просто сделано всё чтобы пользователь обложил разработчиков жирным слоем матерных слов и ушёл обратно в Windows, здесь же и мнимая безопасность линуксов, пользователь просто вынужден делать всякое используя root права, ибо без root доступа линуксы вообще дно не просветное:
И как после этого всего я могу позитивно говорить про линуксы, линуксоидный софт и репозитории?
Ладно, 3.1 ГБ места свободно, этого ведь хватит, чтобы установить многострадальный "invisible-watermark"?
Аллилуйя! Оно установилось! Сколько геморроя на ровном месте, (U)Linux-way, что ещё сказать...
Да чтоб этих разработчиков дистрибутивов! Я только собрался колдовать команды в терминале с новенькой программой на установку которой потрачено полтора часа времени (не считая времени потраченного на первые две попытки), как дистрибутив начал мне навязывать обновления!
Вообще любая адекватная операционная система обязана спросить пользователя при установке, хочет он получать обновления или вообще отказаться от них навсегда, прямо как это позволяла сделать Windows XP и Windows 7, а не вот это вот мракобесие сначала выкачает, забьёт пользователю интернет канал и место на диске, а потом спрашивает докачивать остатки или нет... Конечно если ничего не поломалось от уже принудительно установленных фоном обновлений без разрешения пользователя:
О да, чтобы отключить автоматическую проверку обновлений нужны были root права. Ох, эта мнимая линуксоидная безопасность. Но что меня действительно бесит, так это тот факт, что мне запрещают полностью отключить обновления, в настройках просто нет варианта "отключить и никогда не спрашивать"! Они будут долбить и долбить уведомлениями пока у пользователя не сдадут нервы! Прямо как поступает Mozilla Firefox, так же запрещающая пользователю отключать обновления просто не давая необходимых настроек для полного отключения:
Вот я пользователь, и я хочу чтобы операционная система работала как часы и не ломалась по вине всяких там обновлений кривых, так почему меня лишают возможности реализовать своё желание полностью отказавшись от обновлений которые могут поломать мне систему? Это ли хвалёная свобода линуксоидная? Сидеть в зависимости от всего что возможно и молиться чтобы разработчики ничего не удалили и не поломали? О правиле "работает - не трогай" слышали вообще эти недалёкие разработчики ставящие пользователя в максимально зависимое положение?
Ладно, возвращаюсь к программе... Я конечно установил "invisible-watermark", но по факту просто зависимости установил, я не могу ввести команду и использовать, мне нужно ещё с репозитория вручную скачать само приложение и к нему обращаться... Извините, но я ведь обычный пользователь и не знаю какие магические заклинания нужно колдовать чтобы всё было "правильно", логики в линуксах нет, чтобы "методом тыка" всё сделать, увы, не доросли ещё даже до Windows XP, если не до Windows 98.
Хм, нужно выдать права на запуск походу, ох уж этот неполноценный GNOME, у которого окошко свойств файла приклеено к родительскому окну проводника, как следствие невозможно сместить окно свойств, чтобы посмотреть на перекрытые окошком имена файлов, вроде и пустяк, а бесит:
У разработчиков дистрибутивов наверное массивная золотая корона с головы упадет если сделают хоть что-нибудь по-человечески...
В итоге я запустил программу, правда что-то пошло не так и всё поломалось непонятным образом, зачем вообще я этим всем занимался? Да пошло оно... Пошло оно к хрену в огород! Ибо я так и не прочитал слово "SDV2" которое по идее должно было быть зашито невидимым водяным знаком в изображение:
Почему я говорю "по идее"? Во-первых, если заглянуть в README файл "stable-diffusion-stability-ai", то можно найти оправдание существованию столь сомнительного функционала как "невидимый водяной знак", только всплывает первая же нестыковка, как невидимый водяной знак поможет пользователям определить что изображение было сгенерировано искусственно?
Вышеописанный опыт доказывает, что обычные пользователи не смогут проверить наличие скрытного водяного знака в изображении, ибо "invisible-watermark" неадекватно сложен в использовании учитывая стадию установки, а других доступных программ я не нашёл которые бы смогли определить водяной знак, фанатиков линукса наверное гордость возьмёт что "аналогов нет", правда если бы всё это ещё было пригодным для нормального использования...
Во-вторых, найденная "закладка" просто не работает в моей сборке, ибо она не работает в составе Stable Diffusion Web UI, эти файлы с "закладками" даже не используются насколько я понял, а значит проблемы особо нет, если конечно вы не решите использовать "stable-diffusion-stability-ai" отдельно:
Можно было вообще сделать проще, изображение с водяным знаком и изображение без водяного знака будут иметь разное содержимое как файлы, так почему бы не применить старый добрый лом? Я просто вырежу функционал водяных знаков и сгенерирую изображение для сравнения, вообще стоило сразу начать с этого, а не заниматься тем мракобесием с линуксами, но как узнать про мракобесие если не сталкиваться с ним...
Главное не забывать делать бэкапы, а то всякое ведь может произойти:
И как же я собрался вырезать функционал наложения водяного знака? Очень просто, нужно почистить функции от лишнего:
Ну и по возможности убрать лишние вызовы функций, возможно этого будет достаточно, не очень то и хочется изучать досконально весь исходный код чтобы тотально вычистить от подозрительного мусора Stable Diffusion:
В итоге у меня просто нет повторяемого результата, наверное это по вине xformers, параметры одни и те же, а результат всегда разный:
А это уже вторая стадия после увеличения до 1024x1024:
Параметры генерации изображения под спойлером:
desert, portrait, 1girl, anime, realistic, volumetric light, blue dress
Negative prompt: cropped, watermark, username, (((duplicate))), (bad legs), one leg, (bad face), (bad eyes), bad hands, bad anatomy, bad feet, missing fingers, fewer digits, worst quality, low quality, normal quality, jpeg artifacts, signature, blurry, out of focus, censorship, wide face, ((fused fingers)), (((too many fingers))), amateur drawing, odd, fat, lowres, text, error, out of frame, (cloned face:1.3), (mutilated:1.3), (deformed:1.3), (gross proportions:1.3), (disfigured:1.3), (mutated hands:1.3), (poorly drawn hands:1.3), extra digit, (extra fingers:1.3), (poorly drawn feet:1.3), long neck, extra limbs, broken limb, asymmetrical eyes, cell shading, watercolor, black and white, monochrome, artist name, grey
Steps: 20, Sampler: DPM2 a, CFG scale: 7, Seed: 2101753172, Size: 512x512, Model hash: 08c8bbb6f1, Model: ChiMix_SF1-NED-AOM3_1, Denoising strength: 0.5, RNG: CPU, Hires upscale: 2, Hires upscaler: R-ESRGAN 2x+
Думаю есть смысл сгенерировать изображение без использования xformers, и вообще без использования видеокарты, прямо процессором сгенерирую чтобы была максимальная повторяемость результата, а чтобы процесс не затянулся слишком надолго я сделаю настройки более простыми:
Параметры генерации изображения под спойлером:
desert, portrait, 1girl, anime, realistic, volumetric light, blue dress
Negative prompt: cropped, watermark, username, (((duplicate))), (bad legs), one leg, (bad face), (bad eyes), bad hands, bad anatomy, bad feet, missing fingers, fewer digits, worst quality, low quality, normal quality, jpeg artifacts, signature, blurry, out of focus, censorship, wide face, ((fused fingers)), (((too many fingers))), amateur drawing, odd, fat, lowres, text, error, out of frame, (cloned face:1.3), (mutilated:1.3), (deformed:1.3), (gross proportions:1.3), (disfigured:1.3), (mutated hands:1.3), (poorly drawn hands:1.3), extra digit, (extra fingers:1.3), (poorly drawn feet:1.3), long neck, extra limbs, broken limb, asymmetrical eyes, cell shading, watercolor, black and white, monochrome, artist name, grey
Steps: 10, Sampler: Euler a, CFG scale: 7, Seed: 2101753172, Size: 512x512, Model hash: 08c8bbb6f1, Model: ChiMix_SF1-NED-AOM3_1, RNG: CPU
Теперь есть полная идентичность результата, кроме третьего, он получен сразу после отключения функции водяного знака, но это не функция повлияла, просто отклонение, и такие "отклонения" с новой сборкой на основе новой версии SD WebUI происходят даже при генерации процессором, довольно неприятный факт:
В общем отключение функций внедрения водяного знака не повлияло на результаты, вполне ожидаемо, я бы мог отключить эти функции как бы "неэтично" это не выглядело, но смысла нет... И вообще, тоже мне этичность нашли, без разрешения пользователя внедрять непонятные скрытные водяные знаки в изображения оправдываясь что это якобы поможет определить искусственно сгенерированное изображение...
Особенно меня позабавил комментарий в коде "# naive attempt at preventing focal points from collecting at watermarks near the bottom" из файла "webui132\modules\textual_inversion\autocrop.py", то есть это уже файл от оболочки Stable Diffusion Web UI на основе которой создана моя сборка:
Я хотел предложить выделить текст и перевести переводчиком если непонятно что написано, но Яндекс браузер может и картинку перевести:
Выходит водяные знаки когда-то таки накладывались на результаты работы Stable Diffusion, и разработчики Web UI пытались костылями это дело исправить, чтобы водяные знаки не ломали работу алгоритмов. Судя по всему у разработчиков всё получилось, водяные знаки теперь вообще не накладываются, а костыли так и остались забавным моментом в исходном коде.
Ради интереса я решил наложить невидимый водяной знак на изображение при помощи "invisible-watermark". Водяной знак на самом деле не такой уж и невидимый, появились жёлтые пятна различимые даже в GNOME Image Viewer, по крайней мере я вижу жёлтые пятна, непонятно только как это дело поможет людям определить искусственно сгенерированное изображение, ведь оправдание водяным знакам состоит в том, что люди благодаря водяному знаку якобы смогут понять, что изображение сгенерировано искусственно:
А вот так выглядит разница между оригиналом и изображением с наложенным скрытным водяным знаком, стоит ли говорить что без оригинала с отсутствующим водяным знаком такую разницу никак не определить?
В общем, хватит теребить эти водяные знаки, сборку Stable Diffusion Web UI Neuro v3 уже почти закончил, осталось только почистить от мусора, ещё раз протестировать и загрузить в GitHub.
Найти мои сборки можно в репозитории GitHub: ( https://github.com/Shedou/Neuro ).
Кстати, упаковать полную версию сборки было затруднительно, чтобы уместить в три части до 2ГБ каждая, мне пришлось заняться чисткой от лишнего хлама, например папки ".git" в Stable Diffusion Web UI, и когда я смотрю на размер действительно портативной сборки Stable Diffusion:
А потом смотрю на чужие "портативные" сборки Stable Diffusion, да ещё запакованные в RAR формат и загруженные кусочками в зону репозитория где должен находиться код, а не релизы, не в обиду сборщику, но это просто какой-то угар и троллинг над пользователями:
После этого у меня появился один нескромный вопрос, а можно ли считать софт портативным, если для запуска и работы нужно докачивать зависимости через интернет? Или мои понятия о портативности неправильные, и портативному софту допустимо быть зависимым от чего попало?
Хотя всё же я допустил ошибку неприятную которую заметил уже после того, как загрузил сборку в GitHub... Я конечно почистил сборку от лишнего, чтобы меньше занимала места, но я забыл удалить бэкап папки которую чистил, и по итогу получилось так, что не особо то и сократил размер в итоге, в одном месте убрал, а в другом забыл:
Ну да ладно, позже перепакую архивы без этого бэкапа и загружу заново, ну а если вы успели скачать "как есть", ничего страшного, можете вручную удалить файл "repositories.zip" в папке "webui132" чтобы немного освободить места, но это не обязательно.
На этом пожалуй закончу статью, слишком большой объём материала набирается...
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.