Visual Relationship Detection with Language Priors (ECCV 2016)
视觉关系主要是关于图像中,对象与对象之间的各种相互作用。
视觉关系检测包含检测图像中的对象,定位,并对于两者之间的predicate或者是interaction进行分类。
但是由于对象的个数本身已经很多,关系的种类也非常多,那么如果按照<subject,predicate,object>这种形式进行关系预测,那么所具有的可能性的情况将会非常庞大,很难获得所有关系的训练样例,并且训练样例并不足够。
那么传统的对于视觉关系的检测就存在这样两个问题,①如果按照传统的relationship的分类方式,分类器的数量将会非常庞大 ( O ( N 2 K ) ) (O(N^2 K)) (O(N2K)); ②由于一些relationship的出现并不频繁,常出现的可能仅有一些种类,那么就会出现relationships的long-tail分布问题,这种长尾分布问题就导致训练样本非常少,从而会造成分类器训练不充分这种问题的出现。
本文的主要工作是,区别于传统的关系检测,不再直接对于关系元组进行训练和预测,而是将其进行拆分。尽管许多relationships因为长尾问题并不常见,但是它们中的object和predicate却可以更频繁独立的出现。因此本文基于这种想法,分别独立训练object和predicate的模型,然后进行组合,最终进行relationship的预测。
文章的另一个发现是,relationships之间是存在语义相关性的,比如person riding a horse和person riding an elephant在语义上式相似的,因为horse和elephant都是animal,即使模型没有见过很多person riding an elephant,也可以从person riding a horse进行推断。
除了提出新的模型以外,另一个贡献是提出了一个新的数据集,VRD。
这个数据库解决了传统的用于视觉关系检测的数据库的平均每个实体所涉及的关系不充分,关系类型少,谓词具有歧义性的问题,丰富了实体对之间的关系且关系的种类也变得丰富,可以是动词,空间关系的短语,介词,比较级,行为,介词短语等。
模型:
训练时模型的输入是一组图像集,并且每一张图片都有关系的标注,给出每一个object的bounding box定位。
visual appearance module
用这个模块主要学习object和predicate的appearance表示,然后将两者融合,联合预测关系。相比于视觉短语的 O ( n 2 k ) O(n^2k) O(n2k)的预测方法,作者的这种方法只需要 O ( n + k ) O(n+k) O(n+k)就可以,大大降低了分类器的数量。
首先训练一个CNN(VGG)来进行分类对象实例。然后训练第二个CNN(VGG)来分类谓语predicate。使用的是两个对象实例objects的并集区域union。
对于关系的建模形式如下:
R<i,k,j>表示的是真实关系,i,j表示对象类别,对应的bounding box是O1 和O2,k是predicate的类别;
Θ
\Theta
Θ是参数
的集合形式,这两部分参数是要学习的,将CNN提取的特征转化为关系可能性的参数。
P i ( O 1 ) P_i(O_1) Pi(O1)和 P j ( O 2 ) P_j(O_2) Pj(O2)是第一个VGG网络的输出,分别表示的是O1和O2这两个边界框对应的object属于类别i和j的概率;
表示的是在已知O1和O2的前提下,两者之间存在关系k的概率。
因为两个objects和predicate都是预测的,不是确定的,所以建模是将三者的概率相乘。
最后的结果值越大,表示relationship这个三元组成立的概率就越大。
V()这个函数的作用就是预测object的种类,以及他们之间发生关系的概率,最后值越大,表明这两个object的类别发生关系的概率越大。
language module
作者提出的,relationships之间是有语义相关性的,例如上面提到的大象和马,都是动物。
单词向量嵌入能够很自然的将这些关系联系起来,因为它能够获取语言中的语义相似性。
该模块是使用预训练的词向量将关系转换到向量空间,在这个空间中,相似的关系之间会距离比较近。正是由于这个词向量嵌入的空间,才可以优化关系预测的分数,甚至可以实现zero-shot的关系检测。
这个模型的功能就是将关系relationship映射到一个嵌入空间中,在这个空间中进行优化,使得相似的关系距离更近,相近的relationships映射成相似的数值,语义差距大的映射成不同的数值,同时,值越大,表示关系元组的成立概率就越高(从语义角度)。
首先是通过一个映射函数来将关系映射到一个向量空间中:
Projection function:
使用预训练的word2vec将标注中的关系里面的objects映射成为对应的向量表示(300 dim),然后将两个向量联结后,将其转换为关系向量空间,这个转换通过参数W来进行映射,参数W是要学习的。
ti和tj表示的是实体object对应的单词类别。
其中第k行表示的是在我们总的K个predicate类别中的第k个对应的语义嵌入,是要学习的参数。
Training projection function:
上面的映射函数完成了关系信息的嵌入,但是还需要对嵌入的关系进行优化,使得相似的关系距离更近。
作者使用了一种启发式的方法来进行建模,希望是两个relationships之间的距离和他们对应的objects以及predicate之间的word2vec的距离成正比。
为了实现这种聚类的作用,训练方法如下:
d
(
R
,
R
′
)
d(R,R')
d(R,R′)表示的是两个relationship的object和predicate在词嵌入空间的余弦距离之和。
那么依据上面的训练公式,比值是常数,语义相近的relationships对应的
d
(
R
,
R
′
)
d(R,R')
d(R,R′)就小,因而分子的部分也就小,即使得语义相近的relationships经过映射函数f()后投影的距离就近。
根据训练公式可以看到,这个式子比较关键的值在于等号右边的常数值,这个常数值不是人为设定的,而是通过学习后得到的。
就是希望W能够使得R,R’的组合能够尽量的满足训练公式。但是就作者提出的数据集而言,这种关系的对已经数量非常庞大。因此为了减少计算量,只是随机采样了所有关系对中的500K个。然后按照这个式子进行计算,通过最小化方差,来实现更多的关系对能够满足训练公式。训练公式中的常数就是上面公式的均值。
likelihood of relationship
按照上面的这些计算,已经实现了关系的嵌入,并且相似的relationship在映射后有相近的投影值。但是还没有实现投影值越大,成立概率越高这个目的。
这个目标的实现是通过下面的公式来完成的:
建模这种功能是通过强制认为在训练集中出现频率越高的relationship的类别,成立的概率就高,有更大的投影值。这个公式中的R和R’与前面的定义不太一样,R表示频率更高的关系,R‘表示出现频率低的关系。
实现这种功能就是通过最小化上面函数,目的是使低频的投影值低,高频的高。
上面整个这个language 模块,就是预测两个物体之间发生的是什么样的关系,功能就是通过f()这个函数实现的,这个函数中的参数W是通过下面的这些式子定义,需要完成哪些功能,按照这种目标进行训练,得到f()函数的参数W,过程与视觉模块的参数theta相似,参数都是最后通过最小化损失函数,随机梯度下降进行参数更新得到的最后参数。
objective function
前面我们已经表示出来了视觉外观模型和语言模型,这里就将两部分相结合,定义损失函数:
使用这个损失函数,让模型能够选择更正确的关系。其中R’表示生成的关系。最小化损失函数,就是使生成的关系的概率更高。参数 Θ \Theta Θ和W分别是视觉外观模块和语言模块要学习的参数。
最终的目标函数:
λ 1 \lambda_1 λ1和 λ 2 \lambda_2 λ2是超参数。
测试阶段:
对图片提取一系列的候选对象,然后通过之前学习的参数对每一个对象对来预测视觉关系,
训练过程总结:
思考:
论文利用了语言先验word embedding,对预测起到了很大的帮助,但是先验知识可能会使得关系预测倾向于频繁的关系,而忽略了视觉方面的信息。