- obiect-to-object关系的建模很困难,因为对象的位置,尺度,类别,数量可能会随着不同的图像变化而变化。
- 深层的卷积神经网络通过大的接受域隐式地合并了上下文信息。
本项工作的贡献:
- 提出了一种relation module,在检测的过程中通过利用图像中object之前的相互关系或者图像内容(context)来优化检测效果,同时它不改变特征的维度,能很好的嵌入目前的各种的检测框架,进而提高检测的性能。
- 将attention机制引入了NMS操作当中,即提出了一种特别的代替NMS的去重模块,可以避免NMS需要手动设置参数的问题。进而实现了真正意义上的end-to-end 训练。
产生了第一个真正意义上的end-to-end detector。
1、Background
我们首先假设一个问题,给出一个显示器,我们如何去进行判断它是电脑显示器还是电视显示器呢?用我们的检测的方法好像很难去进行判断,但是我们如果能够结合周围的一些信息,可能就会很容易的进行区分,比如说,放在客厅里的显示器就是电视,在检测到显示器的同时,检测到了鼠标和键盘,那么它就是笔记本的显示器。总之,周边其他物体的信息很可能对某个物体的分类定位有着帮助作用,这个作用在目前的使用RoI的网络中是体现不出来的,因为在第二阶段往往就把感兴趣的区域取出来单独进行分类定位了。这篇文章作者就考虑改良这个情况,来引入关联性信息。让我们带着问题一起来看看吧。
我们先来看一个实际的例子,蓝色的框代表检测到的物体,黄色的框代表对该次检测有帮助的联合信息。
2、Object Relation Module
首先说明的是,这篇文章的主要是基于Faster RCNN系列算法的(Faster RCNN,FPN等)引入Object Relation Module。
接下来我们看一下这个module,这篇文章是借鉴了Google 2017发表的《Attention Is All You Need》,没有详细的了解过NLP中的这种思想,只是简单的看了一下相关的解读,以及论文中提到的一些东西。
个人认为这个模块的特点就是联合所有的Object的信息来提升每一个object recognition的准确性。模块的示意图如下:
详细的介绍一下上图(左侧),先说明几个符号的含义。
1、
f
A
n
f_A^n
fAn代表第n个物体的apperance特征,就是物体的大小、形状、颜色等这些外观特征。
2、
f
G
n
f_G^n
fGn对应的是第n个物体的geometry特征,代表物体的位置和大小(bounding box)。
3、这个的relation模块(数量
N
r
N_r
Nr),我们可以类比成神经网络中每一层都有很多的通道,以便于学习不同种类的特征。
每一个relation模块都用所有object的两个特征做输入。得到不同的relation特征后再concat,并且和原来的特征信息融合,作为物体最终的特征。
对于上图右边的部分,我们首先看公式:
右图符号含义:
4、
f
R
(
n
)
f_R(n)
fR(n) 是第n个relation模块的输出,它是由各个所有物体的apperance特征经过
W
v
W_v
Wv的维数变化后,又赋予不同的权重叠加得到的.
5、
W
v
W_v
Wv是一个线性变换操作,
W
G
W_G
WG代表object的位置特征权重,
f
R
(
n
)
f_R(n)
fR(n)是由各个所有物体的apperance特征经过
W
v
W_v
Wv的维数变化后,又赋予不同的权重叠加得到的……位置特征是体现在权重里的(这也就是为什么在上式中输入仅仅只有
f
A
m
f_A^m
fAm一个的原因),第m个物体对于当前第n个物体的权重
ω
m
n
\omega^{mn}
ωmn的求法如下:
上式的分母是个归一化的项,重点来看一下分子的含义,它是由两部分决定的,第一个是第m个物体对于当前第n个物体在geometry上的权重
ω
G
m
n
\omega_G^{mn}
ωGmn 和在apperance上的权重
ω
A
m
n
\omega_A^{mn}
ωAmn ,它们各自的求法如下:
这里的
W
G
,
W
K
,
W
Q
W_G,W_K,W_Q
WG,WK,WQ都跟
W
V
W_V
WV类似,起到的是一个维数变化的效果,dot代表点乘,
d
k
d_k
dk是点乘后的维数;
对于上式,首先对
f
G
f_G
fG做了坐标上的变换,主要进行尺度归一化和log操作,可以增加尺度不变性,不至于因为数值变化范围过大引起训练的发散。可以看出坐标变换公式和目标检测算法中的回归目标构造非常相似,最大的不同点在于对x和y做了log操作,原因在于这里要处理的
x
m
x_m
xm与
x
n
x_n
xn、
y
m
y_m
ym与
y
n
y_n
yn之间的距离要比目标检测算法中的距离远,因为目标检测算法中的距离是预测框和roi之间的距离,而这里是不同预测框(或者说是不同roi)之间的距离,因此加上log可以避免数值变化范围过大。
ε
G
\varepsilon_G
εG操作主要是将4维的坐标信息embedding成高维的坐标信息(比如默认是64维),借鉴的是attention is all you need这篇文章的思想,主要由一些cosine函数和sine函数构成。接着,将
W
G
W_G
WG和embedding特征相乘,这里
W
G
W_G
WG也是通过全连接层实现的。最后的max操作类似relu层,主要目的在于对位置特征权重做一定的限制。
w
G
m
n
w_G^{mn}
wGmn的引入是本文和attention is all you need这篇文章较大的不同点。
上式中
f
G
f_G
fG坐标变换的公式为:
在得到一个关系特征
f
R
n
f_R^n
fRn后,这篇文章最后的做法是融合多个(
N
r
N_r
Nr个,默认是16)关系特征后再和图像特征
f
A
n
f_A^n
fAn做融合,如下面公式所示。这里有个细节是关于关系特征的融合方式,这里采用的concat,主要原因在于计算量少,因为每个
f
R
n
f_R^n
fRn的通道维度是
f
A
n
f_A^n
fAn的
1
/
N
r
1/N_r
1/Nr倍,concat后的维度和
f
A
n
f_A^n
fAn相同。假如用element-wise add的方式进行融合,那么每个
f
R
n
f_R^n
fRn的维度和
f
A
n
f_A^n
fAn都一样,这样的加法计算量太大。这正好对应了Figure2中左侧的信息。
综上所述,我们可以用下图来概括前面提到的所有的公式算法。
作者选取了
d
k
=
d
g
=
64
d_k=d_g=64
dk=dg=64,
N
r
=
16
N_r=16
Nr=16。总结一下这个模块的求法:
- 分别根据两个特征计算它们各自的权重。
- 由两个特征的权重获得总权重。
- 按照第m个物体对当前物体的总权重,加权求出各个relation模块。
- concat所有relation模块,与原来的特征叠加,最终输出通道数不变的新特征。
3、relation for object detection
上面介绍完了relation module,那么下面我们来看一下,它是怎么应用到目标检测的算法当中的。我们先上图,看图来理解。
上面两图是将relation module应用在目标检测算法中的示意图,
F
A
n
,
F
G
n
F_A^n,F_G^n
FAn,FGn是分别代表表面特征和几何特征。
上图是relation module插入目标检测算法的示意图,左侧是插入两个全连接层的情况,在全连接层之后会基于提取到的特征和ROI的坐标构建attention,然后将attention加到特征中传递给下一个全连接层,再重复一次后就开始做bounding box regression and classification。
右图是插入NMS模块的情况,图像特征通过预测框得分的高低顺序和预测框特征的融合得到,然后将该融合特征与预测框坐标作为relation模块的输入得到attention结果,最后将NMS当作是一个二分类过程,需要注意的是对于每个ground truth,只有一个detected object被归为correct类,而其余的都是duplicate,这个模块的输入是instance recognition模块的output,也就是一系列的detected objects,它们每个都有1024-d的特征,分类得分
s
0
s_0
s0还有bbox。而输出则是
s
0
∗
s
1
s_0*s_1
s0∗s1得到的最终分类分数。
接下来,以object relation module插入全连接层为例,来大致的了解一下,这篇文章中是怎么做的。
原有的的全连接的形式如公式(9)所示:
而这篇文章的解决的方法是直接在每个全连接层的后面接RM(relation module),我们前面提到过,RM不会改变输入的维度。如公式10所示。
RM右上角的
r
1
,
r
2
r_1,r_2
r1,r2表示的是RM的数量,因为RM不改变输出的维度,所以RM的数量可以任意的添加。说完了relation module在detection module(全连接层)的嵌入之后,另一部分就是其在NMS模块的嵌入啦,也就是Figure3中的右侧部分(上面有简单的介绍,下面会详细点的说一下)。
NMS的思想简单讲就是根据将和当前预测得分最高的框的IOU大于某个阈值的框删除掉。因此这其实是一个二分类的问题,也就是针对每个ground truth,只有一个预测为该类的框是对的,其他预测为该类的框都是错的。具体实现参考前面的Figure3(b),其中
s
0
s_0
s0是预测框的socre,这个socre对应公式9和10中最后一行的输出socre;
s
1
s_1
s1是二分类的结果(1表示对的,0表示错的,要移除)。那么这个二分类怎么做呢?主要分成3步:
1、先获取输入score的排序信息(index),然后对index做embedding,并将embedding后的index和图像特征(f)通过一些全连接层(维度从1024降为128)后进行融合,融合后的特征作为relation module的输入之一。
2、预测框的坐标作为relation module的另一个输入,经过relation module后得到关系特征。
3、关系特征经过一个线性变换(Figure3(b)中的
W
s
W_s
Ws)后作为sigmoid的输入得到分类结果,这样就完成了预测框的二分类,且基于的特征引入了attention。
因此将NMS纳入end-to-end训练后,整体网络的损失函数不仅包含原来的坐标回归和分类损失函数,还包含NMS的二分类损失函数。
作者认为这么做的好处如下:
- output的时候,NMS需要一个预设置的参数;而duplicate removal模块是自适应学习参数的。
- 通过设置不同的ηη,可以将模块变成多个二分类问题,并取其中最高的值作为输出,作者经过试验,证明这种方式较单一阈值的方式更可靠。
- 作者发现阈值的设置和最后的指标有某种联系。例如mAP0.5在η为0.5时的效果最好,mAP0.75同理,而mAP使用多个η效果最好。
- 最后,就是η的含义问题。η本质上代表的是分类和定位问题的权重,它的值设置得越高,说明网络越看重定位的准确性。
在这里作者也提出了几个问题,并进行了解释。
- 只有一个样本被划分为correct,会不会导致严重的正负样本不均衡?
答案是否定,网络工作的很好,这是为什么呢?因为作者实际运行发现,大多数的object的 s 0 s_0 s0得分很低,因此 s 0 s_0 s0和 s 1 s_1 s1就很小,从而导致 L = − l o g ( 1 − s 0 s 1 ) L=−log(1−s_0s_1) L=−log(1−s0s1)和梯度 ∂ L ∂ s 1 \frac{\partial L}{\partial s_1} ∂s1∂L都会比较小。 - 设计的两个模块功能是否矛盾?因为instance recognition要尽可能多地识别出high scores的物体,而duplicate removal的目标是只选择一个正样本。
作者认为这个矛盾是由 s 0 s_0 s0和 s 1 s_1 s1来解决的,instance recognition输出的高 s 0 s_0 s0可以通过较低的 s 1 s_1 s1来调节。 - duplicate removal是一个可以学习的模块,和NMS不同,在end2end训练中,instance recognition输出的变化会直接影响到该模块,是否会产生不稳定性?
答案也是否定的,实际上,作者发现end2end的训练方式更好,作者认为这是由于不稳定的label某种程度上起到了平均正则化的作用。
疑问:对这个模块还是有些许的疑惑,可能要去看一下源码来进步的了解。主要疑惑点在于是不是每一个类别都有一个分支,也就是是不是class specific。(看的其他的博客也没有解释这个问题),回头看源码会思考这个。
4. experiments
Table1主要做了3个验证:
1、验证引入位置特征(geometric feature)的有效性(a);
2、验证关系特征数量的影响(b);
3、验证relation module在两个全连接层中的数量的影响(c)。
Table2主要是验证RM效果提升是否是因为参数量增加带来的。因此这里做了一些增加
f
c
f_c
fc层、加宽
f
c
f_c
fc层和增加residual结构的操作,最后表明效果的提升并非由于参数量提升带来。
Table5是关于在不同算法上引入RM的效果。
5.Summary
个人觉得本文提出的这个relation module 是一个很有意思的点,idea来自于NLP的启发,可以看出扩宽知识面的重要性,而且感觉这个思路也是一个很好的切入点。但是,个人感觉这篇文章还是比较的粗糙,比如,文章中的实验都是在基于Faster RCNN系列上进行的,也就是我们说的two stage方法,那么它适不适用于Yolo等系列的one stage呢?(文章中说的是适应于现在的顶尖的检测方法)需要自己去验证一下。还有就是这个relation module到底学到了什么?作者并没有给出详细的解释。在CVPR2019上好像有relation module最新的研究,我准备去看一下,比较一下。
参考资料
Relation Networks for Object Detection算法笔记 强烈安利,结合了代码进行的分析
Relation Networks for Object Detection 笔记 盗用了几张图片