【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读

news2024/11/27 0:22:26

视频matting
时序监督
在这里插入图片描述

摘要

我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法,该方法取得了新的最先进性能。我们的方法比以前的方法轻得多,可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K,以104 FPS处理HD。与大多数现有的逐帧作为独立图像进行视频抠图的方法不同,我们的方法使用循环架构来利用视频中的时间信息,并在时间一致性和抠图质量方面取得了显著改进。此外,我们提出了一种新的训练策略,强制我们的网络同时满足抠图和分割目标。这显著提高了我们模型的稳健性。我们的方法不需要任何辅助输入,如trimap或预捕获的背景图像,因此可以广泛应用于现有的人类抠图应用程序

1. 简介

尽管大多数现有的方法[18, 22, 34]是为视频应用设计的,但它们将单个帧作为独立的图像进行处理。这些方法忽略了视频中最广泛可用的特征:时间信息。时间信息可以出于许多原因改善视频抠图性能。首先,它允许预测更一致的结果,因为模型可以看到多个帧和它自己的预测。这显著减少了闪烁并提高了感知质量。其次,时间信息可以提高抠图的稳健性。在个别帧可能模糊不清的情况下,例如前景颜色变得与背景中经过的物体相似,模型可以通过参考前面的帧更好地猜测边界。第三,时间信息允许模型随着时间了解更多关于背景的信息。当摄像机移动时,由于透视变化,主体后面的背景被揭示出来。即使摄像机固定不动,被遮挡的背景仍然经常由于主体的运动而显露出来。更好地了解背景简化了抠图任务。因此,我们提出了一种循环架构来利用时间信息。我们的方法显著提高了抠图质量和时间一致性。它可以应用于所有视频,而不需要任何辅助输入,如手动注释的trimap或预捕获的背景图像

大多数现有的方法都是在合成抠图数据集上进行训练的。样本通常看起来很假,阻止网络推广到真实图像。以前的工作[18, 22]曾试图用分割任务上训练的权重初始化模型,但模型在抠图训练期间仍然过度拟合到合成分布。其他人曾尝试在未标记的真实图像上进行对抗性训练[34]或半监督学习[18]作为额外的适应步骤。我们认为人类抠图任务与人类分割任务密切相关。同时进行分割目标的训练可以有效地调节我们的模型,而无需额外的适应步骤。

2. 网络结构

在这里插入图片描述
encoder
采用MobileNetV3-Large [15]作为我们高效的骨干网络,后面跟着MobileNetV3为语义分割任务提出的LR-ASPP模块。值得注意的是,MobileNetV3的最后一个块使用了扩张卷积而没有下采样步幅。编码器模块在单个帧上运行,并在1/2、1/4、1/8和1/16的尺度上提取特征,供循环解码器使用。

循环解码器
使用循环架构而不是注意力或简单地将多帧作为额外的输入通道进行前馈,原因有几个。循环机制可以在连续的视频流中自行学习保留和忘记哪些信息,而其他两种方法必须依靠固定的规则在每个间隔中删除旧信息并插入新信息到有限的内存池中。能够自适应地保留长期和短期时间信息的能力使循环机制更适合我们的任务。

我们的解码器在多个尺度上采用ConvGRU来聚合时间信息。我们选择ConvGRU是因为它比ConvLSTM更节省参数,因为它有更少的门。形式上,ConvGRU定义如下:
在这里插入图片描述
发现通过拆分和连接将ConvGRU应用于一半的通道是有效且高效的。这种设计有助于ConvGRU专注于聚合时间信息,而另一个拆分分支则将当前帧的空间特征向前传递。所有卷积都使用3×3内核,除了最后一个投影使用1×1内核。

DGF模块
我们采用[44]中提出的深度引导滤波器(DGF)进行高分辨率预测。当处理高分辨率视频时,我们会先将输入帧下采样,然后再通过编码器-解码器网络。然后,低分辨率的alpha、前景、最终隐藏特征以及高分辨率的输入帧被提供给DGF模块,以产生高分辨率的alpha和前景。整个网络进行端到端训练。

3. 训练

我们提出同时使用抠图和语义分割目标来训练我们的网络

数据集
视频包括各种运动,如汽车经过、树叶摇晃和摄像机移动。我们选择3118个不包含人类的剪辑,并从每个剪辑中提取前100帧。我们还按照[22]的方法爬取了8000张图像背景。这些图像有更多的室内场景,如办公室和客厅。我们在前景和背景上都应用运动和时间增强来增加数据多样性。运动增强包括仿射平移、缩放、旋转、剪切、亮度、饱和度、对比度、色调、噪声和模糊,这些变化会随着时间连续变化。运动采用不同的缓冲函数应用,使变化不总是线性的。增强还向图像数据集添加人工运动。此外,我们还在视频上应用时间增强,包括剪辑反转、速度变化、随机暂停和帧跳过。其他离散增强,如水平翻转、灰度和锐化,则始终应用于所有帧。

训练
我们的抠图训练分为四个阶段。它们旨在让我们的网络逐渐看到更长的序列和更高的分辨率,以节省训练时间。我们使用Adam优化器进行训练。所有阶段都使用批量大小B = 4,分布在4个Nvidia V100 32G GPU上。

stage1:
在VM上以低分辨率训练15个epoch,不使用DGF模块。我们设置一个短序列长度T = 15帧,以便网络能够更快地更新。MobileNetV3骨架使用预训练的ImageNet [32]权重初始化,并使用1e-4的学习率,而网络的其余部分使用2e-4。我们独立地在256和512像素之间采样输入分辨率的高度和宽度h,w。这使我们的网络对不同的分辨率和纵横比具有鲁棒性。

stage2:
将T = 50

stage3:
我们附加DGF模块并在VM上使用高分辨率样本训练1个epoch。由于高分辨率会消耗更多的GPU内存,序列长度必须设置得非常短。为了避免我们的循环网络过拟合到非常短的序列,我们在低分辨率长序列和高分辨率短序列上同时训练我们的网络。具体来说,低分辨率通道不使用DGF,T = 40,h,w∼(256,512)。高分辨率通道包含低分辨率通道,并使用下采样因子s = 0.25的DGF,Tˆ = 6和hˆ,wˆ∼(1024,2048)。我们将DGF的学习速率设置为2e-4,网络的其余部分设置为1e-5。

分割部分:
我们的分割训练在每次抠图训练迭代之间交错进行。我们在每个奇数迭代后对图像分割数据进行网络训练,在每个偶数迭代后对视频分割数据进行网络训练。分割训练应用于所有阶段。对于视频分割数据,我们使用与每个抠图阶段相同的B,T,h,w设置。对于图像分割数据,我们将它们视为仅包含1帧的视频序列,因此T0 = 1。这为我们提供了空间来应用更大的批量大小B0 = B×T。

4. 实验结果

与其他方法的比较
在这里插入图片描述
在真实场景
在图3a中,我们比较了所有方法的alpha预测,并发现我们的方法能更准确地预测细微的细节,如头发丝。在图3b中,我们对随机的YouTube视频进行实验。由于这些视频没有预先捕获的背景,我们从比较中删除了BGMv2。我们发现我们的方法对语义错误更具鲁棒性。在图3c和3d中,我们进一步比较了MODNet在手机和网络摄像头视频上的实时抠图。我们的方法能比MODNet更好地处理快速移动的身体部位。
在这里插入图片描述

参数和速度
在这里插入图片描述
CONVGRU的作用
所有VM测试剪辑的平均alpha MAD指标随时间的变化。我们的模型在前15帧中的误差显著下降,然后指标保持稳定。即使使用邻帧平滑技巧,MODNet的指标也有很大波动。
在这里插入图片描述
语义分割的作用

表5显示,当在仅包含人类和仅在人类类别上的COCO验证图像子集上进行评估时,我们的方法与语义分割方法一样鲁棒。我们的方法达到了61.50 mIOU,这在MobileNetV3和DeepLabV3在COCO上训练的性能之间是合理的,考虑到模型大小的差异。我们还尝试通过将α>0.5阈值化为二进制掩码来评估我们的alpha输出的鲁棒性,而我们的方法仍然达到了60.88 mIOU,表明alpha预测也是鲁棒的。

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

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

相关文章

118.【微信小程序 - 02】

微信小程序-02 (六)、小程序基础加强1.自定义组件-组件的创建与引用(1).创建自定义组件(2).引用组件(全局和局部)(3).局部引用组件(4).全局引用组件(5).全局引用和局部引用的建议(6).组件和页面的区别 2.自定义组件-样式(1).组件样式隔离(2).组件样式隔离的注意点(3).修改组键的…

【2023】Redis哨兵模式集群

目录 🎶 哨兵模式🎶 搭建哨兵模式集群🎶 搭建一主二从复制集群🎶 创建哨兵节点 🎶 哨兵节点的其他配置🎶 哨兵模式下故障自动恢复效果🎶 通过日志查看故障恢复过程 🎶 哨兵模式 一般…

华为OD机试真题 Java 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…

Zinx框架学习 - 多路由实现

Zinx - V0.6 多路由实现 之前在已经给Zinx配置了路由模式&#xff0c;但是之前的Zinx只能绑定一个路由的处理业务方法显然这是无法满足基本的服务器需求&#xff0c;需要给Zinx添加多路由的方案查看之前的Server定义&#xff0c;路由Router只有一个&#xff0c;当我们想要再添…

七个很好的 Python 工具,让你的生活更轻松

有一句谚语“你不必重新发明轮子”。工具就是最好的例子。它可以帮助您以简单的方式实现复杂且耗时的功能。在我看来&#xff0c;为了提高生产力和效率&#xff0c;我们需要使用一些可用的最佳工具。在这里&#xff0c;我整理了 7 个工具&#xff0c;可以帮助您完成开发之旅。 …

【网络】TCP通讯(三次握手、四次挥手;滑动窗口;TCP状态转换;端口复用;TCP心跳检测机制)

前言&#xff1a;建议看着图片&#xff0c;根据文字描述走一遍TCP通讯过程&#xff0c;加深理解。 目录 TCP通信时序&#xff1a; 1&#xff09;建立连接&#xff08;三次握手&#xff09;的过程&#xff1a; 2&#xff09;数据传输的过程&#xff1a; 3&#xff09;关闭连…

java的IP组播

文章目录 1. 简介2. 组播地址和组3. 客户端和服务器4. 路由器和路由5. 使用组播Socket6. 构造函数7. 与组播组通信8. 案例实战 1. 简介 前面介绍的Socket都是单播Socket&#xff0c;它们提供点对点的通信。单播Socket在两个明确的端点之间创建一个连接&#xff0c;有一个发送方…

LNMP平台搭建

文章目录 安装 Nginx 服务安装 MySQL 服务安装配置 PHP 解析环境 安装 Nginx 服务 systemctl stop firewalld systemctl disable firewalld setenforce 0安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make创建运行用户 useradd -M -s /sbin/nologin nginx编译…

ArduPilot之H743+BMI270x2+First Normal Takeoff

ArduPilot之H743BMI270x2First Normal Takeoff 1. 源由2. 正常起飞3. 问题汇总3.1 机架构型3.2 IMU对齐3.3 接收机3.4 GPS3.5 VTX3.6 电调3.7 PID 4. 总结5. 参考资料6. 附录6.1 补充AcroTrainer视频6.2 补充Acro视频 1. 源由 鉴于目前该飞控板子在ArduPilot开源社区尚未得到官…

Photoshop 批量照片转格式

Photoshop 批量照片转格式 文章目录 Photoshop 批量照片转格式前言一、打开Photoshop软件二、打开图像处理器三、参数设置四、运行 前言 在工作和学习中&#xff0c;我们可能会遇到需要处理多张图片、更改多张图片格式的情况&#xff0c;如果一张一张的进行处理是很麻烦浪费时…

一步一步从功能测试到测试开发,我这一路的坎坷谁能懂?

读者提问&#xff1a; 测试开发工程师到底是测试&#xff0c;还是开发 &#xff1f; 鱼鱼回答&#xff1a; 既是测试&#xff0c;也是开发。 首先&#xff0c;测试开发是测试工程师&#xff0c;他们是服务于业务测试同学的&#xff0c;目标是解决业务测试工程师的具体问题。…

基于flask的web应用开发——接受post请求

目录 0. 前言1. 了解post方法2. 在flask中实现3. 具体讲解 0. 前言 操作系统&#xff1a;Windows10 家庭版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Python解释器版本&#xff1a;Python3.8 第三方库&#xff1a;flask 1. 了解post方法 POST是HTTP协议定义的一种请…

尚硅谷JUC极速版笔记

尚硅谷JUC极速版笔记 1、JUC概述1.1 进程和线程1.2 线程的状态&#xff08;6个&#xff09;1.3 wait和sleep1.4 并发与并行1.5 管程&#xff08;锁&#xff09;1.6 用户线程和守护线程 2、Lock接口2.1 复习synchronized&#xff08;java内置同步锁&#xff09;2.2 什么是Lock接…

03使用IDEA快速开发一个WEB应用的具体流程

使用集成开发环境实现web开发 集成开发工具很多&#xff0c;其中目前使用比较多的是IntelliJ IDEA和Eclipse IntelliJ IDEA(居多): JetBrain公司开发的收费软件, IDEA在提示功能方面要强于Eclipse使用起来更加智能更好用Eclipse(较少):Eclipse是IBM团队开发的, Eclipse寓意是…

ChatGPT 国内镜像网站独家汇总:发现最优秀的人工智能对话体验!

欢迎来到我们的 ChatGPT 镜像网站汇总博客&#xff01;在这个令人激动的人工智能时代&#xff0c;ChatGPT 作为一款顶尖的语言模型&#xff0c;已经引起了全球范围内的热议。但是&#xff0c;您是否曾经为了找到最佳的 ChatGPT 使用体验而苦苦搜寻&#xff1f;别担心&#xff0…

电商业务逻辑总结

一、后台模块:商品管理 1. 基本概念 ① spu: 标准化产品单元 不是一件具体的商品 eg iphone14 ② sku: 库存量单元 指的就是一件具体的商品 eg iphone14 128G 蓝色 ③ 销售属性 出现了商品详情页右侧的商品属性信息 ④ 平台属性 出现了商品详情页下…

vue 实现微信扫码登录的方法

一、准备工作&#xff1a; 1.微信公众号&#xff0c;扫码登录 2.域名&#xff0c;也就是域名解析&#xff08;public_domain&#xff09; 3.微信登录验证 4.配置微信扫码登录页面的代码&#xff0c;有了上面的准备工作&#xff0c;下面就可以开始编码了。 二、开发环境&#xf…

pinia的用法,一篇文章教你搞懂vuex的继任者pinia

一&#xff1a;pinia是什么&#xff1f; Pinia 是一个轻量级的、易于使用的 Vue.js 状态管理库。它是 Vuex 的一个替代方案&#xff0c;专为 Vue 3 设计&#xff0c;提供了更简单的 API 和更好的 TypeScript 支持。在你提供的代码中&#xff0c;Pinia 被用于管理应用程序的状态…

VAO、VBO、EBO简介

1.顶点缓冲对象(Vertex Buffer Objects, VBO) 顶点缓冲对象&#xff08;VBO&#xff09;的作用就是管理这个在GPU上创建的显存。使用这些缓冲对象的好处是我们可以一次性的发送一大批数据到显卡上&#xff0c;而不是每个顶点发送一次。从CPU把数据发送到显卡相对较慢&#xff…

java.security.MessageDigest的用法

java.security.MessageDigest MessageDigest的含义 message含义是:消息,信息 digest的含义是 digest 必应词典 n.摘要&#xff1b;文摘&#xff1b;概要&#xff1b;汇编 v.消化&#xff1b;领会&#xff1b;领悟&#xff1b;理解 海词 n. 摘要 vt. 消化&#xff1b;理解 vi…