On Moving Object Segmentation from Monocular Video with Transformers 论文阅读
论文信息
标题:On Moving Object Segmentation from Monocular Video with Transformers
作者:
来源:ICCV
时间:2023
代码地址:暂无
Abstract
通过单个移动摄像机进行移动对象检测和分割是一项具有挑战性的任务,需要了解识别、运动和 3D 几何。将识别和重建结合起来可以归结为融合问题,其中需要结合外观和运动特征来进行分类和分割。
在本文中,我们提出了一种用于单目运动分割的新颖融合架构 - M3Former,它利用Transformer的强大性能进行分割和多模态融合。由于从单目视频重建运动是不适定的,我们系统地分析了该问题的不同 2D 和 3D 运动表示及其对分割性能的重要性。最后,我们分析了训练数据的效果,并表明需要不同的数据集才能在 Kitti 和 Davis 上实现 SotA 性能。
Introduction
我们将我们的框架称为多模态 Mask2Former (M3Former),因为我们将来自多种模态的信息与屏蔽注意力相结合。由于单目视频仅提供单一模态流,因此我们利用冻结专家模型 [47,54,56] 来计算不同的运动表示,请参见图 1。我们的贡献有四个方面:
-
我们设计了一种新颖的带有编码器和解码器的双流架构。我们分析了该框架内不同融合策略的性能。
-
我们在我们的框架内系统地分析了之前工作中不同运动表示(光流、场景流、高维嵌入)的效果。
-
我们凭经验展示不同训练数据的效果。平衡不同来源的运动模式和语义类别对于现实视频的强大性能至关重要。
-
我们引入了一种非常简单的增强技术,以实现更好的多模态对齐。通过引入负数。在没有运动信息的示例中,我们迫使网络不要过度依赖外观数据。
Problem Statement
给定来自单个摄像机的视频 { I 1 , I 2 , . . . , I N } \{I_1, I_2, ..., I_N \} {I1,I2,...,IN},我们想要检测并分割通用的独立移动对象。对象被定义为空间连接的像素组,属于同一语义类。所有标签都合并为一个“对象”,因为只有运动状态很重要。检测器在训练期间只能看到有限数量的类。通用对象检测假设训练和测试类标签集之间不平衡。我们想要识别任何移动的物体,即使我们在训练期间从未见过的类。当一个物体的表观运动不是由相机自身运动引起时,该物体被定义为独立移动。当只有一部分在运动时,物体仍然被认为是运动的,例如当一个人移动一只手臂时,那么整个人就应该被分割。
Appoach
我们为该任务引入了 M3Former 架构,如图 2 所示。我们方法的主要思想是通过注意力灵活地融合外观和运动数据的多尺度特征。
Motion Representation
我们分析了单模态推理和与外观特征融合的性能。给定两个图像 I 1 , I 2 ∈ R H × W × 3 I_1, I_2 ∈ R_{H×W×3} I1,I2∈RH×W×3,我们对两帧之间的运动 F 1 → 2 F_{1→2} F1→2 感兴趣。
optical flow:RAFT
Higher-dimensional Motion Costs:光流是实际 3D 运动的 2D 投影。多个运动可以映射到同一个投影,因此重建是不明确的。从光流重建物体和相机运动有多种退化情况[76]。退化情况在应用程序中很常见,例如道路上的所有车辆共线行驶。
为了稳健地检测移动物体,我们需要某种形式的独立于运动结构的 3D 先验。 [76] 的作者制定了四个手工标准来计算两帧之间的更高维成本函数 C 12 ∈ R H × W × 14 C_{12} ∈ R^{H×W×14} C12∈RH×W×14。该成本函数在违反静态场景假设的区域具有更高的成本。计算涉及估计光流[54]、光学扩展[75]、相机运动[24]和单目深度[47]。 [44]的作者通过使用后向 F 2 → 1 F_{2→1} F2→1 和前向运动 F 2 → 3 F_{2→3} F2→3,将此成本函数扩展为三帧公式 C 13 ∈ R H × W × 28 C_{13} ∈ R^{H×W×28} C13∈RH×W×28。这种成本嵌入的计算涉及最多四个神经网络,每个神经网络都在自己的特定数据集上进行训练。
Scene Flow:
存在一个更简单的 minimal formulation-3D scene flow。给定两个 RGBD 框架 { I 1 , Z 1 } \{I_1, Z_1\} {I1,Z1} 和 { I 2 , Z 2 } \{I_2, Z_2\} {I2,Z2},我们将运动计算为刚体变换场 F ∈ R H × W × 6 ∈ S E 3 F ∈ R^{H×W×6} ∈ SE3 F∈RH×W×6∈SE3。 RAFT-3D [56] 是 2D 光流网络 [54] 的直接 3D 等效,并且自然地包括几何优化。这项工作的主要思想是计算每个像素的运动 g ∈ SE3,而不对语义做出任何假设。
由于以相同的刚体运动移动,像素自然地组合成具有语义意义的对象。我们围绕这个想法 - 给定场景中的多个刚体运动,我们想要推断实例分割。
虽然用于光流训练的数据集有许多不同的[1,48,10,22],但用于场景流训练的数据集较少[41]。我们发现,现有模型权重不能很好地转移到我们的所有训练数据集。因此,我们针对训练数据对 RAFT-3D 进行微调,但在评估期间使用已发布的检查点 [56]。 3D 运动估计的性能很大程度上取决于深度图质量。训练主要以高质量或真实深度进行。在对野外数据进行推理时,我们无法获得 Z1、Z2 的准确绝对比例单目深度。我们根据深度质量来消除运动估计和分割的性能。
Fusion
基于图像的检测器可以很好地解决分割和检测任务,但在运动分类上表现不佳。在训练数据有限的情况下,简单地使用单目视频数据进行运动分割是一项具有挑战性的任务。当使用运动作为中间数据表示(充当归纳偏差)时,该任务就可以解决。然而,为了稳健地分割具有语义意义的移动对象,将图像和运动数据结合在一起至关重要。因此,运动分割任务可以被视为多模态融合问题。
Transformer非常灵活 - 例如将Transformer适应视频实例分割只需要更改位置编码和很少的微调[13]。
这种灵活性是一个关键优势,因为它为将来使用更长的时间窗口留下了可能性。以类似的方式,我们添加特定于模态的位置编码,并组合来自多种模态的数据而不是时间帧。当使用多种模式时,我们将双流架构中的特征与专用参数 θ r g b 、 θ m o t i o n θ_{rgb}、θ_{motion} θrgb、θmotion 相结合。每个分支首先分别对其自己的模态进行训练,然后通过对两个分支进行微调来学习融合。我们尝试了多种方法来融合不同位置的信息。我们的不同流基于 SotA 分割架构 Mask2Former [14]。
Experiments
在我们的第一个实验中,我们专注于单一模式。
我们训练了 30 个 epoch,更多细节请参见 Suppl。秒。 7.1.表 3 显示了 FlyingThings3D 测试拆分的结果。我们使用 3D 输入数据获得了最佳结果,这表明 3D 运动使网络更容易学习任务,并且通常优于 2D 运动。
预测运动和真实运动之间的差距为现成的估计器留下了改进的空间。有趣的是,我们包括一个纯图像基线模型。我们可以在此数据集上训练强大的图像检测器,因为前景物体始终处于运动状态并且与背景不同。请注意,如果数据包含对象类(可以移动但不能移动),情况就不会如此。
稍后我们将看到,纯图像基线如何仅在不惩罚误报的指标上表现良好。
相关文章:

On Moving Object Segmentation from Monocular Video with Transformers 论文阅读
论文信息 标题:On Moving Object Segmentation from Monocular Video with Transformers 作者: 来源:ICCV 时间:2023 代码地址:暂无 Abstract 通过单个移动摄像机进行移动对象检测和分割是一项具有挑战性的任务&am…...

[AutoSar NVM] 存储架构
依AutoSAR及公开知识辛苦整理,禁止转载。 专栏 《深入浅出AutoSAR》, 全文 2900 字. 图片来源: 知乎 汽车的ECU内存中有很多不同类型的变量,这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…...
ES10 新特性
1. Object.fromEntries Object.fromEntries() 方法把可迭代对象的键值对列表转换为一个对象。 语法: Object.fromEntries(iterable)iterable:类似 Array 、 Map 或者其它实现了可迭代协议的可迭代对象。返回值:一个由该迭代对象条目提供对应属性的新对象。相当于 Object.e…...
宝塔安装脚本
Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec Ubuntu/Deepin安装脚本 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sud…...

gulp打包vue3+jsx+less插件
最终转换结果如下 在根目录下添加gulpfile.js文件,package.json添加命令npm run gulp var gulp require(gulp) var babel require(gulp-babel) var less require(gulp-less) var del require(del); var spawn require(child_process).spawn;const outDir &…...

华为ICT——第四章深度学习和积卷神经
接第三章的末尾: 目录 接第三章的末尾: 1:自适应阈值分割: 2:形态处理: 4:膨胀: 5:腐蚀 6:开运算 7:闭运算 8:特征描述子 9…...
MongoDB 学习笔记(基础)
概论 出现背景:MongoDB 是文档型数据库,由于传统的关系型数据库(如 MySQL),在数据操作的“三高”需求以及应对 web 的网站需求面前显得有些吃力,在此环境下 MongoDB 出世了 三高需求: (1) 对数…...

【TGRS 2023】RingMo: A Remote Sensing Foundation ModelWith Masked Image Modeling
RingMo: A Remote Sensing Foundation Model With Masked Image Modeling, TGRS 2023 论文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9844015 代码:https://github.com/comeony/RingMo MindSpore/RingMo-Framework (gitee.com) …...

性能测试 —— 生成html测试报告、参数化、jvm监控
1.生成HTML的测试报告 1.1配置 (1)找到jmeter 的安装目录,下的bin中的jmeter.properties(jmeter配置文件) (2) ctrl f ,搜索jmeter.save.saveservice.output_format,取消井号 并且 把等号后的xml改为csv,…...

堆(二叉树,带图详解)
一.堆 1.堆的概念 2.堆的存储方式 逻辑结构 物理结构 2.堆的插入问题 3.堆的基本实现(代码)(以小堆为例) 1.堆的初始化 2. 向上调整 3.插入结点 4. 交换函数、堆的打印 5.向下调整 6.删除根节点并调整成小根堆 7.获取堆…...

vue3 code format bug
vue code format bug vue客户端代码格式化缺陷,为了方便阅读和维护,对代码格式化发现这个缺陷 vue.global.min.3.2.26.js var Vuefunction(r){"use strict";function e(e,t){const nObject.create(null);var re.split(",");for(le…...

7-3、S曲线生成器【51单片机控制步进电机-TB6600系列】
摘要:本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容,已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中,需要的S曲线如图1所示,横轴为时间,纵轴为角速度,其中w0为起…...

CDC实时数据同步
一丶CDC实时数据同步介绍 CDC实时数据同步指的是Change Data Capture(数据变更捕获)技术在数据同步过程中的应用。CDC技术允许在数据源发生变化时,实时地捕获这些变化,并将其应用到目标系统中,从而保持数据的同步性。…...

javaEE -10(11000字详解5层重要协议)
一:应用层重点协议 1.1: DNS DNS,即Domain Name System,域名系统。DNS是一整套从域名映射到IP的系统。 TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息&#x…...

360智慧生活旗舰产品率先接入“360智脑”能力实现升级
10月25日,360智慧生活秋季新品及视觉云方案发布会在深圳召开。360智能硬件产品,诸如 360可视门铃、360智能摄像机、360行车记录仪、360儿童手表和家庭防火墙等,都在各自的行业有着举足轻重得地位,而这次发布的系列新品,…...
【系统架构设计】 架构核心知识: 2 云原生架构
目录 一 云原生架构 1 云计算 2 分类 3 云计算架构 4 云原生架构设计原则...

Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)
文章目录 目的问题解决方案验证保存为 Unity Mesh 结果 - OK保存为 *.obj 文件结果 - not OK,但是可以 DIY importer注意References 目的 备忘,便于日后自己索引 问题 为了学习了解大厂项目的效果: 上周为了将 王者荣耀的 杨玉环 的某个皮肤…...

【疯狂Java】数组
1、一维数组 (1)初始化 ①静态初始化:只指定元素,不指定长度 new 类型[] {元素1,元素2,...} int[] intArr; intArr new int[] {5,6,7,8}; ②动态初始化:只指定长度,不指定元素 new 类型[数组长度] int[] princes new in…...

leetcode 503. 下一个更大元素 II、42. 接雨水
下一个更大元素 II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数&…...

【德哥说库系列】-PostgreSQL跨版本升级
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

rust学习——智能指针
智能指针 在各个编程语言中,指针的概念几乎都是相同的:指针是一个包含了内存地址的变量,该内存地址引用或者指向了另外的数据。 在 Rust 中,最常见的指针类型是引用,引用通过 & 符号表示。不同于其它语言…...
系列一、Spring Framework
一、谈谈你对Spring的理解 Spring是一个生态,是一个轻量级的开源容器框架,可以构建Java应用所需要的一切基础设施,它的出现是为了解决企业级应用开发中业务逻辑层和其他各层对象与对象之间耦合的问题,通常情况下所说的Spring是指S…...
PULP Ubuntu18.04
1. 安装eda工具:questasim_10.7_linux64,网上有教程和方法,如有问题,可私信我 2. 代码下载: git clone https://github.com/pulp-platform/pulp 编译代码 cd pulp source setup/vsim.sh make checkout make scripts …...
Docker harbor私有仓库部与管理
目录 搭建本地私有仓库 Docker容器的重启策略 Harbor 简介 什么是Harbor Harbor的特性 Harbor的构成 Docker harbor私有仓库部署 Harbor.cfg配置文件中的参数 维护管理Harbor 总结 搭建本地私有仓库 #首先下载 registry 镜像 docker pull registry#在 daemon.json …...

解决虚拟机联网问题
虚拟机开机后发现右上角缺少联网标志(下面有正常联网标志),这样就是连不上网的 不信你可以打开Ubuntu里面的浏览器或ping www.baidu.com 1.编辑虚拟机设置-->网络适配器-->如图所示 2.选择编辑-->虚拟网络编辑器 3.更改设置 4此处可以选择还原默认设置&am…...

Unity 自定义小地图
最近工作做了个小地图,再此记录下思路。 1、准备所需素材 显示为地图(我们取顶视图)。创建一个Cube,缩放到可以把实际地图包住。实际地图的尺寸和偏移量 。我这里长宽都是25,偏移量(1,0&…...
力扣每日一题66:加一
题目描述: 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输…...

项目管理工具ConceptDraw PROJECT mac中文版自定义列功能
ConceptDraw PROJECT Mac是一款专业的项目管理工具,适用于MacOS平台。它提供了成功规划和执行项目所需的完整功能,包括任务和资源管理、报告和变更控制。 这款软件可以与ConceptDraw office集成,利用思维导图和数据可视化的强大功能来改进项目…...
Kafka-Java二:Spring实现kafka消息发送的ack机制
写在前面 如果只有一个kafka实例的话,那么文章中提到kafka集群kafka实例 一、什么是消息发送者端的ack机制 ack机制:消息确认发送成功的标识 由谁发起该标识:kafka集群 发起该标识的场景:kafka集群确认已经收到了消息。 由谁接收…...
Go代码解密:理解byte和int8的边界行为
今天看到一个很有意思的 Golang 代码,最后的输出结果为 4: func main() {count : 0for i : range [256]struct{}{} {m, n : byte(i), int8(i)if n -n {count}if m -m {count}}fmt.Println(count) // 输出为 4 }原因如下 当 i 0 时,n -n …...