通常语义分割被视作单个像素的分类任务,而实例分割(包括全景分割)则被视为掩码分类任务。本文的看法是:可以使用一个基于掩模分类的模型,以统一的方式解所有的分割任务(语义分割,实例分割…)。在该想法的支持下,我们提出了maskformer,这是一个简单的掩码分类模型,该模型预测了一组二进制掩码,每个掩码都与单个全局类标签预测相关联。
语义分割(semantic segmentation )、实例分割(instance segmentaion)和全景分割(Panoramic segmentation): 语义分割根据语义,为图像中的每个像素打标签; 实例分割只关心需要检测的类别,并将待检测类别的不同个体标记出来;全景分割则在实例分割的基础上,额外需要标记出背景的语义信息。
传统的语义分割采用逐像素分类的方式得到结果, 其输出的类别数是一定的;而实例分割则是预测一系列二进制编码,每个掩码代表一个实例,其输出的掩码数是可变的。
结构如上图所示,其中:
backbone: CNN 或者ViT(文中采用Swin)结构。注意采用 Swin 做backbone时,存在32倍的下采样;
pixel decoder: 采用类似FPN(Feature Pyramid Networks)的结构,逐层上采样;
transformer decoder: 采用标准的解码器架构,由multi-head self-attention,encoder-decoder attention以及 feed-forward network组成。 其中encoder-decoder attention以cls queries 作为 queries, 以 来自编码器的特征作为key-value。decoder的数目为6层。但作者发现,对于语义分割任务而言,只需一层decoder也可以做的很好(详情见实验部分)。
maskformer输入N个cls queries(N通常取100, 不一定等于类别数K,事实上N一般小于类别数),用于查询图像中存在的实例。类别分支的输出用于判断N个掩码的类别,而另一个分支输出N个掩码。
计算损失函数时,对于语义分割任务,可以采用fixed matching策略,如果N=K。这种策略将每个queries分配到固定的类别上。但作者通过实验发现, bipartite matching-based assignment 效果要比fixed matching更好,尤其在类别数比较多的情况下。bipartite matching策略下,每个queries匹配的类别不是固定的,需要结合ground truth 计算。
总的损失函数如下,由N个查询的分类损失和掩码损失相加组成。
推理阶段对实例分割任务,对每个query得到的mask,取概率最大的类作为该mask的类别即可。但对语义分割任务,采用以下公式计算得到的结果要优于上述硬分配方式:
在上面的公式中,$m_i$ 代表[h,w] 位置属于 $mask _i$的概率, 而 $p_i(c)$ 代表$mask _i$属于第i类的概率。
实验部分对比了下图中a-d的模型结构。其中(a)是最基本的逐像素预测结构,(b)在A的基础上,添加了transformer decoder 分支,这样A和B的区别仅在于损失计算方式上(per-pixel vs. mask classification),换句话说,也就是损失函数上增加了额外的全局类别损失。(c) 图为采用fixed matching的结构,其中N=K; (d)为bipartite matching, 而(e)为我们之前采用的声音事件检测模型架构。