作者:lucas du | 已授权转载(源:知乎)
https://zhuanlan.zhihu.com/p/422929082
这次带队参加了ICCV2021的UVO(Unidentified Video Objects) Challenge,本次比赛共有两个赛道,分别为基于图片的开放世界实例分割和基于视频的开放世界实例分割。我们运气不错,拿下了本次比赛两个赛道的冠军。以下为本次比赛介绍和我们的方法简介。
细节报告请参见:
Track 1 :
https://arxiv.org/abs/2110.10239
Track 2 :
https://arxiv.org/abs/2110.11661
Code&Models:
https://github.com/dulucas/UVO_Challenge
基于这个数据集,Facebook于ICCV 2021举办了UVO Challenge,比赛分为两个赛道,第一个为基于图片的开放世界实例分割(可以理解为image instance segmentation),第二个为基于视频的开放世界实例分割(可以理解为video instances segmentation)。比赛对训练集不设限制,只要是开源数据集就行,同时主办方提供了UVO v0.5数据集,包含训练集,验证集和测试集,可以用于模型训练与微调。数据集采用COCO的metric,同时以AR@100作为主要metric。
以下详细介绍我们参加本次比赛所用方法
框架简介:
本次比赛我们没有采用常用的end-to-end实例分割算法,相反地,我们采用了两阶段实例分割框架,第一阶段将图片输入目标检测网络,由目标检测网络预测图片中可能包含物体的边界框;第二阶段先将上阶段预测的边界框包含的图片内容抠出,调整到固定大小之后再输入分割网络,由分割网络预测边界框中物体的mask。
这样做的好处主要有三:
同时这样的缺点也十分明显,方法的推理时间(inference time)相比end-to-end算法会加长很多,非常不适用于有实时要求的任务。
目标检测基线模型选取:
我们比较了三种模型:
我们采用全量COCO train2017为训练集,COCO val2017和UVO sparse val作为测试集,COCO val2017的结果可以被认为是模型在seen classes上的表现,UVO sparse val的结果可以被认为是模型在unseen classes上的表现,以下为测试结果:
可以看出,不同于Goolge Brain这篇文章中的结果,Cascade RPN的表现最好,我们因此选择Cascade RPN作为我们的比赛的基线模型。我们在比赛刚开始的前两周着力于采用Google Brain这篇文章的算法,但经过各种调试,效果都不好。
目标检测模型其他改进:
如上图所示,我们将目标检测网络简化为4个模块,backbone-neck-head- label assignment mechanism。(注意,我们在这里省去了RPN部分)
消融实验:
以上为我们的消融实验示意图,所有模型均在COCO train2017上训练并在val2017上测试。从一个Res50-FPN RPN出发,我们最终的模型可以在AR@100上提高26.1个点。
分割网络:
我们的分割网络相比而言比较简单暴力,我们采用了Upernet网络结构并将backbone替换为了Swin-Large Transformer。
分割网络训练方式:
我们的分割网络为二分类分割网络。图片中的物体被视为前景(foreground),其余部分视为背景(background)。训练时,我们首先于输入图片的实例masks中随机选取一个mask,然后利用此mask生成的边界框裁出框内的一个图片块(patch),将图片块调整到固定大小之后输入分割网络,对应的ground truth即为调整大小之后的实例mask。
训练数据集:
目标检测网络训练所用数据集:ImageNet22k,COCO
分割网络训练所用数据集:ImageNet22k,OpenImage,COCO,Pascal VOC
所有网络在训练时均采用了class-agnostic的方式,即,训练时不区分物体的具体类别,将所有物体类别标签合为一个标签训练。
成果展示:
以下为当给定一个预测边界框时,我们分割网络的输出:
可以看出在有极端角度,遮挡严重,运动模糊等情况下时,我们的方法依然可以得到很好的结果。
最终结果:
我们队(Aples_runner)最终排名:
Track2 : 基于视频的开放世界实例分割
基于我们Track1的方法,我们已经能够得到很多高质量的mask。所以我们进而想到,在mask质量够高的情况下,是否一个简单的跟踪算法就能得到不错的结果?从我们的结果来看,答案是肯定的。
跟踪算法:
我们采用了一个极简的跟踪算法(embarrassing simple),算法核心思想跟IoU-tracker基本一致,大体思路为:我们利用光流一帧一帧地将实例分割结果穿起来,从而得到video instance segmentation结果。算法示意图如下:
由于算法过于简单,细节此处便不多累述。
每个tracker的分数计算流程如下:
即每个tracker存活的帧数与每个帧上tracker对应的检测框分数和的乘积。
我们RAFT模型来预测帧与帧之间的光流。
题外话:我们还曾经试过利用帧与帧之间的相似度来wrap mask,相关任务的文章如 [Space-Time Correspondence as a Contrastive Random Walk, Joint-task Self-supervised Learning for Temporal Correspondence, Rethinking Self-supervised Correspondence Learning: A Video Frame-level Similarity Perspective, Learning Correspondence from the Cycle-Consistency of Time],但是最终效果均不如光流的效果好(换成这些方法之后AR@100大概掉6个点)。原因在于这些方法需要对图片进行下采样来提取特征,但是UVO数据集中存在大量的小物体和细物体(如下图中的网),而通过下采样得到的糙特征(coarse feature)不适用于此类物体,导致在wrapping的过程中mask丢失。
成果展示:
最终结果: