[论文阅读笔记26]Tracking Everything Everywhere All at Once


论文地址: 论文
代码地址: 代码

这是一篇效果极好的像素级跟踪的文章, 发表在ICCV2023, 可以非常好的应对遮挡等情形, 其根本的方法在于将2D点投影到一个伪3D(quasi-3D)空间, 然后再映射回去, 就可以在其他帧中得到稳定跟踪.

这篇文章的方法不是很好理解, 代码也刚开源, 做一下笔记备忘.


0. Abstract

传统的光流或者粒子视频跟踪方法都是用有限的时间窗口去解决的, 所以他们并不能很好的应对长时遮挡, 也不能保持估计的轨迹的全局连续性. 为此, 我们提出了一个完整的, 全局的连续性的运动表示方法, 叫做OmniMotion. 具体地, OmniMotion将一个视频序列表示成一个准-3D的规范量(quasi-3D canonical volume), 然后通过定义一个双射(也就是从平面空间到所谓的canonical的空间), 这样我们通过一个准3D空间, 就可以描述一个完整的运动(因为补偿了2D缺失的信息).

1. Method

由于对相关领域知识的匮乏, 先略过Introduction和Related Work部分, 先来看方法.

从整体流程上, OmniMotion将一整个视频序列作为输入, 同时还输入不太准确的带噪的运动估计(例如光流估计), 然后解出一个完整的, 全局的运动轨迹.

那么如何解决遮挡问题呢? 遮挡, 只是在2D的图像平面下遮挡了, 但是在3D信息中是可以恢复出来的. 为此, 我们将场景给投影到某个3D空间, 这个空间可以尽可能描述像素完整的运动. 比如说, 第 t 1 t_1 t1帧的某个像素 x 1 x_1 x1, 给投影到这个3D空间变为 x ′ x' x, 然后在第 t 2 t_2 t2帧我们再将这个 x ′ x' x投射到2D平面, 就得到了对应的点 x 2 x_2 x2. 由于这个3D不需要真正的进行3D重建(因为真正的3D重建是需要知道相机的内参和外参, 内参包括图像中心的坐标, 相机的焦距等, 外参需要知道相机的朝向等, 是比较复杂的), 因此我们将该空间成为quasi-3D.

所以具体是如何做的呢?

1.1 规范3D量的组成

我们将前述的规范3D量记为 G G G. 和神经辐射场(NeRF)一样, 我们在 G G G上定义了一个基于坐标的网络 F θ F_{\theta} Fθ, 该网络将 G G G中的3D坐标 u u u映射到密度 σ \sigma σ颜色 c c c. 其中密度可以告诉我们表面(surface)在这个3D空间中的位置, 颜色是可以在训练过程中计算光度损失(photometric loss).

1.2 3D双射

如前所述, 我们需要定义一个从本地坐标(也就是视频或图像坐标)到quasi-3D空间的一个映射, 以及逆映射, 这样我们可以再映射回别的时间索引的帧找到对应点. 然而, 实际上该工作是将本地的2D坐标给提升到3D的(后面会讲如何做的), 然后从提升后的本地3D坐标投影到quasi-3D空间. 整个映射和逆映射的过程如下:

x j = T j − 1 ∘ T i ( x i ) x_j = \mathcal{T}_j^{-1}\circ \mathcal{T}_i(x_i) xj=Tj1Ti(xi)

其中 i , j i,j i,j是frame index, 因此, 我们定义的映射是和时间有关的. 然而, 中间产物 u = T i ( x i ) u= \mathcal{T}_i(x_i) u=Ti(xi)应该是与时间无关的.

在实现上, 映射是用可逆神经网络(INN)做的.

1.3 计算运动

流程上, 我们在2D图像上的一个像素 p i p_i pi, 我们首先将其提升到3D, 变成 p i ′ p_i' pi. 方法是在一个射线上进行采样. 然后用上一节定义的3D双射投影到第 j j j帧对应的3D点, 最后再降维回2D就可以了.

具体地, 由于我们已经将相机的运动包含在映射 T \mathcal{T} T内了 , 因此我们直接将相机建模成固定的正交相机. 固定正交相机的含义是, 物体不再具有近大远小的特征. 这样一来, 我们就可以很容易的将2D坐标拓展到3D坐标. 也就是说, 既然物体的大小不再随着深度的变化而变化, 那么2D像素点 ( x i , y i ) (x_i, y_i) (xi,yi)不论深度如何, 它的值(RGB)一直是一样的, 因此前述的射线可以这样定义:

r i ( z ) = o i + z d , o i = [ p i , 0 ] ∈ R 3 , d = [ 0 , 0 , 1 ] r_i(z)=o_i+zd, \\ o_i = [p_i, 0] \in \mathbb{R}^3, d = [0, 0, 1] ri(z)=oi+zd,oi=[pi,0]R3,d=[0,0,1]

因此我们在这个射线上采集 K K K个样本, 就相当于在这个固定正交相机拍摄的3D场景中进行深度采样.

然后, 这么一堆样本, 我们用映射 T i \mathcal{T}_i Ti投影到quasi-3D空间, 然后再用之前说的映射 F θ F_{\theta} Fθ转换成密度和颜色的量 ( σ , c ) (\sigma, c) (σ,c), 即, 对于第 k k k个样本:

( σ k , c k ) = F θ ( T i ( x i k ) ) x j k = T j − 1 ( ( σ k , c k ) ) (\sigma_k, c_k) = F_\theta(\mathcal{T}_i(x_i^k)) \\ x_j^k = \mathcal{T}_j^{-1}((\sigma_k, c_k)) (σk,ck)=Fθ(Ti(xik))xjk=Tj1((σk,ck))

随后, 我们根据第 j j j帧的这 K K K个对应样本, 得到第 j j j帧的估计:

x ^ j = ∑ k = 1 K T k α k x j k , where   T k = Π l = 1 k − 1 ( 1 − α l ) , α k = 1 − exp ⁡ { − σ k } \hat{x}_j = \sum_{k=1}^KT_k\alpha_kx_j^k, \\ \text{where} ~~T_k=\Pi_{l=1}^{k-1}(1-\alpha_l), \\ \alpha_k = 1-\exp\{-\sigma_k\} x^j=k=1KTkαkxjk,where  Tk=Πl=1k1(1αl),αk=1exp{σk}

以上的过程叫做alpha compositing, 是NeRF中一个常用的技巧. 意义是, 密度实际上表达了3D空间中存在物体的可能性, 1 − exp ⁡ { − σ k } 1-\exp\{-\sigma_k\} 1exp{σk}就是一种对概率的衡量. 对于是否采纳第 k k k个样本, 重要性为 T k α k T_k\alpha_k Tkαk, α k \alpha_k αk已经解释. T k T_k Tk的含义是在这之前的样本的联合可信程度, 也就是说, 之前有一个样本已经比较可信了, 那么这个样本就可以更少的采纳.

以上是个人理解

因此, 上面的过程总结为下图:
在这里插入图片描述

2. Training

这个工作是用已有的光流方法生成标签, 指导训练的. 这部分重点先记一下损失函数.

损失函数由三部分构成, 一个是位置误差, 也就是坐标误差. 一个是颜色误差, 这就是前面 c c c的作用, 还有一个是因为要保证平稳性而加入的罚项. 其中1, 3项采用1范数, 第二项采用2范数.

Flow loss:

L f l o = ∑ f i → j ∣ ∣ f ^ i → j − f i → j ∣ ∣ 1 , f ^ i → j = p ^ j − p i \mathcal{L}_{flo} = \sum_{f_{i \to j}}|| \hat{f}_{i \to j} - f_{i \to j}||_1, \\ \hat{f}_{i \to j} = \hat{p}_j - p_i Lflo=fij∣∣f^ijfij1,f^ij=p^jpi

photometric loss:

L p h o = ∑ i , p ∣ ∣ C ^ i ( p ) − C i ( p ) ∣ ∣ 2 2 \mathcal{L}_{pho} = \sum_{i, p}|| \hat{C}_{i}(p) - C_i(p)||_2^2 Lpho=i,p∣∣C^i(p)Ci(p)22

smooth loss:

L r e g = ∑ i , x ∣ ∣ x i + 1 − x i + x i − 1 − x i ∣ ∣ 1 \mathcal{L}_{reg} = \sum_{i, x}|| x_{i + 1} - x_i + x_{i - 1} - x_i||_1 Lreg=i,x∣∣xi+1xi+xi1xi1

意义是保证前一帧和后一帧的差距尽量小.

最终的loss是这三项的线性组合.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式--单例模式(Singleton Pattern)

一、什么是单例模式 单例模式是一种创建型设计模式,它旨在确保一个类只有一个实例,并提供一个全局访问点来访问该实例。换句话说,单例模式限制了类的实例化次数为一个,并提供一种在应用程序中共享一个实例的方式。这对于需要只有…

一个简单的web应用程序的创建

一个简单的web应用程序的创建 1、数据库设计与创建1.1、数据库系统1.2、Navicat Premium1.3、Power Designer2、使用maven创建SpringBoot项目2.1、配置maven2.2、安装idea2.3、使用idea创建maven项目2.4、根据需要配置pom.xml文件、配置项目启动相关的文件2.5、写SpringBoot项目…

React入门 组件学习笔记

项目页面以组件形式层层搭起来,组件提高复用性,可维护性 目录 一、函数组件 二、类组件 三、 组件的事件绑定 四、获取事件对象 五、事件绑定传递额外参数 六、组件状态 初始化状态 读取状态 修改状态 七、组件-状态修改counter案例 八、this问…

Jmeter 接口测试总结

背景介绍 对于 Android 项目来说,使用的是 Java 开发,网络请求接口的数量庞大且复杂,测试人员无法很直观的判断、得出网络请求是否存在问题。另一方面,为了验证请求接口是否能够在大负荷条件下,长时间、稳定、正常的运…

3d max插件CG MAGIC中的蜂窝材质功能可提升效率吗?

工作中能提升效率也都是大家所想的,对于设计师的一个设计过程中,可能想怎么样可以更快呀,是哪个步骤慢了呢? 这样的结果只能说会很多,但是建模这个步骤,肯定是有多无少的。 为了让模型更加逼真&#xff0c…

探索AIGC人工智能(Midjourney篇)(二)

文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画,制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

APP爬虫之-Protobuf协议逆向解析

在做APP抓取时,会发现有的APP Response回来的数据有“加密”。不知道返回的内容是什么。 如下: 如上,内容不是明文的,没办法解析数据。APP常见的对数据加密有三种情况:第一种是,用诸如AES这类加密算法对数…

HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能

HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱,集合编辑 PDF 的简单功能,可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作,而且工具集成隐私保护功能,文件只在浏览器本地完成&…

vs2019 ,c++的STD库全局函数 _Pocma 的思考

(1)在阅读vs2019上的 STL库的 map 源码时,遇到了这个函数,之前,在别的源码中也经常出现这个函数。那么这个函数起什么作用呢? 在1880行,有对该函数的调用。其定义如下图:&#xff0…

Jetbrains IDE新UI设置前进/后退导航键

背景 2023年6月,Jetbrains在新发布的IDE(Idea、PyCharm等)中开放了新UI选项,我们勾选后重启IDE,便可以使用这一魔性的UI界面了。 但是前进/后退这对常用的导航键却找不到了,以前的设置方式(Vi…

Java10(异常处理)

0.复习面向对象 1.异常的体系结构 异常:在Java语言中,将程序执行中发生的不正常情况.(开发中的语法错误和逻辑错误不是异常) 异常事件分两类(它们上一级为java.lang.Throwable): Error Java虚拟机无法解决的严重问…

使用kubeadm方式快速部署一个K8S集群

目录 一、环境准备 二、环境初始化 三、在所有主机上安装相关软件 1、安装docker 2、配置k8s的yum源 3、安装kubelet、kubeadm、kubectl 四、部署Kubernetes Master 五、加入Kubernets Node 六、部署CNI网络插件 七、测试k8s集群 一、环境准备 我的是CentOS7系统&am…

【Linux】socket 编程基础

文章目录 📕 网络间的通信📕 socket 是什么1. socket 套接字2. 套接字描述符3. 基本的 socket 接口函数3.1 头文件3.2 socket() 函数3.3 bind() 函数struct sockaddr主机序列与网络序列 3.4 listen() 函数3.5 connect() 函数3.6 accept() 函数IP 地址风格…

C# Winfrom通过COM接口访问和控制Excel应用程序,将Excel数据导入DataGridView

1.首先要创建xlsx文件 2.在Com中添加引用 3. 添加命名空间 using ApExcel Microsoft.Office.Interop.Excel; --这样起个名字方面后面写 4.样例 //点击操作excelDataTable dt new DataTable();string fileName "D:\desktop\tmp\test.xlsx";ApExcel.Application exA…

04.sqlite3学习——DDL(数据定义:创建和删除表)

目录 DDL(数据定义:创建和删除表) SQLite 创建表 语法 实例 字段修饰符 primary key 定义主键列 AUTOINCREMENT 自动增长 UNIQUE 字段的值唯一 NOT NULL 字段的值不为空 SQLite 修改表 增加字段add 修改表名rename to SQLite 删…

WPF基础入门-Class5-WPF命令

WPF基础入门 Class5-WPF命令 1、xaml编写一个button&#xff0c;Command绑定一个命令 <Grid><ButtonWidth"100"Height"40" Command"{Binding ShowCommand}"></Button> </Grid>2、编写一个model.cs namespace WPF_Le…

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预…

开源的经济影响:商业与社区的平衡

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

使用锐捷RG-EG210G-E路由器实现两个IP地址冲突的局域网互通

需求背景&#xff1a; 之前写过一篇博文使用路由器实现三个不同网段局域网内的计算机相互访问&#xff0c;链接如下 https://blog.csdn.net/agang1986/article/details/131862160 当前的需求又发生了变更&#xff0c;有两个独立的局域网&#xff0c;内部的计算机个数和配置的IP…