
semi-universal。universal。
先不看(b)模块中与文本相关的内容,OneFormer的其余部分模型结构与Mask2Former基本一致:
{1/8、1/16、1/32}三个分辨率的特征图对object query进行更新,李勇的主要结构是cross attention、self attention、FFN;(K+1)个类别;1/4特征图点积给每个query生成对应的binary mask;相比于Mask2Former,OneFormer的创新点或者说不同之处有以下几点:
the task is { }来构造任务提示词
I
t
a
s
k
I_{task}
Itask ,该提示词随后会经过Tokenize和Embedding以及MLP,得到task-token
Q
t
a
s
k
Q_{task}
Qtask 。a photo with a {CLS}这样的短语构造
T
l
i
s
t
T_{list}
Tlist 序列,。为了使得batch内部的文本长度对齐,需要使用a/an {task} photo这样的短语进行padding,代表no-object,padding后的结果是
T
p
a
d
T_{pad}
Tpad。
Query Representations部分主要介绍text query Q t e x t Q_{text} Qtext 和object query Q Q Q是如何构造和初始化的:
Q
t
e
x
t
Q_{text}
Qtext:将
T
p
a
d
T_{pad}
Tpad 进行 Tokenize 以及Embedding,随后采用6层transformer encoder得到
N
t
e
x
t
N_{text}
Ntext个Embedding。然后,将
N
c
t
x
N_{ctx}
Nctx个可学习的Embedding和
N
t
e
x
t
N_{text}
Ntext个embedding连接起来,最终得到
N
N
N 个text query
Q
t
e
x
t
Q_{text}
Qtext。

Q
Q
Q:首先,将
Q
t
a
s
k
Q_{task}
Qtask 复制
N
−
1
N-1
N−1 次,的到初始化后的object query
Q
′
Q'
Q′,然后,使用1/4特征图对
Q
′
Q'
Q′ 进行更新(使用2层transformer),最后,将
Q
t
a
s
k
Q_{task}
Qtask 和
Q
′
Q'
Q′ 连接得到
N
N
N 个object query
Q
Q
Q。
将语义分割、实例分割、全景分割统一在同一个模型中的关键挑战在于,怎么为每个任务生成任务特定的object query,那么,该如何让每种任务的object query之间彼此区分呢?
本文的解决方案是,计算text query Q t e x t Q_{text} Qtext 和object query Q Q Q 之间的对比损失,因为 Q t e x t Q_{text} Qtext是从特定任务的GT中通过统计thing和stuff的数量得到的,所以不同任务的 Q t e x t Q_{text} Qtext之间是彼此区分的,那么只需要将 Q Q Q 和 Q t e x t Q_{text} Qtext 对齐。
所采用的对比损失如下:

B
B
B 是一个batch内部的object-text pairs.




