ICCV 2023 | MPI-Flow:从单视角构建的多平面图像中学习光流

news2024/11/17 15:40:05

ICCV 2023 | MPI-Flow:从单视角构建的多平面图像中学习光流

  • 引言:
  • 主要贡献:
  • Motivation:
  • 算法细节:
    • Optical Flow Data Generation
    • Independent Object Motions
    • Depth-Aware Inpainting
  • 实验结果:

来源:ICCV 2023
作者:Yingping Liang 等
机构:北京理工大学
论文题目:MPI-Flow: Learning Realistic Optical Flow with Multiplane Images

论文链接:https://arxiv.org/abs/2309.06714

开源代码:https://github.com/Sharpiless/MPI-Flow

引言:

基于学习的光流估计模型的准确性在很大程度上依赖于训练数据集的真实性。目前,生成这类数据集的方法要么使用合成数据,要么以有限的真实性生成图像。然而,这些数据与真实世界场景的领域差距,限制了训练模型的泛化到真实世界的应用。
FlyingThings3D 数据集

主要贡献:

为了解决这个问题,本文研究从真实世界的图像中生成真实的光流数据集:

  • 首先,为了生成高度逼真的新图像,本文从单视图图像中构建了一个分层深度表示法,称为多平面图像(MPI)。这使得我们能够生成高度逼真的新视角图像。为了生成与新图像准确对应的光流图,本文使用相机矩阵和平面深度来计算每个平面的光流。然后,本文将这些分层的光流投影到具有体积渲染的输出光流图中。
  • 其次,为了保证运动的真实性,本文提出了一个独立的物体运动模块,可以在MPI中分离摄像机和动态物体运动。该模块解决了基于mpi的单视图方法的缺陷,其中光流仅由摄像机的运动产生,而不考虑任何物体的运动。
  • 此外,本文还设计了一个深度感知的内部绘制模块来合并新的图像与动态对象,并解决非自然的运动遮挡。

通过在真实数据集上的大量实验,本文展示了提出的方法的优越性能。此外,提出的方法在基于学习的模型的无监督和监督训练中都取得了最先进的性能。

Motivation:

在这里插入图片描述

近年来,随着神经网络的快速发展,与传统的基于模型的算法相比,基于学习的算法取得了重大进展。传统的实践主要依赖于合成数据,其中,合成数据包含精确的光流标签和动画图像。然而,合成数据和真实数据之间的领域差距阻碍了它在现实应用中的进一步改进。

最近的研究旨在是利用手工制作的特殊硬件,从真实数据中提取光流。然而,严格控制和低效的收集程序限制了它们的适用性。为了解决这个问题,Depthstillation [1] 和 RealFlow [12] 被提出,利用随机运动将真实图像中的每个像素投影到新的视图帧上,并通过虚拟摄像机合成光流。尽管如此,这两种方法都受到了缺乏图像真实性的限制,导致了诸如碰撞、孔洞和伪影等问题。这些限制限制了基于学习的光流模型的实际性能。

在这里插入图片描述

为了实现更高的图像真实感,本文将注意力转向使用单视图多平面图像(MPI)。这系列工作展示了显著的单视图图像渲染能力,并有效地减少了以前方法中常见的碰撞、孔和伪影。这些进步有助于提高更高的图像真实感,引发了一个自然的问题:高真实度的MPI方法能否用于生成用于训练目的的高质量光流数据集?

为此,本文提出了MPI-Flow,旨在从真实世界的图像中生成具有真实感的光流数据集。具体来说,本文首先回顾了 MPI 的图像合成管道,并设计了一个伴随图像合成的光流生成管道:MPI-Flow。在这一步中,本文通过将预测的颜色和密度扭曲到每个分层平面上来构建一个 MPI。然后,颜色和密度被映射到一个真实的新图像通过体积渲染。利用分层平面,本文从渲染图像和真实图像中提取具有虚拟摄像机运动的光流。

其次,由于MPI只能应用于静态场景,产生有限的运动真实性,本文提出了一个独立的物体运动模块和一个深度感知绘画模块来解决这个问题。独立对象运动模块将动态对象与静态场景解耦,并应用不同的虚拟摄像机矩阵来计算动态和静态部分的运动。最后引入一种深度感知的图像修复模块,来消除合成新图像中的对象遮挡。

算法细节:

在这里插入图片描述
本文提出的 MPI-Flow 框架采用单视图图像作为输入,并通过估计深度来构建MPI,其中每个平面的RGB和密度由神经网络预测,每个平面的光流由摄像机矩阵计算。新视图和光流图都是通过体渲染来渲染的,并由带有新视图对象掩模的独立对象运动模块来分隔。新图像通过深度感知的图像合并。

Optical Flow Data Generation

为了在目标新视角下渲染真实的图像,我们以可区分的方式从原视角的 MPI 进行像素扭曲。具体来说,我们使用神经网络预测在源视角下使用颜色通道、密度通道和深度( c n , σ n , d n \mathbf{c}_n, \boldsymbol{\sigma}_n, \mathbf{d}_n cn,σn,dn):

{ ( c n , σ n , d n ) } n = 1 N = F ( I s , D s ) \left\{\left(\mathbf{c}_n, \boldsymbol{\sigma}_n, \mathbf{d}_n\right)\right\}_{n=1}^N=\mathcal{F}\left(\mathbf{I}_s, \mathbf{D}_s\right) {(cn,σn,dn)}n=1N=F(Is,Ds)

其中 I s \mathbf{I}_s Is D s \mathbf{D}_s Ds 分别是原始视角 s s s 下的图像和深度, N N N 是一个预定义的参数,表示 MPI 中的平面数量。

因此,新视角下图像平面上的每个像素 ( x t , y t ) (x_t, y_t) (xt,yt) 都可以通过同源函数[映射到第 n n n 个源 MPI 平面上的像素 ( x s , y s ) (x_s, y_s) (xs,ys)

[ x s , y s , 1 ] T ∼ K ( R − t n T d n ) K − 1 [ x t , y t , 1 ] T \left[x_s, y_s, 1\right]^T \sim \mathbf{K}\left(\mathbf{R}-\frac{\mathbf{t n}^T}{\mathbf{d}_n}\right) \mathbf{K}^{-1}\left[x_t, y_t, 1\right]^T [xs,ys,1]TK(RdntnT)K1[xt,yt,1]T

其中, R \mathbf{R} R t \mathbf{t} t 为从源视角到目标视角的旋转和平移矩阵, K K K 为相机固有内参, n = [ 0 , 0 , 1 ] \mathbf{n} = [0,0,1] n=[0,0,1] 为法向量。因此,每个新平面的颜色和密度可以通过双线性采样得到。然后我们使用新平面和通过场景的任意光线之间的离散交点来估计积分:

I t = ∑ n = 1 N ( c n ′ α n ′ ∏ m = 1 n − 1 ( 1 − α m ′ ) ) \mathbf{I}_t=\sum_{n=1}^N\left(\mathbf{c}_n^{\prime} \boldsymbol{\alpha}_n^{\prime} \prod_{m=1}^{n-1}\left(1-\boldsymbol{\alpha}_m^{\prime}\right)\right) It=n=1N(cnαnm=1n1(1αm))

其中 α n ′ = exp ⁡ ( − δ n σ n ′ ) \boldsymbol{\alpha}_n^{\prime}=\exp \left(-\boldsymbol{\delta}_n \boldsymbol{\sigma}_n^{\prime}\right) αn=exp(δnσn) δ n \boldsymbol{\delta}_n δn 是平面 n n n n + 1 n + 1 n+1 之间的距离映射。

虽然基于mpi的方法可以合成真实的图像,但也需要可靠的光流图来训练基于学习的光流估计模型。因此,我们建议在每个平面上增加一个额外的光通道。

为此,我们计算了源图像在像素为 ( x s , y s ) (x_s, y_s) (xs,ys) 处的第 n 个平面上的光流为:

f n = [ x t − x s , y t − y s ] \mathbf{f}_n=\left[x_t-x_s, y_t-y_s\right] fn=[xtxs,ytys]

通过用反等价形式的向后 Warp 过程:

[ x t , y t , 1 ] T ∼ K ( R † − t † n T d n ) K − 1 [ x s , y s , 1 ] T \left[x_t, y_t, 1\right]^T \sim \mathbf{K}\left(\mathbf{R}^{\dagger}-\frac{\mathbf{t}^{\dagger} \mathbf{n}^T}{\mathbf{d}_n}\right) \mathbf{K}^{-1}\left[x_s, y_s, 1\right]^T [xt,yt,1]TK(RdntnT)K1[xs,ys,1]T

为了确保光流图与新的视图图像完美匹配,我们建议同样用体积渲染获取最终的光流标签:

F s → t = ∑ n = 1 N ( f n α n ∏ m = 1 n − 1 ( 1 − α m ) ) \mathbf{F}_{s \rightarrow t}=\sum_{n=1}^N\left(\mathbf{f}_n \boldsymbol{\alpha}_n \prod_{m=1}^{n-1}\left(1-\boldsymbol{\alpha}_m\right)\right) Fst=n=1N(fnαnm=1n1(1αm))

Independent Object Motions

为了模拟更真实的运动,我们建议应用从场景中提取的对象和静态背景的虚拟运动。因此,我们利用实例分割网络提取源图像中的主对象掩码。

然后,分别对背景和前景使用不同的相机运动,来模拟运动场场景。
在这里插入图片描述
如图所示,在添加独立运动前,物体和场景有相似的光流,因为他们运动方向保持一致。

添加独立运动后,物体跟场景有了分离的运动方向,更符合真实场景运动。

Depth-Aware Inpainting

虽然合并后的图像具有真实的视觉效果,但由摄像机运动和物体运动引起的深度变化也会导致非自然的遮挡。为了解决这个问题,我们使用体积渲染来获得场景新视图的深度:

D t = ∑ n = 1 N ( d n ′ α n ′ ∏ m = 1 n − 1 ( 1 − α m ′ ) ) \mathbf{D}_t=\sum_{n=1}^N\left(\mathbf{d}_n^{\prime} \boldsymbol{\alpha}_n^{\prime} \prod_{m=1}^{n-1}\left(1-\boldsymbol{\alpha}_m^{\prime}\right)\right) Dt=n=1N(dnαnm=1n1(1αm))

用同样的方法也可以得到物体新视角的深度。然后,我们利用这两个深度来计算新视图之间的占据掩模,并修复物体和场景的前后遮挡关系,如图所示:

在这里插入图片描述

实验结果:

为了评估所提出方法的有效性,MPI-Flow 在广泛使用的真实光流数据集上进行了实验:KITTI 数据集,并测试了不同来源的原始单目图像数据对结果的影响。
在这里插入图片描述

表一给出了交叉数据集的验证结果,以及与其他来自真实图像或视频的数据集生成方法的比较。“Image Source”列表示用于光流训练数据生成的图像数据集。报告了使用不同方法在不同数据集上训练的 RAFT 的评价结果(使用 C+T 进行预训练)。鉴于 RealFlow 无法处理来自 COCO 的单视图图像,该结果标注为“N/A。花括号“{}”表示对未标记的评估集的使用,这个表中表示 KITTI 15 训练集。

在这里插入图片描述
消融实验表明,在原始图像数量相同的情况下,使用更多的随机运动合成更多数据,有助于进一步提高性能。

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

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

相关文章

QT:使用分组框、单选按钮、普通按钮、标签、行编辑器、垂直分布、水平分布做一个小项目

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QRadioButton> //单选按钮 #include <QGroupBox> //分组框 #include <QHBoxLayout> //水平布局 #include <QVBoxLayout> //垂直布局 #include <QPushButton>…

MFC主框架和视类PreCreateWindow()函数学习

在VC生成的单文档应用程序中&#xff0c;主框架类和视类均具有PreCreateWindow函数&#xff1b; 从名字可知&#xff0c;可在此函数中添加一些代码&#xff0c;来控制窗口显示后的效果&#xff1b; 并且它有注释说明&#xff0c; Modify the Window class or styles here by…

RHCSA 重定向、vim练习题

1.重定向练习题 (1)新建一个文件redirect.txt&#xff0c;并在其中写入20210804RHCSA,保存并退出 先输入命令 [rootlocalhost ~]# vim redirect.txt进入vim编辑器后&#xff0c;按快捷键“i”进入编辑模式&#xff0c;再写入数据&#xff0c;写完之后按“esc"键退出编辑…

python 采用selenium+cookies 获取登录后的网页

百度网页由于需要登陆手机短信验证。比较麻烦 这里我采用先人工登录百度账号&#xff0c;然后将百度账号的相关cookies保存下来 然后采用selenium动态登录网页 整体代码如下 from selenium import webdriverimport timeoptions webdriver.ChromeOptions()options.add_argu…

LLM 08-分布式训练

LLM 08-分布式训练 8.1 为什么分布式训练越来越流行 近年来&#xff0c;深度学习被广泛应用到各个领域&#xff0c;包括计算机视觉、语言理解、语音识别、广告推荐等。在这些不同的领域中&#xff0c;一个共同的特点就是模型规模越来越大&#xff0c;比如 GPT-3 模型的参数量达…

华为云云耀云服务器L实例评测|基于L实例使用Docker部署MySQL服务并连接MySQL—phpMyAdmin管理工具

文章目录 一、云耀云服务器产品优势1、智能不卡顿2、价优随心用3、上手更简单4、管理更省心 二、远程连接云耀云服务器L实例三、安装Docker、docker-compse1、docker安装2、docker-compose安装 四、方法① 使用Docker安装部署MySQL服务五、方法② 使用docker-compse安装部署MyS…

2023年 python结合excel实现快速画图(零基础快速入门)

目录 1.适用人群 2.环境配置 3.基本用法 3.1 数据读取 3.2 数据分析 3.3 数据组装 3.4 制表&#xff1a; 4.快速提升 5.效果展示 1.适用人群 电脑有python环境&#xff0c;会python基本使用&#xff0c;需要短时间内完成大量画图任务的数据分析的人群。&#xff08;有…

AlexNet——训练花数据集

目录 一、网络结构 二、创新点分析 三、知识点 1. nn.ReLU(inplace) 2. os.getcwd与os.path.abspath 3. 使用torchvision下的datasets包 4. items()与dict()用法 5. json文件 6. tqdm 7. net.train()与net.val() 四、代码 AlexNet是由Alex Krizhevsky、Ilya S…

深入学习 Redis Cluster - 基于 Docker、DockerCompose 搭建 Redis 集群,处理故障、扩容方案

目录 一、基于 Docker、DockerCompose 搭建 Redis 集群 1.1、前言 1.2、编写 shell 脚本 1.3、执行 shell 脚本&#xff0c;创建集群配置文件 1.4、编写 docker-compose.yml 文件 1.5、启动容器 1.6、构建集群 1.7、使用集群 1.8、如果集群中&#xff0c;有节点挂了&am…

基于springboot+vue的养老院管理系统 前后端分离项目

养老院管理系统 前后端分离项目 后端技术&#xff1a;springbootmybatis-plusredismysql 前端&#xff1a;vue3.0elementui-plus 【人员管理】 用户管理 客户管理【药品食品管理】 药品管理 食品管理【报修管理】【外出管理】外出管理 访客管理【留言管理】【新闻管理】新闻…

服务器杀掉死进程

清掉服务器上的死进程 查看服务器使用情况 nvidia-smi发现并没有显示进程&#xff0c;那应该是有死进程。 查看占用情况 ps aux会显示如上图的进程列表。 PID进程号STAT状态(S休眠R运行Z死掉了)TIME占用时间(过长的有问题)COMMAND进程启动命令(应该能帮助回忆起这是什么程…

IDEA——工程项目的两种窗口开发模式

文章目录 引言一、多项目窗口模式的便利1.1 源码 debug 二、多项目窗口模式的弊端三、多项目窗口的版本管理四、单项目、多项目窗口模式转换 引言 idea编辑器有两种窗口模式&#xff0c;一种是单项目窗口&#xff0c;另一种是多项目窗口。 我个人使用较多的是单项目窗口&#…

指针和数组笔试题讲解(3)

&#x1f435;本篇文章将对指针相关笔试题进行讲解&#xff0c;同时也是指针和数组笔试题讲解的最后一篇文章&#xff0c;那么接下来将会对8道笔试题进行逐一讲解 笔试题1&#x1f4bb; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d…

C#调用C++ dll 返回数组

先看一下C语言函数返回数组的问题&#xff1b; 先看一个错误的示范&#xff1b; 因为 a 是局部变量&#xff0c;只存在函数 function() 中&#xff0c;返回给main中的b是错误的&#xff1b; 函数返回数组的一种写法如下&#xff1b; #include<stdio.h> int function(in…

二维凸包(Graham) 模板 + 详解

&#xff08;闲话&#xff09; 上了大学后没怎么搞oi&#xff0c;从土木跑路到通信了&#xff08;提桶开润大成功&#xff01;&#xff09;&#xff0c;但是一年上两年的课&#xff08;补的&#xff09;&#xff0c;保研也寄掉了&#xff08; 说起来自从博客被大学同学发现并…

地牢大师问题(bfs提高训练 + 免去边界处理的特殊方法)

地牢大师问题 文章目录 地牢大师问题前言题目描述题目分析输入处理移动方式【和二维的对比】边界判断问题的解决 代码总结 前言 在之前的博客里面&#xff0c;我们介绍了bfs 基础算法的模版和应用,这里我们再挑战一下自己&#xff0c;尝试一个更高水平的题目&#xff0c;加深一…

vue2——电商项目 黑马

创建项目 初始化 router app.vue vant 组件库 Viewport 布局 vw适配 路由配置 底部导航组件 二级路由配置 登录页面 新建默认样式 main.js 引入commonless 登录静态页面—头部组件NavBar 导入navbar 引用 axios封装 图形验证码 获取 get 渲染 api接口模块 toast轻提示 使用 …

Flutter图标

https://fluttericon.cn/ Flutter 内置了丰富的图标。 Icon(Icons.ac_unit)

智能批量重命名,轻松删除文件名后缀数字并添加编号!

亲爱的用户们&#xff0c;您是否曾经为繁琐而重复的文件重命名工作而感到头疼&#xff1f;现在&#xff0c;我们为您提供一款智能化的工具&#xff0c;让文件重命名变得如此简单&#xff01; 首先&#xff0c;我们要进入文件批量改名高手&#xff0c;并在板块栏里选择“文件批…

overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决

目录 1.一般插图 2.插入双栏图片 3 插入子图 4. 引用出现问题 问题1 &#xff1a; pdf 文中引用只出现了图片序号&#xff0c;如“3”。没有出现“Fig.3 或者Figure.3” 问题2&#xff1a;文中引用的标题和图片下面的标题不一致 1 首先&#xff0c;在导言区添加以下行…