Главное что помогает мне в стабильности персонажей (и всё равно она далека от идеала) это возможность Midjourneyпередавать на вход не только текст, но и картинки (у других нейросетей я такой возможности не видел). То есть я отдаю ей изображение главного героя с нейтральным выражением лица, картинку с помещением и говорю что он там сидит улыбается. В итоге после нескольких (десятков) генераций получается достаточно похожее лицо в нужной обстановке. Remix Subtle похож на режим img2img у StableDiffusion - есть уже созданное изображение и к нему применяется новый запрос, при этом крупные элементы картинки скорее всего сохранятся, а мелкие детали такие как черты лица поменяются. Если вы используете StableDiffusion, то вы пробовали подключать Lora (сейчас они похоже есть почти для всех популярных персонажей)?
Так как у возможностей для обучения Lora или DreamBoothу Midjourney нет, то приходится плясать с бубном. Для повышения стабильности персонажей я обычно использую.
Имена актеров
Варьирование картинки с удачной внешностью чтобы использовать на соседних кадрах, особенно если сцена довольно статичная.
Запрос со ссылкой на картинку с удачной генерацией (насколько я понимаю при этом строится не текстовый запрос, а вектор признаков картинки). Я бы сказал что этот способ немного на похож Embedding в SD.
Режим Vary(Region) - аналог Inpaint в SD, для деталей одежды или перерисовки лиц (получается хуже), при это сочетаю разные версии Midjourney - так как генерация лучше у 6 версии, а стиль рисовки мне больше нравится у 5 (ну или я не понял как добиться такого стиля от 6 версии).
Простой коллаж - фон с одной генерации, а персонажи с другой.
По моему если дать объединенной аннотации хорошее имя, то это будет более читабельно чем разбирать столбик из десятка аннотаций, но тут надо рассматривать конкретные примеры кода. Например пример из статьи с AuthRequired выглядит достаточно убедительно. PS Спринг по моему в принципе про написание аннотаций вместо кода.
Примерно из таких соображений в Котлине к коллекциям прикрутили метод расширение isNotEmpty в дополнение к стандартному isEmpty, чтобы вероятность ошибиться была меньше.
Чтобы получить строку для которой выполняется s.isEmpty() && !s.equals(""), достаточно этого:
breakIt(" ").trim();
Это происходит из за того что метод trim не меняет поле coder для UTF16-строк, что логично, так как он удаляет из начала и конца строки символы с кодом меньше или равным коду пробела (20) не трогая остальные и таким образом не может повлиять на компактность строки. PS насколько я понял большинство других методов работы со строками (если не все) делают дополнительные проверки и могут изменить coder.
Ну если PERFORMANCE_MODE поставить в 1, то ситуация резко улучшается, а артефактов появляется не так много. Думаю если поиграться с параметрами руками (а тем более с кодом) можно попробовать найти приемлемый баланс для своей задачи.
PS GTX 1660 — 15 фпс на 800х450, это прямо benchmark получается))
В дальнобойщиках 2, насколько я могу судить, для сильно отстающих противников вообще не рассчитывалась физика и их координата просто менялась вдоль трассы что бы догнать игрока.
PS залог победы проезд на красный прямо перед точкой назначения (не повторяйте в реальной жизни).
Andrey2008, было бы интересно узнать результаты проверки этого кода PVS-Studio))
Но наверное, публиковать результаты проверки утекшего кода опасно с точки зрения закона.А жаль.
Как раз нашёл статью где сравниваются два подхода — instanceOf и enum, с instanceOf медленнее, хоть и красивее. habr.com/ru/post/430014
По моему идея прятать не очень красивые, но более эффективные решения в глубины кода в целом неплохая. А то если совсем не заглядывать под капот, то можно получить проблемы с производительностью (но тут речь скорее про библиотеки, а не прикладные программы)
Ну из за особенностей синтаксиса я не мог написать на котлине точно так же как на Scala. Со сложными случаями выглядит интересно, спасибо почитаю.
Главное что помогает мне в стабильности персонажей (и всё равно она далека от идеала) это возможность Midjourney передавать на вход не только текст, но и картинки (у других нейросетей я такой возможности не видел). То есть я отдаю ей изображение главного героя с нейтральным выражением лица, картинку с помещением и говорю что он там сидит улыбается. В итоге после нескольких (десятков) генераций получается достаточно похожее лицо в нужной обстановке.
Remix Subtle похож на режим img2img у StableDiffusion - есть уже созданное изображение и к нему применяется новый запрос, при этом крупные элементы картинки скорее всего сохранятся, а мелкие детали такие как черты лица поменяются.
Если вы используете StableDiffusion, то вы пробовали подключать Lora (сейчас они похоже есть почти для всех популярных персонажей)?
Эта история заканчивается, но у меня есть довольно много сюжетных заготовок. Но скорее всего я вернусь к формату два выпуска в неделю.
Я как основную площадку рассматривал acomics - там 220 подписчиков, ну и в рекламу особо не вкладывался, так как в основном делаю проект для себя.
Я пытаюсь делать комикс с помощью Midjourney (у SD меня не устраивает качество и менее понятная лицензия в общем случае).
https://acomics.ru/~two2one
Так как у возможностей для обучения Lora или DreamBoothу Midjourney нет, то приходится плясать с бубном. Для повышения стабильности персонажей я обычно использую.
Имена актеров
Варьирование картинки с удачной внешностью чтобы использовать на соседних кадрах, особенно если сцена довольно статичная.
Запрос со ссылкой на картинку с удачной генерацией (насколько я понимаю при этом строится не текстовый запрос, а вектор признаков картинки). Я бы сказал что этот способ немного на похож Embedding в SD.
Режим Vary(Region) - аналог Inpaint в SD, для деталей одежды или перерисовки лиц (получается хуже), при это сочетаю разные версии Midjourney - так как генерация лучше у 6 версии, а стиль рисовки мне больше нравится у 5 (ну или я не понял как добиться такого стиля от 6 версии).
Простой коллаж - фон с одной генерации, а персонажи с другой.
Ручная правка деталей - удаление лишних украшений, татуировок, копирование характерных деталей одежды.
PS так же для того чтобы было проще различать персонажей использую разный цвет волос и цвет одежды.
Конкретно в этом примере размер "номерка" совпадает с размером "чемодана".
По моему если дать объединенной аннотации хорошее имя, то это будет более читабельно чем разбирать столбик из десятка аннотаций, но тут надо рассматривать конкретные примеры кода. Например пример из статьи с AuthRequired выглядит достаточно убедительно.
PS Спринг по моему в принципе про написание аннотаций вместо кода.
Я правильно понимаю статья про скорее про Spring, а не про чистую Java?
Примерно из таких соображений в Котлине к коллекциям прикрутили метод расширение isNotEmpty в дополнение к стандартному isEmpty, чтобы вероятность ошибиться была меньше.
Чтобы получить строку для которой выполняется
s.isEmpty() && !s.equals("")
, достаточно этого:Это происходит из за того что метод trim не меняет поле coder для UTF16-строк, что логично, так как он удаляет из начала и конца строки символы с кодом меньше или равным коду пробела (20) не трогая остальные и таким образом не может повлиять на компактность строки.
PS насколько я понял большинство других методов работы со строками (если не все) делают дополнительные проверки и могут изменить coder.
Выложил оптимизированный код на Котлине, который работает быстрее чем вызов кода на C++
Главное изменение это вынос объекта Complex за тело цикла и его повторное использование.
https://github.com/igormich/JNIvsKotlin/blob//app/src/main/java/ru/tusur/nativevskotlin1/model2/MandelbrotOptimized.kt
Результаты на POCO M3 Pro (без прогрева, значения плавают, но порядок величин сохраняется)
Kotlin - 17681ms
Оптимизированный Kotlin - 1085ms
C++ - 1708ms
PS: PullRequest сделал, интересно как код поведёт себя на других конфигурациях.
А не поделитесь подробной инструкцией?
А как анализатор узнаёт что возвращаемое значение является "важным"? В нем прописаны такие функции для стандартной библиотеки?
В таком случае в случае использования нестандартной пользовательской функции clamp предупреждения бы не было?
Возник такой вопрос можно ли передать лямбду параметром native метода и есть ли в этом смысл (в первую очередь в плане производительности)?
Возможно не совсем по теме, но вот пример довольно интерересной оптимизации: https://habr.com/ru/post/305894/
По моему идея для игры неплохая (сам думал о такой посмотрев тематические каналы на ютубе), но это будет уже не сталкер.
PS GTX 1660 — 15 фпс на 800х450, это прямо benchmark получается))
PS залог победы проезд на красный прямо перед точкой назначения (не повторяйте в реальной жизни).
Но наверное, публиковать результаты проверки утекшего кода опасно с точки зрения закона.А жаль.
По моему идея прятать не очень красивые, но более эффективные решения в глубины кода в целом неплохая. А то если совсем не заглядывать под капот, то можно получить проблемы с производительностью (но тут речь скорее про библиотеки, а не прикладные программы)
Ну из за особенностей синтаксиса я не мог написать на котлине точно так же как на Scala. Со сложными случаями выглядит интересно, спасибо почитаю.