一键智能视频编辑与视频修复算法——ProPainter源码解析与部署

news2024/11/18 13:46:47

前言

视频编辑和修复确实是随着电子产品的普及变得越来越重要的技能。有许多视频编辑工具可以帮助人们轻松完成这些任务如:Adobe Premiere Pro,Final Cut Pro X,Davinci Resolve,HitFilm Express,它们都提供一些视频修复功能,但并不适合没有太多专业技术的用户。
至于视频目标移除、水印移除、掩码补全和视频外扩等高级功能,通常需要使用更专业的图像处理工具,如Adobe After Effects或Adobe Photoshop,这些工具需要一定的学习曲线。
ProPainter是由南洋理工大学的S-Lab团队开发的一款视频智能修复算法,ProPainter完成:视频目标移除、视频水印移除、视频掩码补全、视频外扩等多个实用功能!

一、算法解析

1.项目地址

项目主页:https://shangchenzhou.com/projects/ProPainter/
论文链接:https://arxiv.org/abs/2309.03897
代码链接:https://github.com/sczhou/ProPainter
官方的项目效果:

视频目标移除/视频水印移除/视频掩码补全

2.视频修复

视频修复是一项任务,旨在通过填补缺失区域或移除不需要的内容,来修复视频中的损坏或缺失部分。这个领域可以分为两个主要方向:对象移除和对象补全。

  • 对象移除(Object Removal):这是视频修复的一个重要方面,通常用于删除视频中的不需要的对象,如水印、不想显示的元素或干扰物体。传统方法可以使用纹理合成技术,而深度学习方法可以通过学习如何填充缺失区域来实现对象移除。
  • 对象补全(Object Inpainting):对象补全是填补视频中缺失区域的过程,通常用于修复受损的视频帧或恢复损坏的部分。这对于修复老电影、修复损坏的监控录像或处理不完整的视频流非常有用。

在视频修复中,有两种主要的算法方法:传统方法和深度学习方法。传统方法依赖于纹理合成技术,它们通过从周围的视频帧中复制纹理信息来填补缺失区域。另一方面是深度学习方法,深度学习方法已经在视频修复中取得了显著的进展。生成对抗网络(GANs)、变分自编码器(VAEs)和Transformer等神经网络架构已被广泛应用于视频修复任务。这些方法可以自动学习从输入视频中生成高质量修复结果的映射关系,使修复过程更加智能化。

3.算法简介

流传播和时空Transformer是视频修复任务中的两个主要机制。尽管它们在视频修复中非常有用,但仍然存在一些限制,这些限制对它们的性能产生了影响。传统的基于传播的方法通常在图像或特征域中执行,这可能导致由于不准确的光流而引起的空间不对齐问题。此外,内存和计算资源的限制可能会限制特征传播和视频Transformer的时间范围,从而阻止了对远程帧的对应信息的探索。

为了应对这些限制,ProPainter算法应运而生。该算法包括增强的流传播和高效的Transformer组件,以提高视频修复性能。ProPainter算法包括三个部件:

循环流完成(Cyclic Flow Completion):首先,ProPainter采用高效的循环流完成网络来修复损坏的光流场。这有助于处理光流信息的不准确性,确保在视频修复中有准确的流场信息可用。

双域传播(Bimodal Propagation):接下来,在图像和特征域中执行传播,并且这两个域是联合训练的。这一方法允许算法探索来自全局和局部时间框架的对应关系,从而提供更可靠和有效的传播。这种联合域的传播有助于更好地理解和修复视频中的内容。

掩模引导稀疏变压器(Mask-Guided Sparse Transformer):最后,ProPainter引入了掩模引导稀疏变压器块,以优化特征传播。这些块使用时空注意力来优化传播的特征,并采用仅考虑令牌子集的稀疏策略。这样做旨在提高算法的效率,减少内存消耗,同时保持高性能水平。

在这里插入图片描述
从论文中可以知道,这些图形描述了ProPainter算法的关键优点和性能,以下是对每张图的简要解释:

  • (a) 图展示了双域传播的优点,因为它具有全局性和可靠性,能够实现更有效的信息传播。这表明ProPainter算法在利用图像和特征域的联合传播方面具有优势。
  • (b) 图展示了掩码引导稀疏视频转换器如何通过丢弃不必要和冗余的窗口来提高算法的处理效率。这意味着ProPainter算法在资源利用方面更加高效。
  • © 图展示了ProPainter算法在PSNR指标上的高性能,同时还显示了较短的运行时间。这表明ProPainter能够在保持高质量修复的同时,加速修复过程。
  • (d-h) 图展示了ProPainter算法与其他方法(FuseFormer、FGT和E2FGVI)进行视觉比较的结果。这些比较显示,ProPainter在填充完整和丰富纹理方面表现出优势,证明了其在视频修复任务中的出色性能。

4.算法处理流程

在这里插入图片描述

从论文中,可以看到ProPainter算法的工作流程:

  1. 循环流补全网络:ProPainter首先使用高效的循环流补全网络来修复损坏的光流场。这有助于确保在视频修复中有准确的流场信息可用,以更好地理解视频帧之间的运动。
  2. 图像和特征域传播:接下来,ProPainter在图像和特征域中进行传播,这两个域是联合训练的。这一方法允许算法从全局和局部时间帧中探索对应关系,以实现更可靠和有效的信息传播。
  3. Encoder编码器和局部Feature Prop:通过将经过图像传播操作的输出图像送入Encoder编码器,ProPainter获取局部的Feature Prop。这有助于进一步处理和优化传播的特征。
  4. 掩码引导的稀疏Transformer块:最后,ProPainter使用掩码引导的稀疏Transformer块对传播的特征进行精细调整。这些块使用时空注意力来进行优化,并采用仅考虑特定子集的稀疏策略。这有助于提高算法的效率,减少内存消耗,同时保持高性能水平。

二、项目部署

1. 部署环境

我这里测试部署的系统win 10, cuda 11.8,cudnn 8.5,GPU是RTX 3060, 8G显存,使用conda创建虚拟环境。
官方给的环境配置:
CUDA >= 9.2
PyTorch >= 1.7.1
Torchvision >= 0.8.2

创建并激活一个虚拟环境:

conda create -n ProPainter python==3.8
activate ProPainter

下载项目:

git clone https://github.com/sczhou/ProPainter.git

为了避免Pytorch与GPU不兼容的问题,这里单独安装torch:

conda install pytorch2.0.0 torchvision0.15.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install -r requirements.txt

模型下载:
https://github.com/sczhou/ProPainter/releases/tag/v0.1.0
下载之后,放到项目里面:
在这里插入图片描述

2 . 目标移除

从官方给的测试,可以看到官方把视频拆分成一帧帧图像,加上要移除目标的mask图,格式如下:
在这里插入图片描述
在这里插入图片描述
单图如下:
在这里插入图片描述
在这里插入图片描述
这一步可以借助 ​Segment-and-Track Anything这个算法完成,然后执行测试代码:

python inference_propainter.py --video inputs/object_removal/bmx-trees --mask inputs/object_removal/bmx-trees_mask

如果图像太大了,内存爆炸,则要指定压缩大小:

python inference_propainter.py --video inputs/object_removal/bmx-trees --mask inputs/object_removal/bmx-trees_mask --height 240 --width 432

视频祛水印

分割出水印的位置的mask图像,这步可以使用 ​Segment Anything这个项目完成:
在这里插入图片描述
在这里插入图片描述

然后执行:

python inference_propainter.py --video inputs/video_completion/running_car.mp4 --mask inputs/video_completion/mask_square.png --height 240 --width 432

测试效果:

视频目标移动与祛水印

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的酒店客房管理系统

基于SpringBoot的酒店管理系统、酒店客房管理系统 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 首页 管理员界面 用户界面 代码展示 <temp…

LCR 170. 交易逆序对的总数(C语言+分治递归)

1. 题目 在股票交易中&#xff0c;如果前一天的股价高于后一天的股价&#xff0c;则可以认为存在一个「交易逆序对」。请设计一个程序&#xff0c;输入一段时间内的股票交易记录 record&#xff0c;返回其中存在的「交易逆序对」总数。 2. 输入输出样例 示例1 输入&#xff1…

[架构之路-225]:计算机体系结构 - 分类方法大汇总

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类&#xff1a;指令并行处理 四、根据指令集架构&#xff08;ISA&#xff09;分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 一、分类方…

macOS Sonoma 正式版系统已发布,要不要更新macos14系统

北京时间9月27日macOS Sonoma 正式版系统发布&#xff0c;为 Mac 带来一系列丰富新功能&#xff1a;优化小组件、升级视频会议、沉浸式游戏体验等&#xff0c;最新macos14值得更新吗&#xff1f;这里根据我一个月的试用beta版本体验来分享一下。 我使用的是M1芯片的MacBook air…

0基础学习VR全景平台篇 第101篇:企业版功能-子账号分配管理

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;企业版教程-子账号分配管理功能&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 子账号分配管理功能&#xff0c;主要用于企业版用户为自己服务的终…

python在字典中插入或增加一个字典

现在有字典dict_1 {}&#xff0c;字典dict_2 {name: Lihua, age: 19} &#xff0c;dict_3 {name: 小红, age: 18} 我们想将字典dict_2和字典dict_3加入到dict_1中&#xff0c;我们可以这么写 dict_2 {name: Lihua, age: 19} dict_3 {name: 小红, age: 18} dict_1 {}dict_…

Android导航抽屉

本文所有代码均位于https://github.com/MADMAX110/CatChat 之前使用过标签页布局可以让用户在应用中轻松地导航。 当只有为数不多地几个类别屏幕&#xff0c;而且它们都在应用层次结构地同一级上&#xff0c;标签页布局就很适用。 而抽屉导航可以实现更多选择&#xff0c;这是一…

【vue.js】路由使用与Node.js下载安装之环境配置

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《springMvc使用》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 1、路由 1.1什么是路由 1.2 案列实操 1.2.1 引入vue-router的js依赖 1.2.2 定义组…

常见的BOM对象

BOM是浏览器对象模型&#xff0c;提供了独立于内容与浏览器窗口进行交互的对象&#xff0c;其作用就是根浏览器做一些交互效果。 比如&#xff0c;如何进行页面的后退&#xff0c;前进&#xff0c;刷新&#xff0c;滚动条的滚动等等。 常见的BOM对象有 一. window BOM的核心…

如何离线安装和使用pymysql操作mysql数据库

一、应用背景 在企业内部网络要使用python操作mysql数据库。然而&#xff0c;python未自带访问MySQL数据库的函数库pymysql&#xff0c;需要另外安装。网上有很多安装pymysql都需要互联网支持。本文主要阐述如何离线安装pymysql,并简要介绍pymysql如何进行mysql操作。 pymysq…

nodejs+vue中国非物质文化遗产网站设计与实现elementui

前端页面&#xff1a; 导航栏借鉴下面的 1首页&#xff1a;带有一个全屏轮播图和其他的内容 2咨询页&#xff1a;有关中国非物质文化遗产的一些新闻咨询网站对于记录非遗这种无形的、动态的文化资源有着其他技术无可替代的优势。用户可以在该网站浏览、了解和学习非遗文化&…

Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

如题&#xff1a;UI在game视图显示没有问题&#xff0c; 在Play状态下&#xff0c;在Sence视图查看UI对象的时候进行放大操作&#xff0c;然后UI就不显示了或者显示不全&#xff0c;缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机…

河北吉力宝以步力宝健康鞋引发的全新生活生态商

在当今瞬息万变的商业世界中&#xff0c;成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业&#xff0c;通过打造一双步力宝健康鞋&#xff0c;他们以功能性智能科技穿戴品为核心&#xff0c;成功创造了一种结合智能康养与时尚潮流的独特产品…

IDEA运行第一个Java简单程序(新建项目到运行类)

目录 前言 一、准备工作 JDK下载安装 1.IDEA下载安装 二、IDEA建立项目 &#xff08;一&#xff09;新建项目&#xff08;银河系&#xff09; &#xff08;二&#xff09;新建模块&#xff08;地球&#xff09; &#xff08;三&#xff09;新建包&#xff08;国家&#…

【JVM】内存分区

内存分区 一. JVM 执行流程二. JVM 运行时数据区1. 堆&#xff08;线程共享&#xff09;2. Java虚拟机栈&#xff08;线程私有&#xff09;3. 本地方法栈&#xff08;线程私有&#xff09;4. 程序计数器&#xff08;线程私有&#xff09;5. 方法区&#xff08;线程共享&#xf…

Unity:2D游戏设置相机orthographicSize

目录 根据设备分辨率动态设置相机 orthographicSize 根据设备分辨率动态设置相机 orthographicSize 2d游戏里面相机的Orthan.size确定的是高度&#xff0c;宽度是按照屏幕的宽高比计算出来的cameraWidthSize camera.Orthographic.size*(Screen.Width/Screen.height)我在游戏…

内网穿透--cpolar

工具介绍 cpolar是一种安全的内网穿透云服务&#xff0c;它将内网下的本地服务器通过安全隧道暴露至公网。使得公网用户可以正常访问内网服务。 下载位置 cpolar官网&#xff1a;cpolar - 安全的内网穿透工具 创建隧道映射 cpolar安装成功后&#xff0c;双击打开cpolar web u…

一文教你如何配置路由策略

【微|信|公|众|号&#xff1a;厦门微思网络】 微思-课程介绍 组网需求 如图1所示&#xff0c;某公司的部门A和部门B相距较远&#xff0c;Router_1和Router_6分别作为这两个部门的出口设备&#xff0c;AS 100内部使用OSPF作为IGP。现要求&#xff1a; 通过部署BGP&#xff0c;使…

实验三--贪心算法的设计与分析

某不知名学校算法课第三次实验报告 题目来自力扣 这次实验是贪心算法 贪心的思维很跳跃&#xff0c;每道题也没有固定的模板的思考方向 跳跃游戏 题目描述&#xff1a; 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳…

PHP 电竞网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 电竞网站系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php电竞网站系统 代码 https://download.csdn.net/download/qq_41221322/88377255 论文 h…