主流的基于深度学习的物体检测方法是对不同类别进行单独的检测,而本文提出了关系网络的方法,通过对不同物体间的关系进行建模,来优化物体检测任务。
主流的物体检测任务流程
物体检测任务可以分成:1. 图片特征生成 2.区域特征提取 3.实例识别 4. 多余框的去除 四个部分,而本文提出的Relation Module能够优化后面两个流程,即实例识别和多余框去除。
Object Relation Module的数学模型
本文的关系模型的思路是来源于NLP领域的论文《Attention is all
you need》,所以关系模型的建立有很多相似之处。
这张图片就是Relation Module的整体结构,可以看到输入是fAf_AfA和fGf_GfG.
其中fAf_AfA是Appearance Feature,物体的表观特征,是由全连接层输出的1024维的feature map,fGf_GfG是物体的几何特征,指的是bounding box的四个参数(x,y,w,h),而fGmf_G^mfGm和fGnf_G^nfGn是指第m个bounding box和第n个bounding box。
模块的输出是fRnf_R^nfRn是指第n个物体的关系特征Relation Feature。fRnf_R^nfRn的计算公式为:
虚线框中的WVW_VWV, WQW_QWQ和WKW_KWK都是线性变换矩阵,对表观特征fAnf_A^nfAn进行线性变换的目的是为了将原有的特征映射到线性子空间来适应位置平移和大小变化。
wmnw^{mn}wmn是关系权重,用来决定第m个物体的表观特征将对第n个物体的关系特征有多大的影响。其计算公式为:
公式中的wGw_GwG和wAw_AwA表示来源于表观特征和几何特征的权重。
wAw_AwA的计算公式为:
通过第m个物体和第n个物体的点积来表征他们的关系相近程度。dkd_kdk是物体的个数,如果物体个数很多,那么他们之间的相互关系(点积)的值就会很大,经过softmax之后就容易梯度弥散,所以dk\sqrt{d_k}dk是为了缩放点积的结果,将其约束在合理的范围内。
对于wGw_GwG的计算,就较为复杂了,现抛出公式:
εG\varepsilon_GεG是一个函数,表征两个物体的位置关系,公式是:
以上是对Relation Module的输入输出以及中间环节的数学模型进行了介绍,那么Relation Module的输出fRnf_R^nfRn将如何整合到网络中?
如下图所示,多个Relation Module输出的关系特征级联之后与原本的表观特征进行融合。
之所以使用多个Relation Module并行处理,也是来自于《Attention is all
you need》的Multi-head思路,通过不同的线性变换来获得特征的平移缩放不变性。
上面的框架结构的数学表达为:
我们可以知道,通过整个结构,模型的输入输出的尺寸没有变化,因此可以嵌入到现有的物体检测框架中,从而可以优化全连接层的输出。
Relation Module对物体识别的优化
上文说到Relation Module可以对物体检测中的物体识别和多余框去除两个步骤进行优化,并且由于其输入输出具有相同的尺寸,因此串接到全连接层中来优化全连接的输出结果,即优化了物体识别的效果。
主流的物体识别方法是对proposal的特征进行全连接层的分类,然后通过线性层得到score和bounding box的参数。如下图所示:
而本文是对这种方法进行改进,通过在两个全连接层后面串接若干个RM(Relation Module)来优化结果。
Relation Module对多余框去除的优化
多余框去除的过程可以看成是对各个bounding box进行二分类的判别,即判定为保留或者去除,这个二分类任务是通过一个网络来实现的,即duplicate removal network。其结构如下:
其中s0s_0s0即为对proposal分类的score,而s1s_1s1是二分类判别的结果,如果是多余的框则s1s_1s1=0,如果是要保留的框,则s1s_1s1=1。输出的socre是s0s_0s0和s1s_1s1的乘积。因此好的检测结果(正确类别并且bounding box最接近ground truth的结果)的score也会更高。
至于内部的计算过程,我们根据核心的Relation Module的输入输出分别介绍。
输入
我们已经知道Relation Module的输入是表观特征fAf_AfA和几何特征fGf_GfG,其中fAf_AfA是由分类score及其1024维的表观特征feature map融合得到的。
而fGf_GfG就是当前的待分类的bounding box的几何信息。
输出
输出即为关系特征经过线性层和Sigmoid层得到分类结果。
值得注意的是框图中有一个rank embed,是将score的具体数值转化成了按照score大小的排序,因为作者通过实验发现使用score的排序作为输入比直接使用score数值效果要好。