Расскажу о чрезвычайно интересном инструменте редактирования видео и поделюсь эксклюзивным контентом. Судя по никакому обсуждению в сети, 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. Установка оригинальной версии
Для начала пару слов об оригинальном установочном процессе. Официальная инструкция предлагает сделать следующее:
- Скачать и установить Git, после чего клонировать к себе репозиторий командой: git clone https://github.com/sczhou/ProPainter.git
- Скачать и установить Anaconda, запустить Anaconda Prompt, выполнить команды:
conda create -n propainter python=3.8 -y
conda activate propainter
pip3 install -r requirements. txt - Дополнительные требования:
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.