Scene Graph(视觉关系场景图检测)

时间:2024-04-14 12:56:14

Scene Graph
简而言之,视觉关系识别/检测任务不仅需要识别出图像中的物体以及他们的位置,还要识别物体之间的关系,即目标物体之间的联系,可以表示为一个三元组Triplet——Relationship: <object1 - predicate - object2>

主要相关的任务有三种:Predicate classification,只需要预测关系。Scene graph classification需要得到对象和关系。Scene graph detection/gen还要定位到框box的对象和关系。

Scene Graph(视觉关系场景图检测)
Visual Relationship Detection with Language Priors
ECCV2016,开山之作,公开了一个数据集VRD,包含5000张图片,6000多个关系,平均每个对象有24个关系谓词。其他相关数据集:Scene graph,VIsual phrases,VIsual Genome。

处理方法主要是:

  • 先对图像用RCNN等目标检测算法得到一些目标,构成目标对
  • 再分别经过一个视觉模型和一个语言模型。视觉模型是用CNN提取object-pair联合的box的特征,再结合他们的类似然度得到关系元组的视觉似然度。语言模型是将目标对的word词向量映射到一个embedding space,其中嵌入空间k是谓词数量,所以能得到两个目标对象间的关系的语言上的似然度。
  • 最后两者相乘得到最后的关系三元组似然度可能性,就是预测的结果。

code:https://github.com/Prof-Lu-Cewu/Visual-Relationship-Detection

Scene Graph(视觉关系场景图检测)
Scene Graph Generation by Iterative Message Passing
CVPR2017。上一篇文章有融合文本语义,但也是独立地预测每两个对象间的关系(local),而忽略了场景中的其他对象,关系,即周围上下文的信息对预测关系的相互帮助作用。所以这篇文章仅仅通过message passing从图片出发, 更好地利用图片的上下文来预测物体和关系(主-谓-宾)。

模型流程:

  • 也是先通过目标检测RPN(Fast-RCNN)得到一些目标候选
  • 然后主宾组合得到:edge feature: 主语和宾语box的并集组成rel-rois(RoI候选)。node feature: 检测出的所有候选RoI,然后把edge feature和node feature送入GRU得到融合了上下文context的特征
  • 然后就是node和edge关系的交互,用message passing。对于node,用inbound(入界,即作为宾语的edge特征)和outbound(出界,即作为主语的edge特征)和自己的node state特征融合就产生了交互。对于edge,主语node特征和宾语node特征再和自己的node state特征融合就产生了交互。
  • 再将他们用于更新对应的hidden state(就是自己的state,这里是GRU,最后的状态将被用来预测对象),多次迭代。

但是由于全连接图的复杂度很高,所以论文使用的CRF的mean field,用子图来近似替代推断和消息传递。

https://arxiv.org/abs/1701.02426
https://github.com/danfeiX/scene-graph-TF-release

Scene Graph(视觉关系场景图检测)
Scene Graph Generation from Objects, Phrases and Region Captions
ICCV2017。从region、phrase、object三个不同的语义上理解图片场景,再生成多级场景描述网络(表示为MSDN)。

  • 先目标检测得到候选。
  • 按照候选可以得到region(时间发生的整体场景候选)、phrase(不同目标间的交互区域,即两个对象区域的max-max)、object(不同的目标)三种不同的区域。
  • 在两层全连接层将不同信息相互传递。
  • 将refine过的特征做分类、caption、预测。
  • 最后的场景图scene graph通过object和relations来构造。

code:https://github.com/yikang-li/MSDN
Scene Graph(视觉关系场景图检测)
Neural Motifs: Scene Graph Parsing with Global Context
CVPR2018,经典之作。motif指场景图中重复出现的子结构(关系和主语宾语的类别十分相关而且图片中的motif经常出现多次),所以引入关系先验,再直接通过统计的方法(因为重复的结构会出现频率较高,存在联系),不需要图片信息就能得到较高的准确率。

方法:

  • 先将图片做目标检测(Fast-RCNN)候选框生成proposal
  • 按顺序输入一个双向LSTM,得到object context(图中下面的绿色和蓝色的c),这个特征一方面送到解码器解码(白色的label),一方面送到edge context(蓝绿c有黑线连到上面的蓝绿d)。
  • edge context会将上一步预测出来的类别embeding后(白色的label)和object context特征c进行cat然后送入rnn
  • 然后就遍历所有的可能关系对,用context d和union box的特征算点积。这样为了给预测关系时用的特征加入context,就是当关系和主语宾语的类别十分相关而且图片中的motif经常出现多次所做的特征融合。
  • d的全连接根据motif有不同的bias,得出可能的关系预测

paper:https://arxiv.org/abs/1711.06640
code:https://github.com/rowanz/neural-motifs

Scene Graph(视觉关系场景图检测)
Pixels to Graphs by Associative Embedding
多了一个像素级网络输出object和relationship的热点图,再全连接层预测object和relationship。
code:https://github.com/princeton-vl/px2graph

Scene Graph(视觉关系场景图检测)

Learning to Compose Dynamic Tree Structures for Visual Contexts
CVPR2019.以前的工作通常倾向于将图片信息通过graph或者chains来表现,但是这种连接edge会过分简单化object(triplet)之间的关系,并忽略复杂空间信息,graph则缺乏对平行relation的区分(如女孩戴帽子,女孩戴手套)。此外图片信息是由任务(图片)决定的,chains和graph都缺乏对于自然视觉信息的动态捕捉。那就构棵树吧!VCTree

方法:

  • 先将图片做目标检测(Fast-RCNN)候选框生成proposal
  • 计算节点之间的连接矩阵,根据矩阵构建VCTREE
  • 使用构建好的vctree,用 Bidirectional Tree LSTM 编码上下文
  • 再encoded context 根据不同的task进行解码。

Unbiased Scene Graph Generation from Biased Training
CVPR2020,上篇文章的团队出品。将常见的MOTIFS和VCTree等模型归纳为了因果图。因果图中每个节点为一些关键变量,而其中的有向边就是对各种网络forward运算的简化,仅体现了一种因果上的决定关系。

指路:https://cloud.tencent.com/developer/article/1598413

应用
似乎我整理这个方向只是为了这个github…
https://github.com/KaihuaTang/Scene-Graph-Benchmark.pytorch

大佬:“由于之前通用的SGG框架neural-motifs已经落后于时代,我设计了个新的代码框架(已于Github开源)。不仅结合了最新的maskrnn-benchmark用于底层物体检测,同时集成了目前最全的metrics包括Recall,Mean Recall,No Graph Constraint Recall, Zero Shot Recall等,同时代码中为各种指标的evaluation统一了接口,希望后续有更多的研究者们可以设计出更有价值的metrics,从而使SGG领域不至于再只关注一个biased指标Recall而沦为灌水圣地。”

github代码还没细看,待更。