来源:论文,code,MSRA & PKU,2018 CVPR
知乎笔记
主要贡献:
- 提出了一种relation module,可以将常见的物体特征融合进物体之间的关联性信息,同时不改变特征维数,因此可以很方便加入已有的网络框架
- 提出了一种代替NMS的去重模块设计,避免NMS需要手动设置参数的问题,真正实现模型的end-to-end训练
论文阅读
Introduction
NMS模块被设计用来消除重复的检测结果,作者认为这样的一个后处理步骤是heuristic and hand crafted。一直以来人们都认为图片的上下文信息或者物体之间的关系能够帮助检测,但深度学习方法中还没有关注到物体之间的关系。
object relation module 本文受到NLP领域的attention模型的启发,注意力模块可以通过元素集合影响单独元素的表现,这样就能得到一个聚合的表征【提到了图像加标题的工作】。对比object和sentence的attention设置,可以看做是维度上的变化(2D/1D),因此由两部分组成:the original weight和new geometric weight,后者对物体的空间关系建模,只关注几何相对关系,因此具有平移不变性。完全可微而且in-place
Related Works
- Object realtion in post-processing:此前考虑到物体之间关系的工作基本是使用物体的关系重新打分,作为一个后处理过程出现,而且在深度卷积网络中很少使用
- Sequential relation modeling:有一些工作考虑将序列推理(LSTM/SMN)用到物体检测领域,前一个检测到的物体来帮助后面的物体检测。然而本文的工作是多物体并行化的
- Human Centered Scenarios:很多工作尝试通过对人的动作进行标注,来使用human-object的关系进行建模,而本文只是从object-object的角度进行,不需要特别标注
- Duplicate Removal:比GossipNet更为简单地去重模块设计,结果超过了SoftNMS,实现了模型end-to-end
Object Relation Module
【设计了一种in-place的加权方式,实际上将不同物体之间的关系表示为类似注意力的权重加到特征向量中,同时保持特征向量的维度不发生变化】
从Scaled Dot-Product Attention开始,输入为quires( q \mathbf{q} q), keys( K K K, dimension d k d_{k} dk), values( V V V, dimmension d v d_{v} dv),通过计算得到query和key的相似程度:
(1) v o u t = s o f t m a x ( q K t d k ) V v^{out}=softmax(\frac{\mathbf{q}K^t}{\sqrt{d_{k}}})V\tag{1} vout=softmax(dkqKt)V(1)
接下来描述物体之间关系的计算。一个物体包括几何特征 f G \mathbf{f}_{G} fG和表现特征 f A \mathbf{f}_{A} fA,本文中 f G \mathbf{f}_{G} fG使用4维bounding box, f A \mathbf{f}_{A} fA则通过task决定。这样,得到 N N N个物体的集合 { ( f G n , f A n ) } n = 1 N \{(\mathbf{f}_{G}^{n},f_{A}^{n})\}_{n=1}^{N} {(fGn,fAn)}n=1N,考虑到所有的物体和第 n n n个物体的的关系特征relation feature f R ( n ) \mathbf{f}_{R}(n) fR(n)为:
(2) f R ( n ) = ∑ m ω m n ⋅ ( W V ⋅ f A m ) \mathbf{f}_{R}(n)=\sum_{m}\omega^{mn}\cdot(W_{V}\cdot\mathbf{f}_{A}^{m})\tag{2} fR(n)=m∑ωmn⋅(WV⋅fAm)(2)
也就是针对周围物体特征的一个加权和, W V W_{V} WV和Eq.(1)中的 V V V相对应,权重的计算方式为:
(3) ω m n = ω G m n ⋅ exp ( ω A m n ) ∑ k ω G k n ⋅ exp ( ω A k n ) \omega^{mn}=\frac{\omega_{G}^{mn}\cdot\exp(\omega_{A}^{mn})}{\sum_{k}\omega_{G}^{kn}\cdot\exp(\omega_{A}^{kn})}\tag{3} ωmn=∑kωGkn⋅exp(ωAkn)ωGmn⋅exp(ωAmn)(3)
(4) ω A m n = d o t ( W K f A m , W Q f A n ) d k \omega_{A}^{mn}=\frac{dot(W_{K}\mathbf{f}_{A}^{m},W_{Q}\mathbf{f}_{A}^{n})}{\sqrt{d_{k}}}\tag{4} ωAmn=dkdot(WKfAm,WQfAn)(4)
通过W矩阵将 f \mathbf{f} f映射到一个子空间中来评价不同的特征之间相似程度如何, d k d_{k} dk是映射后的特征维度
(5) ω G m n = m a x { 0 , W G ⋅ ε G ( f G m , f G n ) } \omega_{G}^{mn}=max\{0,W_{G}\cdot\varepsilon_{G}(\mathbf{f}_{G}^{m},\mathbf{f}_{G}^{n})\}\tag{5} ωGmn=max{0,WG⋅εG(fGm,fGn)}(5)
这样的一个几何权重衡量在文中作者使用了其他方法做了对比实验。
基于需要考虑更多远距离物体的想法(原始的表征更多关注近距离物体),4维的几何位置表示被修改为:
( l o g ( ∣ x m − x n ∣ w m ) , l o g ( ∣ y m − y n ∣ h m ) , l o g ( w n w m ) , l o g ( h n h m ) ) T \left(log(\frac{|x_{m}−x_{n}|}{w_{m}}),log(\frac{|y_{m}−y_{n}|}{h_{m}}),log(\frac{w_{n}}{w_{m}}),log(\frac{h_{n}}{h_{m}})\right)^{T} (log(wm∣xm−xn∣),log(hm∣ym−yn∣),log(wmwn),log(hmhn))T
通过Eq.(5)中的 ε G \varepsilon_{G} εG将几何特征映射到一个高维的表示(通过计算不同波长下的cosine和sine函数),到的特征维度为 d g d_{g} dg【这里需要参考Attention Is All You Need 文章】。
最终将转换后的特征进行聚合:
(6) f A n = f A n + C o n c a t [ f R 1 ( n ) , . . . , f R N r ( n ) ] , for all n \mathbf{f}_{A}^{n}=\mathbf{f}_{A}^{n}+Concat\left[\mathbf{f}_{R}^{1}(n),...,\mathbf{f}_{R}^{N_{r}}(n)\right],\text{for all n}\tag{6} fAn=fAn+Concat[fR1(n),...,fRNr(n)],for all n(6)
至此,每一个Eq.(2)中的关系函数都被参数化了,即 ( W K , W Q , W G , W V ) (W_{K},W_{Q},W_{G},W_{V}) (WK,WQ,WG,WV)。
模块流程图
算法流程图
Relation Networks For Object Detection
Object Detection Pipeline
- 生成全图的feature,使用backbone完成
- 生成区域特征(regional features),基于全局feature进行region proposal的ROI Pooling
- instance recognition. 使用head network来预测proposal属于某个类的可能性并通过回归refine相应的bbox,这部分网络通常很浅
- 去重。使用NMS等
本文中提出的relation model被用在最后两步(instance recognation and duplicate removal)。作者将这个模块分别应用于Faster RCNN, FPN和DCN中。
Relation for Instance Recognition
对于特定的proposal,通过两个FC-1024和一个LINEAR得到 ( s c o r e n , b b o x n ) (score_{n},bbox_{n}) (scoren,bboxn),本文中将Relation模块加入到了两个FC之后,即:
通过加入relation模块可以有效地增强instance recognition的准确性。
Relation for Duplicate Removal
Duplicate removal被看做一个二分类问题(correct/duplicate),网络输入是一个检测到的物体的集合,每个物体有其1024维向量,分类score s 0 s_{0} s0以及bbox,网络针对每个物体输出一个 s 1 ∈ [ 0 , 1 ] s_{1}\in[0,1] s1∈[0,1]表示属于corret的可能性,将 s 0 s_{0} s0和 s 1 s_{1} s1相乘作为最终的得分。网络结构为:
-
Rank Feature:作者发现将score转化为rank而不是value能够带来更好的效果。即,将输入按照score进行排序,每个物体给一个 rank ∈ [ 1 , N ] \text{rank}\in[1,N] rank∈[1,N],然后将这个rank使用128-d feature进行embeded【这一步是怎么进行的?】,将1024-d fearture转换成128-d feature,相加产生网络输入。
-
Training:使用交叉熵损失进行训练,对所有类别检测到的所有box取平均。
需要注意的是,去重分类是一个类别极其不均衡的问题,但是在作者的实验中,只使用交叉熵损失就能够很好地工作。作者认为这是因为 s 0 s 1 s_{0}s_{1} s0s1的final score的功能,对于大部分的box来讲 s 0 s 1 s_{0}s_{1} s0s1很小,以至于求出来的梯度也很小,所以并不会对优化过程产生剧烈影响——使得训练过程更多的关注与少量的正确性样本。
-
Inference:为了增加速度,作者发现大部分的类别在 s 0 s_{0} s0就已经很小了,因此将这些类别在去重计算的类别中移除并不会产生太大影响。
Experiments
作者基于COCO数据集的80类物体进行实现,结果如下
- Table1可以看出作者的这种加权平均的方式还是有效果的,而且权重学习是有必要的
- Table2展示了在head部分修改的结果,这部分的改动提升还是比较统一的
- Table4展示了对比NMS的结果,其实这部分的提升还不是很明显
作者在结论中强调,关于relation模块到底学到了什么还不能确定,有待未来的工作发现。