Технология ProPainter: незаметная революция

Расскажу о чрезвычайно интересном инструменте редактирования видео и поделюсь эксклюзивным контентом. Судя по никакому обсуждению в сети, ProPainter — это незамеченная революция в невидимых спецэффектах.

Технология ProPainter: незаметная революция

2. Недостатки и системные требования

Сеть требовательна к объёму видеопамяти. Думаю, 4-6 Гб выделенной видеопамяти это минимальный объём, с которым можно попробовать что-то сделать. Потребление зависит в первую очередь от разрешения видео, но вряд ли сейчас кто-то будет работать с источником меньше 1080р. Разработчики приводят следующую таблицу потребления.

Таблице нужно дать некоторое толкование. Учитывая специфику задачи, перед отправкой в ProPainter видео можно (и нужно) обрезать до небольших прямоугольников, которые после собираются вместе в стороннем редакторе. Т. е. реально с исходника в условных 1080р вырезается кусочек размером 700*350 и обрабатывается. Об этом в главе о работе.

Обрабатываемая область чуть подблюривается. Возможно, это связано с разрешением обучающего набора — 432*240, но тут не уверен. Акцент на «обрабатываемая», а не «закрашиваемая», о чём будет подробнее ниже. Лечится несложно, но нужно быть в курсе.

Поддерживаются только видеокарты Nvidia. Если вы грешным делом думали выполнить квоту дармовой видеопамятью из загашников AMD, то увы. В комментариях подсказали возможный вариант решения, но пока в альфа-версии и без гарантий.

Альтернативой выступает CPU mode, он же софтварный режим — работа на центральном процессоре. Функционирует, но очень медленно. Проверил его один раз, да и то случайно.

Сеть требует минимальной версии CUDA SDK 9.2, это аппаратная спецификация 3.0, карты GT 600 и GT 700. Сборка сделана на SDK 11.8, это спека 3.5, список там же.

В оригинальном виде сеть требует подготовки системы и предлагает установить Git, Anaconda, Python 3.8 и пачку библиотек. Если бы сам не писал на Питоне, не стал бы связываться. Тем более, что поддержку CUDA нужно гуглить и устанавливать отдельно. Ничего сложного, но как-то недружелюбно.

Именно поэтому, и потому что был скучный вторник, Жаба накатил pyinstaller и сделал свою сборку. С Блэкджеком и экзешниками! С нормальными исполняемыми файлами, которые просто запускаются и работают, ничего не требуя взамен. Разве что пару гигов загрузить.

В оригинальном виде сеть общается с пользователем через текстовый интерфейс. Это полный отстой и не понятно вообще, что мешало нарисовать окошки. /с

Поэтому Жаба накатил tkinter сделал свой графический интерфейс. Не самая красивая вещь на свете и не поддерживает инструменты для обучения. Но всё необходимое для работы есть, и даже чуть-чуть сверху 😉

3. Установка оригинальной версии

Для начала пару слов об оригинальном установочном процессе. Официальная инструкция предлагает сделать следующее:

  1. Скачать и установить Git, после чего клонировать к себе репозиторий командой: git clone https://github.com/sczhou/ProPainter.git
  2. Скачать и установить Anaconda, запустить Anaconda Prompt, выполнить команды:
    conda create -n propainter python=3.8 -y
    conda activate propainter
    pip3 install -r requirements. txt
  3. Дополнительные требования:
    CUDA >= 9.2
    PyTorch >= 1.7.1
    Torchvision >= 0.8.2

Если Git нет, то и первый шаг не нужен: скачать сеть можно по прямой ссылке и кинуть куда-нибудь в корень диска С.

Во втором пункте в списке библиотек из requirements.txt PyTorch и Torchvision уже прописаны, а CUDA — нет. Поэтому по умолчанию получается софтверный режим.

Здесь предложение моё такое: pip3 install -r requirements.txt не выполнять, а перейти на эту страничку сайта PyTorch и с помощью виджета сгенерировать код запроса для установки полного комплекта из PyTorch, Torchvision, Torchaudio и CUDA. Вариант для Windows 10 и CUDA 11.8:

pip3 install torch torchvision torchaudio —index-url https://download.pytorch.org/whl/cu118

После можно проинсталлировать прочее содержимое файла requirements.txt, предварительно убрав из него строчки torch и torchvision, воизбежание.

4. Установка и требования сборки

Установка: распаковать архив, желательно в папку без кириллических символов.

Требования: поддержка CUDA SDK 11.8, аппаратная спецификация CUDA — 3.5. Список видеокарт.

Протестировано под Windows 10.

Сборка v 1.0 сделана на базе последней на момент 16.02.2024 версии сети и весов v 0.1.0. Никаких гарантий не даю, и честно признаюсь, что за такие дела берусь нечасто. Вроде должно работать ^^

Корневая папка выглядит так:

Соответственно, prop_gui.exe — экзешник графического интерфейса (тыкать сюда) , inference_propainter.exe — сеть ProPainter; папки inputs и results — входные и выходные данные; weights — веса сети (содержимое папки можно удалить, тогда при запуске сеть перекачает их заново); _internal — библиотеки.

Собранную сеть можно запустить через консоль, если в окошках чего-то нет. Делается это точно так же, как в примерах разработчиков для несобранной версии, только заменяя python inference_propainter.py на inference_propainter.exe

Для проверки работоспособности сети в папке …/inputs есть примеры.

5. Графический интерфейс

Единый prop_gui.exe работает как с собранной (.ехе), так и несобранной (.py) версиями.

В последнем случае просто распакуйте содержимое архива с интерфейсом в папку установленной сети. Программа проверяет сеть на распакованность по существованию директории /Scripts и ожидает, что Anaconda с окружением «propainter» уже настроены.

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

ProPainter предполагает два основных режима работы — Object Removal и Video Completion. Различаются они наборами входных данных: в первом случае маской будет видеофайл, во втором — статичная картинка.

В режиме Object Removal видео и маска могут быть либо .mp4-файлами, либо последовательностями картинок (но не комбинацией одного и другого) .

Для импорта последовательности скопируйте видео и маску по адресам:
…proPainter/inputs/object_removal/xxx_video
…proPainter/inputs/object_removal/xxx_mask
Укажите «xxx» в качестве названия проекта и нажмите кнопку «Прочитать / Создать». Если папок не существует, они будут созданы — на случай, если вы будете рендерить исходники позже и хотите сразу сохранять их по готовым адресам. Правый клик по кнопкам «Открыть /video» и «Открыть /mask» копирует соответствующий путь в буфер обмена.

Для импорта .mp4-файлов аналогично скопируйте их в …proPainter/inputs/object_removal/, после чего укажите имя проекта «xxx.mp4». Маска из файла xxx_mask.mp4 подтянется автоматически.

В режиме Video Completion маски статичные, и всегда представляются в виде одного .png или .jpg файла. В качестве видео принимаются последовательности картинок и .mp4.

При импорте последовательности можно так же создать новую папку для видео или подгрузить существующую. Если оставить поле «Имя файла с маской» пустым, туда автоматически подставится путь до xxx_mask.png, путь до .jpg или файла с другим именем можно прописать руками.

Если импорт прошел успешно, можно настроить процесс. На самом деле процесс можно настраивать в любое время, это не важно. По умолчанию активен только флаг экспорта в PNG, и в общем за исключением ещё двух параметров здесь можно ничего не трогать. Можно и их не трогать.

Есть кнопка-калькулятор потребления VRAM, видеопамяти. Основан на таблице разработчиков. Цифры примерные, воспринимать их стоит не как гигабайты, а как условных «попугаев», оценку по сдвинутой шкале.

Когда всё настроено, можно нажать кнопку «Запустить выполнение команды». Откроется консоль Windows (в случае сборки) , или Анаконды (в случае запуска несобранной версии) .

6. Настройки ProPainter

Описание от разработчиков крайне скупое, а в их статье надо разбираться. Поэтому кратко, по-босяцки.

—save_frames / Экспорт в .PNG — сохранять ли результат в виде последовательности .png-картинок или единого .mp4-файла.

—fp16 / Точность FP16 — понизить точность вычислений с плавающей запятой до FP16 с дефолтного FP32. Бесплатное ускорение процесса на поддерживающем железе. Это на таком, что умеет CUDA Compute 6.1, видеокарты GTX 1050 и выше. Сильно увеличивает скорость выполнения, снижает потребление видеопамяти. Ниже будет небольшое сравнение качества в этих режимах.

—subvideo_length — устанавливает количество кадров, в рамках которых происходит анализ картинки для реконструкции (?) Уменьшение снижает потребление видеопамяти.

—neighbour_length (количество локальных соседей/local neighbors) и —ref_stride (глобальные ссылки/global references) — параметры анализа, уменьшение тоже снижает потребление видеопамяти.

—width —height / Изменить размер кадра — сжатие видео в произвольных пропорциях. Уменьшение снижает потребление видеопамяти.

—resize_ratio — Множитель, на который будут умножены ширина и высота кадра. Может быть дробным.

Для обычного использования достаточно переключалки «FP16 / FP32» и снижения subvideo_length до 50.

7. Работа с ProPainter

Чтобы задать нейронной сети задачу, ей нужно предложить два файла: один с видео, один с маской. Маска — это кадр, залитый чёрным цветом , на котором белым цветом закрашена область, которую сети нужно заполнить.

Теперь видео надо обрезать, чтобы не вылететь по видеопамяти. Прикидываем регион вокруг маски, инфа из которого понадобится сети в пределах времени, определенного subvideo_length. Отмечаем, кропаем кадр.

Сохраняем технический обрезок видео в …proPainter/inputs/object_removal/xxx_video

Возвращаемся в редактор, перекрываем видео чёрным слоем, включаем маску. Рендерим обрезанное видео с маской, кладем его в …proPainter/inputs/object_removal/xxx_mask

Для режима Video Completion путь меняется соответственно: …proPainter/inputs/video_completion/xxx_video …proPainter/inputs/video_completion/xxx_mask

Когда файлы готовы, идём в ProPainter.

Для пользователей графического интерфейса: порядок работы с файлами.

Для всех остальных: python inference_propainter.py —video inputs/object_removal/xxx_video —mask inputs/object_removal/xxx_mask

Настраиваем настройки, параметрим параметры.

python inference_propainter.py —video inputs/object_removal/xxx_video —mask inputs/object_removal/xxx_mask —параметр1 —параметр2

Жмём кнопку «Запустить выполнение команды« в графическом интерфейсе или Enter в консоли. Если всё в порядке, ProPainter крепко подумает и выдаст сообщение об успешном окончании операции:

Идём в …proPainter/results/xxx_video забирать результаты.

Теперь видео нужно собрать обратно. Импортируем папку из results в видеоредактор, возвращаемся в композицию с масками.

Если кусков было много, может получиться что-то такое.

Поэтому вернувшись в редактор, открываем свойства маски. Далее банально +5 Expansion и +5 Feather. Получаются приятные, мягкие края. Ставим маску как Alpha Matte для слоя видео из ProPainter. Теперь комар носа не подточит:

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

На примере ниже я нарисовал большую круглую маску посередине видео, видео замедлено в 8 раз и увеличено. И всё равно ничего не видно. Тут надо класть кадр над кадром и смотреть на контрасте, тогда можно засечь.

8. Чего тут нет

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

Графический интерфейс инструменты для обучения тоже не поддерживает.

9. Ссылки

Сборка v1.0. В составе сеть, веса, и графический интерфейс.

Скачать

Графический интерфейс отдельно. Работает с собранной (.ехе), и с обычной (.py) вариантами установки.

Скачать

Прямая ссылка на загрузку ProPainter с официального репозитория. Не содержит весов, они докачиваются вручную или автоматически при первом запуске.

Публикация разработчиков по теме ProPainter.

ProPainter на канале автора на YouTube.

 

Источник

Читайте также