Правдоподобно - не значит верно
Любая универсальная модель изображений умеет раскрашивать страницу манги. Вставьте страницу, и меньше чем через минуту получите результат, который на первый взгляд выглядит нормально. Проблемы начинаются на второй странице, когда тот же персонаж возвращается с другими волосами. Затем возвращается облачко реплики с едва заметно перерисованным текстом. Затем возвращается промежуток чистого чёрного, заполненный выдуманным рисунком.
Дело не в том, что модель плохо рисует. Она делает ровно то, чему её учили: создаёт правдоподобное изображение. Но страница манги - это не одно изображение. Это последовательность кадров с общим составом персонажей, с настоящим печатным текстом, разделённая структурным чёрным и принадлежащая главе, которая должна совпадать с предыдущей. Правдоподобие постранично - неверная цель, и никакие ухищрения с промптами цель не меняют.
Watashi Colorizer построен вокруг этой разницы. Ниже - шесть инженерных решений, вытекающих из неё. Они не экзотичны, но каждое существует потому, что мы видели, как без него что-то ломается.
Ч/Б
Цвет1. Веса выбраны сравнительным тестом, а не пресс-релизом
Большинство колоризаторов - тонкая оболочка: изображение пользователя уходит в публичный API, раскрашенное возвращается. Тогда оболочка не лучше того, что поставщик API выпустил в этом квартале, и инструмент наследует все его слепые зоны, включая контент, который тот отказывается трогать.
Мы запускаем собственные веса на собственных GPU и выбираем их тестированием, а не по репутации. Модели-кандидаты выходят в очную дуэль с продакшн-моделью на одних и тех же реальных страницах, а человек сравнивает результаты рядом. Большинство кандидатов проигрывают. Победители побеждают по доказательствам, а поражения записываются, чтобы один и тот же тупик не исследовали дважды.
Нынешний движок - это дообученные под раскрашивание веса, а не универсальная модель из коробки. Это главная причина, по которой кожа читается как кожа, а фоны дорисовываются, а не остаются серыми.
2. Инструкции, проверенные по одной фразе
Инструкции, которые уходят с каждой страницей, не написаны за один присест. Они собраны так: каждая фраза проверялась отдельно, и оставалось только то, что измеримо меняло результат.
Эта дисциплина важна, потому что написание промптов полно интуиций, которые оказываются перевёрнутыми. Самый ясный пример из нашей работы: строка, перечислявшая цвета, которых у кожи быть не должно, породила страницу, где кожа вышла ровно этих цветов. Назвать нежелательное - значит сделать его более вероятным, а не менее, и решением было описывать только то, как выглядит правильный результат. Рассуждениями мы бы этого не нашли. Нашли, проверив одну фразу и посмотрев на результат.
Поэтому рабочий набор короткий, и каждая часть заслужила своё место: определиться с тоном кожи, доработать каждый фон, сохранить анатомию в нарисованной форме, точно сохранить линию и текст. Уберите любую - и вернётся конкретный сбой.
3. Отдавать модели больше страницы
Модели изображений работают в фиксированном внутреннем размере. Отправьте большой скан, и он уменьшится ещё до того, как модель его увидит, и всё мелкое на странице - лица на общем плане, текст на вывеске в глубине, тонкая штриховка - придёт размазанным пятном. Модель раскрашивает пятно, потому что больше ей ничего не дали.
Мы усвоили это тяжёлым путём, гоняясь за дефектом раскрашивания, который не поддавался никакой работе с промптом. Тот же участок, вырезанный и отправленный отдельно, возвращался правильным каждый раз. Модель всегда знала ответ; она просто никогда не могла увидеть вопрос.
Поэтому страницы принимаются в максимальном размере, который движок реально способен использовать, а не в удобном значении по умолчанию, и результат возвращается ровно в размерах загруженного вами файла.
Ч/Б
Цвет4. Читать страницу как кадры, а не как прямоугольник
У страницы манги есть структура, до которой универсальной модели нет дела: рамки кадров, промежутки и разделители чистого чёрного, которые обязаны остаться чёрными. Раскрасьте прямоугольник - и эта структура станет для модели текстурой. Так и появляется промежуток, заполненный выдуманным пейзажем.
Наш конвейер определяет границы кадров и полосы рисунка до любого раскрашивания и режет только по настоящим границам. Резать посреди кадра хуже, чем не резать вовсе: две половины раскрашиваются независимо и никогда не совпадут, поэтому делитель отказывается, а не гадает.
- Разделение с учётом кадров, чтобы каждая область получила всё внимание модели
- Сохранение промежутков и уровня чёрного, чтобы структурный чёрный остался структурным
- Закрепление палитры, чтобы у повторяющихся персонажей сохранялись те же волосы, глаза и одежда
- Сохранение текста и линии, чтобы диалоги пережили раскрашивание
Вместе с закреплением палитры, когда цвета персонажа фиксируются, а не угадываются заново, это и удерживает состав персонажей в образе на протяжении страницы и главы, вместо дрейфа на оттенок за страницу.
5. Режим для страниц, с которыми не справляется никто
Японская печатная цензура кладёт жёсткую чёрно-белую полосу поверх анатомии. Для модели раскрашивания это по-настоящему неоднозначно: под полосой нет информации о коже, на которую можно опереться, поэтому модель что-то выдумывает - и каждый раз выдумывает разное. В наших тестах одна и та же страница за четыре прогона одной модели дала коричневый, серый, оранжевый и розовый.
Этот сбой не решается семплированием, потому что нельзя усреднением получить информацию, которой нет во входных данных. Модели нужно явно сказать, что такое эта полоса и что находится под ней. Поэтому работа с цензурой - отдельный режим, который вы включаете для страниц, которым он нужен.
Он опциональный по причине, которую стоит назвать прямо: если описывать полосы цензуры модели, которая их не видит, модель сама добавит полосу. Инструкция мощная, и именно поэтому она ограничена страницами, к которым относится, а не работает на всём подряд.
6. Считать ожидание частью продукта
Держать собственные GPU - значит платить за них, значит усыплять их в простое, значит первый запрос после затишья ждёт пробуждения железа. Это реальная цена того, что ты не оболочка, а притворяться иначе - верный способ терять людей посреди задачи.
Поэтому движок начинает прогрев в момент, когда вы выбираете модель, ещё до того, как вы закончили выбирать файлы, и для большинства задач ожидание исчезает совсем. Когда ожидание неизбежно, экран прогресса говорит об этом простыми словами, а не показывает обратный отсчёт, который не сможет выдержать.
Таймер, который истёк и начался заново, хуже, чем никакого таймера: он превращает медленную задачу в кажущуюся ложь. Если оценка превышена, мы перестаём оценивать и переходим к честному прошедшему времени с объяснением, а вы можете включить уведомление, чтобы спокойно уйти со вкладки.
Ничего волшебного здесь нет
Каждый пункт выше неэффектен. Тестировать кандидатов вместо веры в маркетинг. Проверять инструкции по одной. Давать модели достаточно пикселей. Уважать структуру страницы. Сделать режим для трудного случая. Быть честными про ожидание.
Разницу создаёт не отдельный приём, а то, что страница манги считается страницей манги от загрузки до экспорта. Именно в этом вся дистанция между правдоподобным и публикуемым.
Инструмент можно попробовать бесплатно, и самый быстрый способ всё это оценить - прогнать страницу, которую вы уже хорошо знаете, и посмотреть, вернётся ли она той страницей, которую вы нарисовали.