Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割)

2023-10-24 18:20

本文主要是介绍Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paper: Mask-Free Video Instance Segmentation
github

一般模型学instance segmentation都是要有mask标注的,
不过mask标注既耗时又枯燥,所以paper中仅用目标框的标注来实现实例分割

主要针对视频的实例分割
之前也有box-supervised实例分割,不过是针对图像的,用在视频中精度不是很高,
作者分析视频的特点是图像是连续的,那就是说同一目标区域在连续的帧中应该属于一个mask label.

理论是时间连续性,一个视频是由多个图片组成的连续的画面,目标的变化也是渐变的。
t+1时刻的帧 与 t时刻对应的区域,像素如果属于同一目标或者背景,那么就应该有相同的mask.
这种找连续画面的对应区域,流行的是用光流法。

不过光流法面临2个问题:
1.不稳定,在有遮挡(找不到),没有明显的纹理(未定义),或者是只有一个边缘(模棱两可)时。
2. SOTA光流法用了深度网络,计算量内存量很大。

paper中定义了temporal KNN-patch loss(TK-loss)
简要介绍一下TK-loss,对于每一个目标patch, 在相邻帧找到matching score最高的前K个匹配。
对K个匹配都计算loss。

和光流法的区别是,光流法是1对1匹配,而TK-loss是1对K匹配。
K可以是0,比如遮挡的情况,也可以是K>=2, 比如天空,地面这种纹理不丰富的情况。
当K>=2时,可能多个patch都属于同一目标或者背景。
此方法计算量不大,而且没有需要学习的参数

计算TK-loss有4个步骤,如下图

在这里插入图片描述

步骤1
候选patch。
一个N * N的patch, 假设它的中心点坐标为p=(x, y), X p t X_{p}^t Xpt表示第 t 帧以p为中心点的N * N patch.
现要找到 t ^ \hat{t} t^ 帧与 X p t X_{p}^t Xpt对应的patch(中心点) 在这里插入图片描述
中心点的位置可在以p为中心,半径R内的区域选取(有点像模板匹配中的local search),
加速措施的所有target image同时做这个窗口搜索。

步骤2
K个匹配。
匹配肯定要计算距离,paper中用的是L2距离,
在这里插入图片描述
选取距离最小的K个匹配。
这K个匹配里面可能还有距离不够小的,这时用一个阈值再过滤一次,把距离>=阈值D的过滤掉。
剩下的就是要求的在这里插入图片描述

步骤3
一致性loss。
当匹配的patch不属于一个mask时,就会带来损失。
M p t M_{p}^t Mpt为预测的二值mask值(0,1), 位置p, 第 t 帧。
如果(p,t) 与它的对应patch 在这里插入图片描述不一致,就会有loss.
在这里插入图片描述
其中
在这里插入图片描述
可以看出,在匹配点的mask值都是0或都是1时,log里面是1,整体的loss是0,也就是说匹配点一致时不会带来损失。

步骤4
Cyclic Tube连接
tube是指包含了一个时间序列的帧数的管道,设有T帧。
每次要计算一个tube里面所有帧的loss. 用循环(cyclic)的方式。
在这里插入图片描述
这里一个时间通道用5帧,shuffle过。
蓝色表示两两帧之间都计算loss。
红色是cyclic连接,最后一帧和第一帧计算loss, 其他的计算相邻帧的loss.
在这里插入图片描述

训练

以往的实例分割训练都需要mask的标注,paper中不用mask标注,只用box 标注。
那么就不能像计算mask loss那样用到预测mask和gt mask.
作者用了BoxInst中的两个损失函数来替代mask loss.
box映射损失 L p r o j L_{proj} Lproj和相邻像素的损失 L p a i r L_{pair} Lpair.

其中映射损失为
在这里插入图片描述
用的是dice loss, 因为作者发现cross-entropy会导致大的object损失比小的object要大。
这里计算loss时忽略标签。

相邻像素的损失 L p a i r L_{pair} Lpair主要依据是认为同一帧颜色相近的相邻像素应该属于同一物体。

在这里插入图片描述
不过一张图像上那么多点,公式上看pi是属于目标框内的点,不过pj怎么选呢,这里没说。
BoxInst中指出是周围的8个点(要间隔一个点)。

在这里插入图片描述
BoxInst中loss就是简单地把2者结合起来:
在这里插入图片描述
而paper中作者加了一个权重,得到空间loss:
在这里插入图片描述
还有一个时间上的loss, 就是前面提到的TK-loss. 把空间loss和时间loss结合起来得到最终的损失函数:

在这里插入图片描述
回忆一下TK-loss L t e m p L_{temp} Ltemp,

取T帧的时间通道,计算相邻两帧的loss, 最后一帧和第一帧计算loss.
在这里插入图片描述
loss如下:
在这里插入图片描述
遍历一帧图像内所有点,设其中一点为p,找半径R范围内的点作为匹配点的候补,以每个点为中心求N * N patch的L2距离。
找到前K个距离最小的候补点,去掉距离<D的候补点,剩下的就是匹配点。
然后计算匹配点的mask是否一致。
在这里插入图片描述

一帧所有的点算完后,按cyclic的顺序计算一个时间通道内所有帧的loss叠加.

L t e m p L_{temp} Ltemp的算法流程如下:
在这里插入图片描述

总结

把实例分割方法中的mask loss替换成paper中的 L s e g L_{seg} Lseg,就能实现只有box标注下的video实例分割。

所以,认为本文其实是改进了BoxInst损失函数,考虑video图片连续性的特点,在BoxInst的基础上加上了时间损失 L t e m p L_{temp} Ltemp
paper中的时间损失 L t e m p L_{temp} Ltemp是针对video场景的 ,如果单纯是图片的实例分割,图片没有连续性,就不适用。

实验数据参照paper

这篇关于Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276940

相关文章

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

swiper实例

大家好,我是燐子,今天给大家带来swiper实例   微信小程序中的 swiper 组件是一种用于创建滑动视图的容器组件,常用于实现图片轮播、广告展示等效果。它通过一系列的子组件 swiper-item 来定义滑动视图的每一个页面。 基本用法   以下是一个简单的 swiper 示例代码:   WXML(页面结构) <swiper autoplay="true" interval="3

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

echarts省份标注加散点效果

这个是安徽的效果图,鼠标移到红色标注或者对应的市区位置都会显示对应的数值。 先直接上代码: import anhuiMapJson from './anhui.json'getCoords: function(city) {var res = [];if (city != null) {for (var c in this.cityMap.features) {if (this.cityMa

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

【第十三课】区域经济可视化表达——符号表达与标注

一、前言 地图最直接的表达就是使用符号表达。使用符号可以把简单的点线面要 素渲染成最直观的地理符号,提高地图的可读性。只要掌握了 ArcGIS 符号制 作的技巧,分析符号并总结出规则,就可以制作符合要求的地图+符号。 (一)符号的选择与修改 符号的选择在制图中至关重要,使用符号选择器对话框可从多个可用样式 中选择符号,并且每个符号都有一个标签用来描述其图形特征,如颜色或类型, 利用这些标签可

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言:第一部分详细讲解DDS核心框图,还请读者深入阅读第一部分,以便理解DDS核心思想 三刷小梅哥视频总结! 小梅哥https://www.corecourse.com/lander 一、DDS简介         DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有低成本、低功耗、高分辨率、频率转换时间短、相位连续性好等优点,对数字信