当前位置: 首页 > news >正文

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

前言

视频编辑和修复确实是随着电子产品的普及变得越来越重要的技能。有许多视频编辑工具可以帮助人们轻松完成这些任务如: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
官方的项目效果:

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

如果项目git或者模型下载不下来,可以使用csdn上传好的资源:https://download.csdn.net/download/matt45m/88385370

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.8activate ProPainter

下载项目:

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

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

conda install pytorch==2.0.0  torchvision==0.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这个算法完成,关于Segment-and-Track Anything的使用与环境部署可以看我之前的博客,Segment-and-Track Anything转出的的图像是不是黑白mask图像,可以用以下代码进行转换:

然后把mask变成黑和白两种

import os
import numpy as np
import cv2
from glob import glob
from tqdm import tqdmroot_dir = 'xxx/xxxx/data/'
name = 'tao'msk_folder = f'{root_dir}/{name}/{name}_masks'
img_folder = f'{root_dir}/{name}/{name}'
frg_mask_folder = f'{root_dir}/{name}/{name}_masks_0'
bkg_mask_folder = f'{root_dir}/{name}/{name}_masks_1'
os.makedirs(frg_mask_folder, exist_ok=True)
os.makedirs(bkg_mask_folder, exist_ok=True)files = glob(msk_folder + '/*.png')
num = len(files)for i in tqdm(range(num)):file_n = os.path.basename(files[i])mask = cv2.imread(os.path.join(msk_folder, file_n), 0)mask[mask > 0] = 1cv2.imwrite(os.path.join(frg_mask_folder, file_n), mask * 255)bg_mask = mask.copy()bg_mask[bg_mask == 0] = 127bg_mask[bg_mask == 255] = 0bg_mask[bg_mask == 127] = 255cv2.imwrite(os.path.join(bkg_mask_folder, file_n), bg_mask)

然后执行测试代码:

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

3.视频祛水印

分割出水印的位置的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

测试效果:

视频目标移动与祛水印

相关文章:

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

前言 视频编辑和修复确实是随着电子产品的普及变得越来越重要的技能。有许多视频编辑工具可以帮助人们轻松完成这些任务如:Adobe Premiere Pro,Final Cut Pro X,Davinci Resolve,HitFilm Express,它们都提供一些视频修…...

Flutter开发环境的配置

2023-10最新版本 flutter SDK版本下载地址 https://flutter.cn/docs/development/tools/sdk/releases gradle各版本快速下载地址 https://blog.csdn.net/ii950606/article/details/109105402 JAVA SDK下载地址 https://www.oracle.com/java/technologies/downloads/#java…...

【超详细】Wireshark教程----Wireshark 分析ICMP报文数据试验

一,试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机(虚拟机) kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置: 编辑-------- 虚拟网路编辑器 更改设置进来以后 ,先选择N…...

Linux命令(92)之rm

linux命令之rm 1.rm介绍 linux命令rm是用来删除一个或多个文件/目录,由于其删除的不可逆性,建议在日常工作中一定要慎用 2.rm用法 rm [参数] 文件/目录 rm常用参数 参数说明-r递归删除文件或目录-f不提示强制删除-i删除文件或目录前进行确认-v详细显…...

Mysql主从复制数据架构全面解读

大家好,我是山子,今天给大家分析Mysql 实现主从复制的方方面面,主从复制当然也是我们做读写分离的前提,以下内容是从各网络平台摘录整理总结归纳在一起的;内容已经从主从复制的各方面的维度进行了阐述;非常…...

ios证书类型及其作用说明

ios证书类型及其作用说明 很多刚开始接触iOS证书的开发者可能不是很了解iOS证书的类型功能和概念。下面对iOS证书的几个方面进行介绍。 apple开发账号分类: 免费账号: 无需支付费用给apple,使用个人信息注册的账号 可以开发测试安装&…...

警告-Ubuntu提示W: Possible missing firmware xxx解决方法

目录 现象原因解决方法 现象 当执行 sudo apt-get update或者sudo apt-get dist-upgrade时,有如下警告: W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169 W: Possible missing firmware /lib/firmware/rtl_nic/rt…...

有时候,使用 clang -g test.c 编译出可执行文件后,发现 gdb a.out 进行调试无法读取符号信息,为什么?

经过测试,gdb 并不是和所有版本的 llvm/clang 都兼容的 当 gdb 版本为 9.2 时,能支持 9.0.1-12 版本的 clang,但无法支持 16.0.6 版本的 clang 可以尝试使用 LLVM 专用的调试器 lldb 我尝试使用了 16.0.6 版本的 lldb 调试 16.0.6 的 clan…...

UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow 效果: 代码: #include "me.hpp" #include <NXOpen/ListingWindow.hxx> #include <…...

macbook电脑磁盘满了怎么删东西?

macbook是苹果公司的一款高性能笔记本电脑&#xff0c;受到很多用户的喜爱。但是&#xff0c;如果macbook的磁盘空间不足&#xff0c;可能会导致一些问题&#xff0c;比如无法开机、运行缓慢、应用崩溃等。那么&#xff0c;macbook磁盘满了无法开机怎么办&#xff0c;macbook磁…...

解释 RESTful API,以及如何使用它构建 web 应用程序

RESTful API是一种基于HTTP协议&#xff0c;使用REST架构风格设计的API。其核心思想是将所有的Web应用程序资源抽象为一组资源集合&#xff0c;并通过HTTP协议中的GET、POST、PUT、DELETE等几个方法对这些资源进行操作&#xff0c;使得Web应用程序能够方便地、高效地进行管理和…...

qml使用c++自定义listmodel数据

qml要使用c中自定义的model&#xff0c;首先该model类需要继承QAbstractListModel类&#xff0c;然后需要重写其中的三个函数&#xff0c;分别是 int rowCount(const QModelIndex &parent); QVariant data(const QModelIndex &index, int role Qt::DisplayRole); QHas…...

cf 解题报告 01

E. Power of Points Problem - 1857E - Codeforces 题意&#xff1a; 给你 n n n 个点&#xff0c;其整数坐标为 x 1 , … x n x_1,\dots x_n x1​,…xn​&#xff0c;它们位于一条数线上。 对于某个整数 s s s&#xff0c;我们构建线段[ s , x 1 s,x_1 s,x1​], [ s , x…...

傅里叶系列 P1 的定价选项

如果您想了解更多信息&#xff0c;请查看第 2 部分和第 3 部分。 一、说明 这是第一篇文章&#xff0c;我将帮助您获得如何使用这个新的强大工具来解决金融中的半分析问题并取代您的蒙特卡洛方法的直觉。 我们都知道并喜欢蒙特卡洛数字积分方法&#xff0c;但是如果我告诉你你可…...

第二十届北京消防展即将开启,汉威科技即将精彩亮相

10月10日~13日&#xff0c;第二十届中国国际消防设备技术交流展览会&#xff0c;将在北京市顺义区中国国际展览中心新馆隆重举行。该展会由中国消防协会举办&#xff0c;是世界三大消防品牌展会之一&#xff0c;本届主题为“助力产业发展&#xff0c;服务消防救援”。届时将有4…...

mongodb、mysql、redis 区别

MongoDB、MySQL 和 Redis 是三种不同的数据库管理系统,它们在数据存储、访问模型和使用场景方面有一些显著的区别。 1. 数据存储模型: MongoDB:MongoDB 是一种文档数据库,它使用 BSON(Binary JSON)格式来存储数据。数据以文档的形式组织,每个文档可以有不同的字段,文档…...

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值

【Flutter】Flutter Web 开发 如何从 URL 中获取参数值 文章目录 一、前言二、Flutter Web 中的 URL 处理三、如何从 URL 中获取参数四、实际业务中的用法五、完整示例六、总结 一、前言 大家好&#xff01;我是小雨青年&#xff0c;今天我想和大家分享一下在 Flutter Web 开发…...

【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口

在Java应用程序中&#xff0c;与数据库进行交互是一项常见的任务。为了执行数据库操作&#xff0c;我们需要使用JDBC&#xff08;Java Database Connectivity&#xff09;来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口&#xff0c;它用于执行SQL语句…...

Python与数据分析--Pandas操作进阶

目录 1.文件读取方式 1.1.绝对路径读取文件 1.2.相对路径读取文件 2.列表数据操作 2.1.列索引指定 2.2.代码数据对齐 3.创建新CSV文件 4.缺失值处理 4.1.缺失值创建 4.2.缺失值检索 4.3.缺失值查询 4.3.1.isnull()函数判断 4.3.2.notnull()函数判断 4.3.3.any()函数…...

国庆小练习

一、二、三 一、 创建一个双向链表&#xff0c; 将26个英文字母通过头插的方式插入到链表中 通过尾删的方式将数据读取出来并删除。main.c #include <my_head.h> #include "dblink.h"int main(int argc, const char *argv[]) {dblink *h create_head();for…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...