使用目标之间的先验关系提升目标检测器性能

今天跟大家分享阿姆斯特丹大学等提出的用于提升目标检测和实例分割性能的新方法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} KRC×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}=PRN×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}=ERN×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^ijRFp+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^uvRFr+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=0Cv=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=0Cv=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=0Cl=0Ce(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}=ZRN×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(l1) 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(l1) 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)=jIα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(l1) 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=[PboxZ]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


http://www.niftyadmin.cn/n/5099730.html

相关文章

Flask项目log的集成

一、引入log 在项目的init.py文件中: import logging from logging.handlers import RotatingFileHandlerfrom flask_wtf.csrf import CSRFProtect from flask import Flask from flask_sqlalchemy import SQLAlchemy from redis import StrictRedis from flask_s…

调优C / C ++编译器以在多核应用程序中获得最佳并行性能:第一部分

领取嵌入式物联网学习路线对于希望通过多核设计中的多线程或分区利用并行性的而言,重要的第一步是提高应用程序的标量性能。 更好,更轻松的方法之一是应用积极的编译器优化。面向您的处理器并具有高级优化功能(例如自动矢量化,过…

博乐信息与工信部教考中心深度合作 打造元宇宙人才培养平台

推进数字经济高质量发展离不开数字科技人才,也离不开职业技能培训的持续完善,根据《“十四五”数字经济发展规划》和国家发展改革委等部门关于印发的《职业教育产教融合赋能提升行动实施方案(2023—2025年)》通知指示,…

图纸管理、图纸管理规范

图纸管理 一、作业的 图纸管理是重要的后勤保障工作,必须做到收发及时,手续齐全,废图绝迹,不遗失,无差错 彩虹图纸管理系统彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】彩虹EDM图纸管理软件系…

AJAX为什么叫AJAX

AJAX(Asynchronous JavaScript and XML)这个名字是由美国程序员Jesse James Garrett在2005年提出的,用来描述一种用于创建交互式Web应用程序的技术组合。它之所以被称为"AJAX",有以下原因: Asynchronous&…

Flutter ☞ 常量

常量 只能被定义一次,并且不可修改的值叫做常量。 在 Flutter 中有两种常量修饰方法 finalconst 相同点 类型声明可以省略 final String a 123; final a 123;const String a 123; const a 123;初始化后不能再赋值 final a 123; a abc; // 错误const a …

pytorch分布式数据训练结合学习率周期及混合精度

正如标题所写,我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长,所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码,经过官网查阅验证的。原始代码由百度文心…

【OpenVINO】行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human-上篇

行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human 1. 英特尔开发套件1.1 OpenVINO1.2 AIxBoard 介绍产品定位产品参数AI推理单元 2. PaddleDetection实时行人分析工具PP-Human3. 预测模型获取与转换3.1 PP-YOLOE行人跟踪模型介绍模型下载与转换(1)Pad…