海口建设局网站,网页版ps,网站建设群标签好写什么,免费搭建网站 域名前言
视频编辑和修复确实是随着电子产品的普及变得越来越重要的技能。有许多视频编辑工具可以帮助人们轻松完成这些任务如#xff1a;Adobe Premiere Pro#xff0c;Final Cut Pro X#xff0c;Davinci Resolve#xff0c;HitFilm Express#xff0c;它们都提供一些视频修…前言
视频编辑和修复确实是随着电子产品的普及变得越来越重要的技能。有许多视频编辑工具可以帮助人们轻松完成这些任务如Adobe Premiere ProFinal Cut Pro XDavinci ResolveHitFilm 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算法的工作流程
循环流补全网络ProPainter首先使用高效的循环流补全网络来修复损坏的光流场。这有助于确保在视频修复中有准确的流场信息可用以更好地理解视频帧之间的运动。图像和特征域传播接下来ProPainter在图像和特征域中进行传播这两个域是联合训练的。这一方法允许算法从全局和局部时间帧中探索对应关系以实现更可靠和有效的信息传播。Encoder编码器和局部Feature Prop通过将经过图像传播操作的输出图像送入Encoder编码器ProPainter获取局部的Feature Prop。这有助于进一步处理和优化传播的特征。掩码引导的稀疏Transformer块最后ProPainter使用掩码引导的稀疏Transformer块对传播的特征进行精细调整。这些块使用时空注意力来进行优化并采用仅考虑特定子集的稀疏策略。这有助于提高算法的效率减少内存消耗同时保持高性能水平。
二、项目部署
1. 部署环境
我这里测试部署的系统win 10, cuda 11.8cudnn 8.5,GPU是RTX 3060, 8G显存使用conda创建虚拟环境。 官方给的环境配置 CUDA 9.2 PyTorch 1.7.1 Torchvision 0.8.2
创建并激活一个虚拟环境
conda create -n ProPainter python3.8activate ProPainter下载项目 git clone https://github.com/sczhou/ProPainter.git 为了避免Pytorch与GPU不兼容的问题这里单独安装torch:
conda install pytorch2.0.0 torchvision0.15.0 torchaudio2.0.0 pytorch-cuda11.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 taomsk_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_okTrue)
os.makedirs(bkg_mask_folder, exist_okTrue)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 测试效果 视频目标移动与祛水印