Обновить

Archivist: Как я учил нейросеть понимать физику плёнки, вместо того чтобы просто размывать шум

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели34K
Всего голосов 106: ↑106 и ↓0+146
Комментарии29

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

Выглядит отлично!)
Решил тут детям показать Утиные истории, всё что находится достаточно паршивого качества, при просмотре на 50" телике, либо черезчур контрастный апскейл, о котором вы говорите.
Тот результат, что вы показали - выглядит очень прилично. Как долго обрабатывается скажем 30 минутная серия?

Утиные истории не имеют, к сожалению, хд трансфера с пленки. Все что есть это попытки почистить и апскельнуть двд исходник, не лучшего качества. Результат соответствующий - мусор на входе - мусор на выходе. Лучше Chip&Dale, для них есть ХД трансфер (исключая одну серию вроде)

Здорово. А не думали о темпоральном денойзере? Очень часто просто статика или панорамирование идет.

Для целлулоидной анимации, как мне кажется, надо искать путь отделять фон от нарисованного на целлулоиде и применять разные фильтры к ним соответственно. Так как рисованное на целлулоиде это линии и примерно однотонные заливки, но фон это полноценные картины с мелкими деталями и полутонами. И фильтр который отлично очистит шума целлулоидную часть одновременно уничтожит мелкие детали и переходы фона. Что собственно на сравнениях и видно. А если фон отделить то его можно стакнуть чем в разы уменьшить случайный шум пленки.

А не думали о темпоральном денойзере?

Да, но обучение такой модели - это кратно сложнее, нежели то, с чем я уже был знаком (ESRGAN compact). И я бы хотел всё же, чтобы мой эксперимент получил некоторую распространенность, и ESRGAN для этого отлично подходит, так как абсолютное большинство GUI умеет работать с данной архитектурой

Для целлулоидной анимации, как мне кажется, надо искать путь отделять фон от нарисованного на целлулоиде и применять разные фильтры к ним соответственно

Если я правильно понял, то вы говорите об оригинальных фреймах, с которых снимали плёнку, но это скорее абстрактное рассуждение, ибо все они либо лежат в архивах под семью печатями, либо уже давно утеряны/сгорели/испортились. Например, у MGM раза 2 с лишним горели архивы».

Я не говорю про оригинал, это естественно невозможно. Я говорю про слои - слой фона и слой анимации. И соответственно про разные фильтры к этим слоям.

Тогда речь скорее идёт о диффузионных апскейлерах и кластер-апскейлерах, как, например, Starlight от Topaz. На словах - это, конечно, интересно, но на деле для этого нужен просто огромный R&D отдел плюс копаться в разработках китайцев на arXiv

Тут, возможно, помогли бы готовые проекты типа SuperGlue, чтобы заматчить статичные участки фона, и SAM, чтобы сегментировать отдельные участки.

На ebay и yahoo аукционах можно купить набор анимационного кадра фон + один или несколько cell, от каких-либо фильмов или сериалов. Не думали себе такой купить? Чтобы иметь представленние о том как оно в ОРИГИНАЛЕ выглядит.

НЛО прилетело и опубликовало эту надпись здесь

Проделанная работа вызывает уважение, но получившиеся "векторные мультики, сделанные в Флэше" лично мне нравятся меньше, чем зернистые исходники. Как будто что-то важное пропадает.

Не могу не согласиться, что косяк с мощностью нейросети есть, но если посмотреть с другой стороны - после проделанной работы осталась программа для генерации датасетов, которая не зависит от текущих ограничений, так что может когда-нибудь в другой раз, но у меня выйдет обучить что-то на уровне больших решений) А так самые главные результаты, которые для меня здесь есть - Antilines и RGB модели

Хоть я и не являюсь сторонником зерна на видео, но объективно детализация страдает по нынешним результатам

Имхо тут лучше разделить техническую и художественную составляющие.

С одной стороны, если фильм требуется масштабировать (в любую сторону) и/или пережимать, то делать это лучше без шумов, чтобы «зернистая ламповость» не превратилась в рябящее мыло. Потому что шумы алгоритмы сжатия видео не любят, особенно когда битрейт низкий (а в интернете он очень низкий). С другой стороны, желательно иметь возможность сохранить тёплошумную ламповость, хотя бы в каком то виде.

Можно действовать так:

  1. Берём оригинальное видео А

  2. Удаляем шум — получаем видео без шума Б

  3. Попиксельно вычитаем из видео А видео Б — получаем видео с самим шумом В

  4. Видео с шумом В дополнительно обрабатываем так, чтобы там полностью перестало проглядываться оригинальное видео Б — границы, тени, силуэты и прочее. Сделать это можно, например, с помощью двумерного преобразования Фурье и удалением низкочастотной составляющей + ещё парой допобработок.

Теперь, у нас есть:

  • Оригинальное видео с шумом А

  • Видео без шума Б

  • Видео только с самим шумом В

И если нам надо, например, отмасштабировать видео (апскейл/даунскейл), то мы:

  1. Масштабируем видео без шума Б (нейросеткой/бикубически/билинейно/ланцош — не важно)

  2. Накладываем на него шум В без масштабирования (!), при необходимости увеличиваем/уменьшаем интенсивность шума В — по вкусу. Если новый размер кадра меньше оригинала — обрезаем, если больше — дозаполняем каким‑нибудь дублированием с маскированием стыков. Вообще можно тупо выделять спектр шума и потом его заново генерить по этому спектру в требуемом разрешении, но это не подойдёт для всяких ворсинок и прочих аналоговых штук

  3. Кодируем

Если при этом битрейт требуется очень низкий, то нужно предварительно поиграться со спектром шума на видео В и понизить амплитуду (по пространству и/или по времени), которые алгоритм сжатия превращает в мыло, а остальное оставить.

Если масштабирование не требуется — всё равно, мы можем что‑нибудь сделать с шумом, чтобы при сжатии кодеком он не мылился. Для совсем энтузиастов можно хранить их — видео Б и шум В — отдельно, и сводить непосредственно при просмотре.

Разумеется, все промежуточные результаты мы сохраняем либо в формат со сжатием без потерь (ProRes какой‑нибудь), либо в виде сиквенсов. Можно и fp32, если место есть.

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

Зерно ещё и к тому же прячет артефакты кодирования - вот на AntiLines и последнем скриншотах хороши видны блоки на ровных текстурах (да ещё и они сами выглядят как пластилин).

Это скорее выглядит как один из этапов обработки, потому что по хорошему в таких случаях нужно после удаления имеет смысл накладывать свой шум, поменьше и возможно менее динамичный - который будет лучше жаться, иметь меньше артефактов, чем изначальный, скрывать артефакты самой картинки и спасать от "выглядит как флеш и пластилин". Как правило при обработке старых источников так и делали в каком-нибудь ависинте - сначала шумодав (не настолько сильный, впрочем, как правило), потом дитеринг и добавление шума.

Заканчивался 2025 год и все уже практически забыли про AviSynth, в том числе pythone'ированный., не говоря уже о doom9. org с кучей скриптов для линейной и не линейной обработки видео...

Прекрасно, вот ради таких статей я и прихожу на Хабр. Особенно интересно видеть реализацию на сверточных сетях, сейчас всё на трансформерах делается, а тут как-то привычнее.

Недавно тоже задался целью заморочиться не по-детски апскейлить "по-взрослому" (то есть, уже почти на грани ремастеринга). И тоже столкнулся с тем, что попытка ИИ-апскейла "в лоб" чаще всего даёт крайне неудовлетворительные результаты, по тому самому принципу "мусор на входе = мусор на выходе".

Путём экспериментов пришёл к достаточно неочевидному пайплайну, совмещающему линейную и генеративную обработку...

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

То есть, вообще исключается вмешательство ИИ (а заодно минимизируется ресурсоёмкость задачи и количество глюков) на этом "грязном" этапе:

  1. Ключевой момент. Базовый денойз, базовая чистка контуров, базовая цветокоррекция — в... Фотошопе (либо в любом другом растровом редакторе с аналогичным функционалом).
    Прекрасно понимаю, что звучит крайне странно в эпоху засилья торжества ИИ (и ещё более странно в контексте работы с видео)) — но как раз у старины Фотошопа для этих целей даже "из коробки" весьма продвинутый и мощный инструментарий, вылизанный за десятки лет (пожалуй, лучший на рынке, настоящий "король растра").

  2. Итак, на этом этапе закидываем видео в Фотошоп. Аудиодорожку пока вообще удаляем, поскольку работаем только с картинкой. Далее колдуем исключительно смарт-фильтрами и корректировочными слоями на таймлайне (частный пример стека фильтров в конце комментария под спойлером, но в целом конкретный стек индивидуален для каждого видео и зависит от его состояния).
    NB: Практически все привычные фотошоповские "волшебные" авто-коррекции уровней/цвета/контраста на видеоряде бесполезны (работают только в контексте активного кадра на таймлайне) — поэтому с цветовыми настройками придётся либо выставлять некие "средние по больнице" параметры на весь видеоряд, либо резать на сцены-объекты и вытягивать уже каждую сцену по отдельности (а кому сейчас легко?).

  3. Результат. На входе грязный видео-исходник, на выходе этакий "полуфабрикат" — промежуточная JPEG-секвенция с предварительной тёплой ламповой чисткой и цветокоррекцией в исходном разрешении.
    Таким образом, максимально облегчаем задачу для ИИ, снимая с него часть самой сложной задачи — отличить полезный сигнал от шума (на данном этапе чаще всего и случаются нейросетевые конфузы из серии "я не могу, у меня лапки", или даже ещё более плачевный вариант "я художник, я так вижу")).

  4. Далее непосредственно ИИ-апскейл получившегося "полуфабриката". Тут уже как обычно — чистка контуров и остаточных шумов/артефактов, генеративная детализация, темпоральная стабилизация, и прочие радости.
    На выходе HD/FHD/4К-видеоряд без звука — в максимально щадящем "толстом" формате (это ещё не финальный вывод, поэтому лишнее сжатие тут не нужно).

  5. Вытаскиваем на свет божий нашу аудиодорожку. Мало кто уделяет этому внимание, но старый звук тоже можно доработать напильником в аудиоредакторе (шумодав, псевдо-стерео или расширение стереобазы, нормализация, и прочее колдунство) — впрочем, тут по вкусу и по ситуации.

  6. Наложение аудиодорожки уже в обычном видеоредакторе. При необходимости там же финальная "тонкая полировка" видео – цвет, шум, резкость, прочее по ситуации.

  7. Финальный вывод в целевой кодек/формат.

Вот примерно как-то так — набросанный по-быстрому пример, демонстрирующий исключительно сам принцип:
Исходный материал — 720p BDRip (FilmScan)
Исходный материал — 720p BDRip (FilmScan)
Типовой ИИ-апскейл 720p→1080p "в лоб"
Прямой апскейл исходника в FHD — ореолы, артефакты, мыльце... Короче, всё то, за что мы так "нежно любим" нейросети... ))
Прямой апскейл исходника в FHD — ореолы, артефакты, мыльце... Короче, всё то, за что мы так "нежно любим" нейросети... ))
ИИ-апскейл с предварительной линейной обработкой в Photoshop:
НУЛЕВОЙ ШАГ. Стек смарт-фильров (снизу вверх): SmartBlur → SmartSharpen → Shadows/Highlights → Exposure [ → Опционально Levels/Curves и/или Hue/Saturation, в зависимости от исходника].  Уже намного проще для ИИ — все наиболее грубые дефекты устранены.
НУЛЕВОЙ ШАГ. Стек смарт-фильров (снизу вверх): SmartBlur → SmartSharpen → Shadows/Highlights → Exposure [ → Опционально Levels/Curves и/или Hue/Saturation, в зависимости от исходника]. Уже намного проще для ИИ — все наиболее грубые дефекты устранены.
Непосредственно FHD-апскейл после предварительной обработки.
Непосредственно FHD-апскейл после предварительной обработки.

P.S. Данное описание ни разу не в порядке "как правильнее" или "что лучше" — а исключительно в порядке обмена идеями. И, разумеется, описанная методика открыта для критики и/или дополнительных советов-идей-соображений.

P.P.S. И да, чуть не забыл... C наступающим, коллеги! 🎄🎉🍻

Интересная концепция) Не знал, что через фотошоп можно и такое проворачивать

Не знал, что через фотошоп можно и такое проворачивать

Да, я и сам совершенно случайно вспомнил про фотошоповскую фичу с импортом видео (находясь в процессе мучительного поиска аналогичных по качеству функций в обычных видеоредакторах с одной стороны, и ещё более мучительного созерцания неизбежных на таких грязных исходниках адских галлюцинаций ИИ-моделей с другой стороны)).

До того момента считал её бесполезной приблудой "маркетинга ради" — а оно вон как... Оказалось, что в определённых ситуациях крайне мощная и весьма удобная штука. И самое главное для предварительной чистки – не перерисовывает кадры, а работает с ними "как есть" (что получается и точнее, и быстрее).

А есть кусок видео минут на пять с оригиналом и обработанным, чтобы посмотреть результат вживую?

Ну, не то чтобы "рано"... Скорее, нейронки пока не ещё не годятся в качестве самодостаточного инструмента, типа волшебной кнопки "Сделать красиво" (и воспринимать их так на данном этапе — как раз наиболее распространённое заблуждение).

В качестве же инструмента конкретно для апскейла — в данный момент это едва ли не лучший вариант (и практически безальтернативный, пожалуй). Поэтому пока для получения максимально "энжойного" качества — даже после нейронок приходится ещё разок-другой пройтись напильником (а порой и до их использования тоже, о чём писал выше в теме).

Вот на вашем примере как раз тот случай. Но путём дополнительной прогонки уже через обычные фильтры в редакторе — можно привести "пластмассового" ИИ-Арни в чуть более человеческий вид:

В масштабах кадра изменения выглядят микроскопическими — но на подсознательном уровне правый кроп воспринимается как "более живой".───Конкретно на этом быстром примере "пост-ИИ обработки":• Чуть смягчены характерные для апскейла неестественно резкие границы;• Усилен микро-контраст в деталях;• Добавлен лёгкий шум.
В масштабах кадра изменения выглядят микроскопическими — но на подсознательном уровне правый кроп воспринимается как "более живой".
───
Конкретно на этом быстром примере "пост-ИИ обработки":
• Чуть смягчены характерные для апскейла неестественно резкие границы;
• Усилен микро-контраст в деталях;
• Добавлен лёгкий шум.

P.S. Теоретически можно наколдовать даже ещё лучше — но для этого надо возвращаться "этажом ниже" и играть с параметрами уже самого апскейлера (что в данном случае невозможно)).

там не только Арни пластмассовый, но и изуродованное лицо официантки на фоне(

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

Плюс, судя по всему, была включена ещё и какая-то из сомнительных ещё более агрессивных поп-функций (типа "Face Recovery" и прочих) — что в фильмах совершенно недопустимо (да и даже в статичных фото срабатывает "через раз", в лучшем случае)...

То есть, надо крутить софт/модель/параметры.

У вас в статье в разделах 2 (Rough) и 3 (Medium) ссылки для сравнения на imgsli.com перепутаны местами. Поправьте, пожалуйста.

готово

Имхо проще поставить ComfyUI и собрать адекватный пайплайн улучшения и апскейла кадров во Flux или спец.моделях SDXL. Это гораздо более отработанная технология - плюс возможность улучшать картинку не только апскейлером, а генерацией. Ну и там сотню апскейлеров можно одним кликом тестить, возможно какой-нибудь UltraSharp может лучше подойти

Отличая теме А например Можно это импользовать для улучьшить Аниме

Например исходник Видео: AVC, 8 bits, 704x400, ~1276 kbps, 23.976 fps Хочу пожнять разрешение в 2 раза 1408*800 и почистить. Что поставить topaz video ai или смотреть в сторону ComfyUI и собрать адекватный пайплайн ? На 4090 можно рассчитывать на 1 к/с ? или надо кратно больше мощности?

704x400 1276 kbps... Это вы в качестве источника решили использовать HWP-рип домохозяйки, в лучшем случае на Xvid, но скорее всего mpeg-4 (h263)?

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

П. С. : а почему такое странное разрешение 1408х800? Чем стандартные 720р или 900р не подошли?

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

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds