今天跟大家分享阿姆斯特丹大学等提出的用于提升目标检测和实例分割性能的新方法RP-FEM,该方法将目标之间位置的先验关系融入到feature中。
- 论文标题:Relational Prior Knowledge Graphs for Detection and Instance Segmentation
- 机构:阿姆斯特丹大学、TomTom
- 论文地址:https://arxiv.org/pdf/2310.07573.pdf
- 开源代码(即将开源):https://github.com/ozzyou/RP-FEM
- 关键词:目标检测、实例分割
1.动机
在认知心理学中,人类通过理解物体之间的关系来感知世界。通过认识物体之间的关联,建立对环境的心理表征,对可能的行为进行推断,实现对这些行为结果的预测。从简单的日常活动(如过马路)到更复杂的任务(如理解自然语言、计划和决策)。
同样,在计算机视觉领域,物体之间的关系已经成为一个重要的研究方向。利用对象间的关系,计算机视觉系统可以增强图像中目标检测和分割的能力,推理它们之间的关系,构建更复杂的应用程序实现对视觉信息的深入理解。
作者提出通过建模目标之间的关系增强目标检测性能。作者引入了一个基于关系先验的特征增强模型(Relational Prior-based Feature Enhancement Model,简称RP-FEM),使用了多头注意机制来选择相关的先验,使用graph transformer model对其进行聚合。图像被表示为场景图(scene graph),使用图节点表示proposal的特征,目标关系的先验知识构成图的边。使用RPKG(Relational Prior Knowledge Graph)描述目标之间的关系,RPKG可从场景图数据集Visual Genome中获取。
将RP-FEM应用于目标检测中,可以从目标关系的角度滤除不合理的目标检测框,还能减少小目标的重复检测框。
2.方法
总体结构如下:
Relation Head通过关注场景图中的相邻节点(表示proposal)和RPKG(表示类嵌入)的相邻节点,用关系先验知识更新场景图中的每条边。原始proposal特征和预测的边输入 Graph Transformer,得到更新的场景图,从更新后的场景图中预测box和mask。
2.1 Relational Prior Knowledge Graph(RPKG)
作者利用Visual Genome数据集构造了3个不同的Relational Prior Knowledge Graph(RPKG)。将训练好的Faster R-CNN模型中倒数第二层的特征(记作 d d d)作为RPKG的节点,使用Visual Genome数据集中的场景图标注统计目标之间的关系,将其作为RPKG的边。作者统计了3种目标之间的关系:
(1)共同出现(Co-occurrence):两个类别的目标在整个数据集中一起出现的频率。
(2)相对位置(Relative Orientation):两个类别目标的相对位置,比如A在B的中间、上侧、下侧、左侧、右侧。可以存在多个选项同时出现,比如A在B的左侧和上侧。
(3)相对距离(Relative Distance):图片中同时出现的两个目标之间的平均距离和平均标准差。
综上可构造RPKG,记作 R = ⟨ D , K ⟩ \mathbf{R}=\langle\mathbf{D}, \mathbf{K}\rangle R=⟨D,K⟩,其中 K ∈ R C × C × R \mathbf{K} \in \mathbb{R}^{C \times C \times R} K∈RC×C×R, R R R的值取决于构造RPKG时要使用的关系。
当Visual Genome数据集中的类别与COCO数据集类别名字不一致时,需要手动构造两个数据集中类别名的映射关系。
2.2 使用RPKG增强特征
利用RPKG中的先验知识增强特征,基于潜在目标的特征,从 R \mathbf{R} R中检索目标的关联信息,使得关联信息在proposal特征空间中表达。
首先构造场景图 S = ⟨ P , E ⟩ \mathbf{S}=\langle\mathbf{P}, \mathbf{E}\rangle S=⟨P,E⟩,使用proposal特征表示节点,即 { p i , … , p N } = P ∈ R N × F p \left\{p_i, \ldots, p_{\mathcal{N}}\right\}=\mathbf{P} \in \mathbb{R}^{\mathcal{N} \times \mathcal{F}_{\mathrm{p}}} {pi,…,pN}=P∈RN×Fp,图的边表示为 { e i i , e i j , … , e N N } = E ∈ R N × N × F e \left\{e_{i i}, e_{i j}, \ldots, e_{\mathcal{N N}}\right\}=\mathbf{E} \in \mathbb{R}^{\mathcal{N} \times \mathcal{N} \times \mathcal{F}_{\mathrm{e}}} {eii,eij,…,eNN}=E∈RN×N×Fe。
然后使用 P \mathbf{P} P和 R \mathbf{R} R的值计算 E \mathbf{E} E,即计算 S \mathbf{S} S中节点特征对和 R \mathbf{R} R中节点特征对的相似度。根据两个相邻节点之间的相似度进行加权,对 R \mathbf{R} R中的边值进行聚合。使用 S \mathbf{S} S中的每对儿节点 [ p i , p j ] ∈ P \left[p_i, p_j\right] \in \mathbf{P} [pi,pj]∈P作为query, R \mathbf{R} R中所有的节点 [ d u , d v ] ∈ D \left[d_u, d_v\right] \in \mathbf{D} [du,dv]∈D作为key,计算注意力系数 α ( i j ) , ( u v ) \alpha_{(i j),(u v)} α(ij),(uv)。对节点邻域的特征进行堆叠,利用共享权重矩阵进行线性变换,分别为 S \mathbf{S} S和 R \mathbf{R} R构造局部潜在邻域表示 p ^ i j ∈ R F p + F p \hat{p}_{i j} \in \mathbb{R}^{\mathcal{F}_{\mathrm{p}}+\mathcal{F}_{\mathrm{p}}} p^ij∈RFp+Fp和 d ^ u v ∈ R F r + F r \hat{d}_{u v} \in \mathbb{R}^{\mathcal{F}_{\mathrm{r}}+\mathcal{F}_{\mathrm{r}}} d^uv∈RFr+Fr。为计算 S \mathbf{S} S中的边 E \mathbf{E} E,对 R \mathbf{R} R中经过线性变换的边(作为value)乘以相应的注意权值。公式表示如下:
α ( i j ) , ( u v ) = exp ( att ( W q [ p i , p j ] , W k [ d u , d v ] ) ) ∑ u = 0 C ∑ v = 0 C exp ( att ( W q [ p i , p j ] , W k [ d u , d v ] ) ) \alpha_{(i j),(u v)}=\frac{\exp \left(\operatorname{att}\left(\mathbf{W}_q\left[p_i, p_j\right], \mathbf{W}_k\left[d_u, d_v\right]\right)\right)}{\sum_{u=0}^C \sum_{v=0}^C \exp \left(\operatorname{att}\left(\mathbf{W}_q\left[p_i, p_j\right], \mathbf{W}_k\left[d_u, d_v\right]\right)\right)} α(ij),(uv)=∑u=0C∑v=0Cexp(att(Wq[pi,pj],Wk[du,dv]))exp(att(Wq[pi,pj],Wk[du,dv]))
= exp ( att ( p ^ i j , d ^ u v ) ) ∑ u = 0 C ∑ v = 0 C exp ( att ( p ^ i j , d ^ u v ) ) =\frac{\exp \left(\operatorname{att}\left(\hat{p}_{i j}, \hat{d}_{u v}\right)\right)}{\sum_{u=0}^C \sum_{v=0}^C \exp \left(\operatorname{att}\left(\hat{p}_{i j}, \hat{d}_{u v}\right)\right)} =∑u=0C∑v=0Cexp(att(p^ij,d^uv))exp(att(p^ij,d^uv))
e ( i j ) , ( k l ) = α ( i j ) , ( k l ) ) W v R k l \left.e_{(i j),(k l)}=\alpha_{(i j),(k l)}\right) \mathbf{W}_v \mathbf{R}_{k l} e(ij),(kl)=α(ij),(kl))WvRkl
E i j = W E ∑ k = 0 C ∑ l = 0 C e ( i j ) , ( k l ) \mathbf{E}_{i j}=\mathbf{W}_{\mathrm{E}} \sum_{k=0}^C \sum_{l=0}^C e_{(i j),(k l)} Eij=WEk=0∑Cl=0∑Ce(ij),(kl)
上式中 W q \mathbf{W}_q Wq、 W k \mathbf{W}_k Wk、 W v \mathbf{W}_v Wv、 W E \mathbf{W}_{\mathbf{E}} WE为计算query、key、value和边的值时用到的的权重。矩阵 E \mathbf{E} E根据先验知识图中出现的目标组合关系的先验知识来权衡proposal目标对场景图中其他目标的重要性。
2.3 上下文更新
在得到了场景图 S \mathbf{S} S的边 E \mathbf{E} E的值以后,作者使用multi-layered Graph Transformer实现上下文更新操作。上下文更新确保 S \mathbf{S} S中的节点特征在图中聚合,为每个节点提供更多关于整个场景的上下文以及与上下文中其他节点之间基于先验知识的关系。
在此过程中,每个节点通过消息 m m m获得其相邻节点的信息,并通过边矩阵 E \mathbf{E} E进行加权,得到上下文感知的节点 { z i , … , z N } = Z ∈ R N × F z \left\{\mathbf{z}_i, \ldots, \mathbf{z}_{\mathcal{N}}\right\}=\mathbf{Z} \in \mathbb{R}^{\mathcal{N} \times \mathcal{F}_{\mathrm{z}}} {zi,…,zN}=Z∈RN×Fz。表示如下:
f i j ( l ) = E ( δ i j ) ) δ i j = { E i j if l = 0 A i j ( l − 1 ) if l > 0 \left.\mathbf{f}_{i j}^{(l)}=\mathcal{E}\left(\delta_{i j}\right)\right) \quad \quad \delta_{i j}= \begin{cases}\mathbf{E}_{i j} & \text { if } l=0 \\ \mathbf{A}_{i j}^{(l-1)} & \text { if } l>0\end{cases} fij(l)=E(δij))δij={EijAij(l−1) if l=0 if l>0
n i ( l ) = γ i j γ i j = { p i if l = 0 z i ( l − 1 ) if l > 0 \mathbf{n}_i^{(l)}=\gamma_{i j} \quad \quad \gamma_{i j}= \begin{cases}p_i & \text { if } l=0 \\ \mathbf{z}_i^{(l-1)} & \text { if } l>0\end{cases} ni(l)=γijγij={pizi(l−1) if l=0 if l>0
α i j ( l ) = σ ( LReLU ( [ f i j ( l ) ⊕ n i ( l ) ] ) ) \alpha_{i j}^{(l)}=\sigma\left(\operatorname{LReLU}\left(\left[\mathbf{f}_{i j}^{(l)} \oplus \mathbf{n}_i^{(l)}\right]\right)\right) αij(l)=σ(LReLU([fij(l)⊕ni(l)]))
m i ( l ) = ∑ j ∈ I α i j ( l ) f i j ( l ) \mathbf{m}_i^{(l)}=\sum_{j \in \mathcal{I}} \alpha_{i j}^{(l)} \mathbf{f}_{i j}^{(l)} mi(l)=j∈I∑αij(l)fij(l)
z ^ i ( l ) = L N ( n i ( l ) + m i ( l ) , head + m i ( l ) , tail ) \hat{\mathbf{z}}_i^{(l)}=\mathbf{L N}\left(\mathbf{n}_i^{(l)}+\mathbf{m}_i^{(l), \text { head }}+\mathbf{m}_i^{(l), \text { tail }}\right) z^i(l)=LN(ni(l)+mi(l), head +mi(l), tail )
z i ( l ) = L N ( z ^ i ( l ) + f ( z ^ i ( l ) ) ) \mathbf{z}_i^{(l)}=\mathbf{L} \mathbf{N}\left(\hat{\mathbf{z}}_i^{(l)}+f\left(\hat{\mathbf{z}}_i^{(l)}\right)\right) zi(l)=LN(z^i(l)+f(z^i(l)))
上式中 F z \mathcal{F}_{\mathrm{z}} Fz表示输出特征的维度, l l l表示第 l l l个Graph Transformer层, E \mathcal{E} E为应用于边特征的transformer function, σ ( ⋅ ) \sigma(\cdot) σ(⋅)表示softmax函数,LReLU表示Leaky ReLU激活函数, ⊕ \oplus ⊕表示concat操作,LN表示LayerNorm, f ( ⋅ ) f(\cdot) f(⋅)表示2个包含Leaky ReLU的线性层。
第一个Graph Transformer使用了原始的边矩阵 E \mathbf{E} E,在后面的层中边矩阵会更新为 A \mathbf{A} A:
h i ( l ) , head = H ( n i ( l ) ) h i ( l ) , tail = T ( n i ( l ) ) \mathbf{h}_i^{(l), \text { head }}=\mathcal{H}\left(\mathbf{n}_i^{(l)}\right) \quad \mathbf{h}_i^{(l), \text { tail }}=\mathcal{T}\left(\mathbf{n}_i^{(l)}\right) hi(l), head =H(ni(l))hi(l), tail =T(ni(l))
α i ( l ) , head = LReLU ( A ( [ δ i head ⊕ h i ( l ) , head ] ) ) α i ( l ) , tail = LReLU ( A ( [ δ i tail ⊕ h i ( l ) , tail ] ) ) \begin{aligned} \alpha_i^{(l), \text { head }} & =\operatorname{LReLU}\left(\mathcal{A}\left(\left[\delta_i^{\text {head }} \oplus \mathbf{h}_i^{(l), \text { head }}\right]\right)\right) \\ \alpha_i^{(l), \text { tail }} & =\operatorname{LReLU}\left(\mathcal{A}\left(\left[\delta_i^{\text {tail }} \oplus \mathbf{h}_i^{(l), \text { tail }}\right]\right)\right) \end{aligned} αi(l), head αi(l), tail =LReLU(A([δihead ⊕hi(l), head ]))=LReLU(A([δitail ⊕hi(l), tail ]))
δ i = { E i if l = 0 A i ( l − 1 ) if l > 0 \quad \delta_i= \begin{cases}\mathbf{E}_i & \text { if } l=0 \\ \mathbf{A}_i^{(l-1)} & \text { if } l>0\end{cases} δi={EiAi(l−1) if l=0 if l>0
α i ( l ) , head+tail = σ ( [ α i ( l ) , head ⊕ α i ( l ) , tail ] ) \alpha_i^{(l), \text { head+tail }}=\sigma\left(\left[\alpha_i^{(l), \text { head }} \oplus \alpha_i^{(l), \text { tail }}\right]\right) αi(l), head+tail =σ([αi(l), head ⊕αi(l), tail ])
A i ( l ) = α i ( l ) , head+tail ⊙ [ h i ( l ) , head ⊕ h i ( l ) , tail ] \mathbf{A}_i^{(l)}=\alpha_i^{(l), \text { head+tail }} \odot\left[\mathbf{h}_i^{(l), \text { head }} \oplus \mathbf{h}_i^{(l), \text { tail }}\right] Ai(l)=αi(l), head+tail ⊙[hi(l), head ⊕hi(l), tail ]
上式中的 H \mathcal{H} H和 T \mathcal{T} T为分别应用于head indices或tail indices的proposal特征的transformer function, A \mathcal{A} A为应用于concat后的节点和边特征的transformer function, ⊙ \odot ⊙表示元素乘法。
2.4 mask的预测
经过上下文更新的 L L L次迭代后,丢弃边矩阵,将最终第 L L L个节点特征 Z ( L ) \mathbf{Z}^{(L)} Z(L)与原始proposal特征 P b o x P^{box} Pbox进行concat得到用于box预测的输出特征 O b o x O^{box} Obox。用于掩码预测的输出特征 O m a s k O^{mask} Omask通过包含前景目标的proposal特征 P m a s k P^{mask} Pmask与 Z ( L ) \mathbf{Z}^{(L)} Z(L)进行concat得到的。表示如下:
O b o x = [ P b o x ⊕ Z ] O mask = [ P B ( O b b ) mask ⊕ Z ] = [ P f g mask ⊕ Z ] \begin{aligned} & \mathbf{O}^{b o x}=\left[\mathbf{P}^{b o x} \oplus \mathbf{Z}\right] \\ & \mathbf{O}^{\text {mask }}=\left[\mathbf{P}_{\mathcal{B}\left(\mathbf{O}_{b b}\right)}^{\text {mask }} \oplus \mathbf{Z}\right]=\left[\mathbf{P}_{f g}^{\text {mask }} \oplus \mathbf{Z}\right] \\ & \end{aligned} Obox=[Pbox⊕Z]Omask =[PB(Obb)mask ⊕Z]=[Pfgmask ⊕Z]
通过调整box head和mask head的输入大小,确保Mask R-CNN适应由于连接而导致的形状的增加。由于先验知识图是固定的,所以它没有梯度,因此没有经过训练,只需要单独对图像数据(COCO)进行训练。最终的预测结果由MaskR-CNN的原始损失函数监督,总体损失函数为:
L = L c l s + L box + L mask \mathcal{L}=\mathcal{L}_{c l s}+\mathcal{L}_{\text {box }}+\mathcal{L}_{\text {mask }} L=Lcls+Lbox +Lmask
3.实验
(1)实验设置
(2)实验结果
推荐阅读:
如何优雅地读取网络的中间特征?
港科大提出适用于夜间场景语义分割的无监督域自适应新方法
EViT:借鉴鹰眼视觉结构,南开大学等提出ViT新骨干架构,在多个任务上涨点
HSN:微调预训练ViT用于目标检测和语义分割,华南理工和阿里巴巴联合提出
CV计算机视觉每日开源代码Paper with code速览-2023.10.17
CV计算机视觉每日开源代码Paper with code速览-2023.10.16
CV计算机视觉每日开源代码Paper with code速览-2023.10.13