这是一篇其他文章里面的参考文献,感觉比较有新意。然后一搜,果然,CSDN 也有一篇 博文,但可惜是翻译后的文章,未能满足我的要求,最重要的是没有核心算法框架图与 LaTeX 公式,因此特地再开一篇博文。
目前有很多采用基于预训练的目标检测器来解决 VQA 中的视觉定位问题,但需要 Bounding boxes 级别的标注。本文利用 VQA 任务来进行一种弱监督的视觉定位。具体来说,提出了一种基于查询的视觉胶囊模块,该模块选择出特定的胶囊特征,使得模型能够关注于与问题相关的区域。将本文提出的胶囊模块整合到用于 VQA 的 SNMN 和 MAC 网络中,在 CLEVR-Answer(自制的) 和 GQA 数据集上表现很好,同时在 VQA 任务上也表现优秀。
首先指出 VQA 的应用很多,但是不知道这些答案是否真的基于正确的视觉线索来回答问题,于是产生了视觉定位任务。如下图所示,模型不仅要给出文本化的答案,而且要指出依赖的哪些区域来给出答案的。通用的方法是采用与问题相关的注意力图来判断定位的区域。
大多数的工作利用预训练的目标检测模型或者与问题相关的 bounding boxes 标注来解决视觉定位任务,本文关注的是基于 VQA 任务的弱监督视觉定位问题,VQA 任务和视觉定位任务都可以单独根据 VQA 的设定来监督。
想要正确的定位,需要解决两个主要问题:找到与问题相关的视觉实例;建模这些实例之间的关系。因此,本文提出采用胶囊网络来拓展当前的 VQA 框架,解决该任务。因为胶囊网络层可以通过路径协议学习 部分-整体 之间关系,而这种学习能力可以解决 VQA 中弱监督视觉定位的问题。
目前基于胶囊的方法一般都是在卷积特征之上添加额外的胶囊层,这些层可以利用目标类别监督( mask 掉除 GT 类别之外的胶囊)。但是在 VQA 中,并没有类别标注或者基于目标的监督信息提供,因此本文提出一种 “soft-mask” 机制选择那些与问题相关的胶囊。一旦无关的胶囊被 mask 掉,那么与问题相关的胶囊就可以传递给推理步骤,从而完成 VQA 任务。
本文考虑两种视觉定位数据集,GQA 和自制的 CLEVR-Answers 数据集。注意,在训练过程中并不使用 GT boxes 训练,而只在评估时使用。所采用的 VQA 模型为 MAC 和 堆叠的 NMN (都是比较老的模型了)。
目前的 VQA 模型依赖于目标特征来提高模型的精度,一些基于网格的特征也能够作为目标特征来训练 VQA 模型,但是这些方法并未评估其答案的定位是否准确。
因此,一些少量的数据集,GQA、VCR、VQS、CLEVRER、TVQA+ 给出了所有目标的位置标注或者与问题相关的所有目标标注。这里面,GQA 特别关注于评估那些有/无目标检测下算法(如 MAC 和 BottomUP )的定位能力。因此,本文采用 GQA 数据集评估弱监督定位的胶囊增强型系统,评估指标是正确回答时的重叠面积与 IOU。
CLEVR 数据集采用合成式的问题,是一种诊断类型的数据集,用来测试模型的推理能力,但很多工作在这个数据集上已经实现了近乎完美的精度,所以现在没多少人用了。取而代之的是本文为所有问题都提供 bounding boxes 的 CLEVR-Answers,能够无限制地评估模型的定位能力。
首先介绍下胶囊网络的引进,以及现有的改进:胶囊网络可以应用到分类和分割任务中。由于本文采用弱监督方式,因此需要对其修改:胶囊作为层结构插入到模型中,通过弱监督的 VQA 来学习。介于没有分类标签的监督,因此本文提出一种新颖的 “soft-masking” 操作,有选择性的学习与输入问题相关的胶囊并 mask 掉无关的胶囊。
输入为图像 I I I 和问题 Q Q Q,输出为答案 a ∈ A a\in A a∈A,其中 A A A 为答案词汇, B B B 表示答案对应的 Bounding box。
由 l l l 个单词组成的问题 { w 1 , w 2 , … , w l } ∈ Q {\{}{w_{1},w_{2},\dots,w_{l}}{\}}\in Q {w1,w2,…,wl}∈Q, V V V 表示训练集中问题词的单词表,对应一个查找 embedding 矩阵 E ∈ R ∣ V ∣ × d e E\in\mathbb{R}^{|V|\times{d}_{e}} E∈R∣V∣×de,即问题中的每一个词 w l w_{l} wl 都采用一个 d e d_{e} de 维度的初始 embedding 向量来表示。 ϕ ( Q , [ w 1 , w 2 , … , w l ] ) \phi(Q,[w_{1},w_{2},\dots,w_{l}]) ϕ(Q,[w1,w2,…,wl]) 为句子编码器, ϕ \phi ϕ 设为 BiLSTM,输出句子(问题 Q Q Q )级别的 embedding f s ∈ R d q f_{s}\in\mathbb{R}^{{d}_{q}} fs∈Rdq 和词( w l w_{l} wl )级别特征 f w ∈ R d q , d q = 2 × d f_{w}\in\mathbb{R}^{{d}_{q}},{{d}_{q}}=2\times d fw∈Rdq,dq=2×d, d d d 是句子编码器的维度。词向量维度:300。
对于一幅图像 I I I,计算其特征图 X = ϕ ( I ) X=\phi(I) X=ϕ(I),其中 ϕ \phi ϕ 为预训练的图像编码器, X ∈ R H × W × d f X\in\mathbb R^{H{\times}W{\times}d_{f}} X∈RH×W×df 表示从 I I I 中提取到的特征, d f d_{f} df 为特征维度。这里并未训练一个图像编码器,查看源码提供的特征,估计也是Faster R-CNN直接抽取数据集的7x7x2048维度特征。
VQA 系统通常会迭代的选择那些有助于回答问题的词汇,这种将问题划分为子序列查询的方式称之为多跳或循环 推理。每一个推理步骤产生的子序列查询会收集与答案相关的图像信息。用 ρ \rho ρ 表示子序列生成器,输入为句子 embedding f s f_{s} fs 和 词 embedding f w f_{w} fw。每一个时间步 t ( t = 1 , 2 , … , T ) t\left(t=1,2,\dots,T\right) t(t=1,2,…,T) 上的输出子序列查询 q t q_{t} qt 为:
q t = ρ ( f s , f w ) , ∀ t ∈ { 1 , 2 , … , T } q_{t}=\rho\left(f_{s}, f_{w}\right), \forall t \in\{1,2, \ldots, T\} qt=ρ(fs,fw),∀t∈{1,2,…,T}
每一个胶囊是一个实体或者一个整体的部分特征表示,本文利用一组逻辑单元(称之为激活层)和一组 4 × 4 4\times4 4×4 的位姿矩阵(称之为位姿 pose )组成矩阵胶囊(在胶囊网络中,这就是基本概念),其中激活层旨在判断特定实体是否存在,位姿表示实体的属性信息。一个胶囊层有很多个胶囊,每一个胶囊都采用一种路径协议( routing-by-agreement )的算法在接下来的层中给相应的胶囊投票,从而建模 部分-整体 的信息。针对胶囊路径的排列,矩阵胶囊采用 E M − R o u t i n g EM-Routing EM−Routing 算法。
E M − R o u t i n g EM-Routing EM−Routing,循环3次:
参考:一、如何看待Capsule的第二篇论文Matrix Capsules with EM Routing?
二、揭开迷雾,来一顿美味的Capsule盛宴
三、再来一顿贺岁宴:从K-Means到Capsule
四、三味Capsule:矩阵Capsule与EM路由
对图像的 embedding 特征 X X X,采用一组线性卷积来获得主胶囊,主胶囊为 C 1 C_{1} C1 类型的胶囊,每一种都有 4 × 4 4\times4 4×4 的位姿矩阵(维度 R H × W × C 1 × 4 × 4 \mathbb{R}^{H\times{W}\times{C}_{1}\times{4}\times{4}} RH×W×C1×4×4,源码 C 1 = 32 C_1=32 C1=32 )和每个空间位置的激活层(维度 R H × W × C 1 × 1 \mathbb{R}^{H\times{W}\times{C}_{1}\times{1}} RH×W×C1×1 )。之后通过 E M − r o u t i n g EM-routing EM−routing 算法在主胶囊的基础上获得每一个空间位置的更高维度的胶囊表示 C 2 C_{2} C2,每一种都有 4 × 4 4\times4 4×4 的位姿矩阵(维度 R H × W × C 2 × 4 × 4 \mathbb{R}^{H\times{W}\times{C}_{2}\times{4}\times{4}} RH×W×C2×4×4,源码 C 2 = 32 C_2=32 C2=32 )和每个空间位置的激活层(维度 R H × W × C 2 × 1 \mathbb{R}^{H\times{W}\times{C}_{2}\times{1}} RH×W×C2×1 )。
原则上可以将激活层( R H × W × C 2 × 1 \mathbb{R}^{H\times{W}\times{C}_{2}\times{1}} RH×W×C2×1 ) 和位姿矩阵( R H × W × C 2 × 4 × 4 \mathbb{R}^{H\times{W}\times{C}_{2}\times{4}\times{4}} RH×W×C2×4×4 )用一个 shape 的张量 ( R H × W × C 2 × ( 4 × 4 + 1 ) \mathbb{R}^{H\times{W}\times{C}_{2}\times\left({4}\times{4}+1\right)} RH×W×C2×(4×4+1) )来表示,即标准卷积下的特征图,但由于此方式将胶囊姿态中的每个维度视作独立的特征,忽略了胶囊姿态中的所有维度都代表单个对象或实体的事实(割裂了部分-整体 之间的联系)。
本文并未采用上述做法,而是基于问题来选择相应的胶囊。具体来说,对于每一步的推理,将一系列的 C 2 C_2 C2 送入一个全连接层得到与所给子序列查询相关的 logits,表示为胶囊类型的相关度 m t logits = η ( q t ) m_{t_{\text {logits }}}=\eta\left(q_{t}\right) mtlogits =η(qt),其中 logits \text {logits } logits 是推理步 t t t 的问题查询, η \eta η 是全连接层。之后利用 m t logits m_{t_{\text {logits }}} mtlogits 产生 one-hot mask m t ∈ R C 2 m_{t}\in\mathbb{R}^{{C}_2} mt∈RC2( m i = 1 m_i=1 mi=1,当且仅当 i = a r g m a x ( m t logits ) i=argmax\left(m_{t_{\text {logits }}}\right) i=argmax(mtlogits )时)。得出的 m t m_{t} mt 用于 mask 视觉胶囊 V m c t V_{m c_{t}} Vmct :
V m c t = softmax ( η ( q t ) ) ⊙ Y c 2 V_{m c_{t}}=\operatorname{softmax}\left(\eta\left(q_{t}\right)\right) \odot Y_{c_{2}} Vmct=softmax(η(qt))⊙Yc2
之后 V m c t V_{m c_{t}} Vmct 用于推理操作,而这些操作由选择的模型( MAC 和 SNMN )所定义。
所有推理步骤聚合后的特征即为推理模块的输出特征,喂给输出模块,也就是输出答案分数的分类器。对于预测视觉目标的位置,本文采用推理模块产生的空间注意力图和后处理步骤得到目标的位置。
将胶囊整合到两个 VQA 模型中:SNMN、MAC。
首先是 MAC 网络的介绍,MAC 是具有 T T T 个推理步骤的循环推理框架,每一推理步骤都会产生一个基于问题的控制信号(问题序列查询),使用这个信号可以读取图像特征(使用注意力)和写入记忆。经过 T T T 步之后最终的输出联合问题一起送入答案分类器。至于为啥用 MAC,是因为能够产生具有解释性的注意力图。
为将胶囊整合到 MAC 中,做出下列改变:读模块负责关注空间图像特征和检索与序列查询相关的图像特征,读模块输入为之前的输出和当前的控制信号(在时间步 t \text{t} t 上基于问题的特征);在读模块内部,使用一个线性层将控制信号映射到特征维度 C 2 × ( 4 × 4 + 1 ) C_2\times\left(4\times{4}+1\right) C2×(4×4+1),此特征向量之后用于产生 soft mask 来获得仅与序列查询相关的胶囊。MAC 中所有的 mask 层共享权重。
SNMN 是一种基于注意力的 VQA 模型,有着 MAC 类似的推理步骤,同时产生可解释性的注意力图。首先,SNMN 在预训练的图像特征上训练卷积层,这些卷积层的输出之后送入推理模块并使用问题查询来执行推理操作,最终输出注意力图。为整合胶囊到 SNMN 中,将胶囊模块添加到图像特征的上层来获取 C 2 C_2 C2 视觉胶囊。与之前标准的 SNMN 步骤不同的是,推理模块现在在胶囊上进行推理。对基于序列查询的 soft masking,采用全连接层,输入为问题查询 q t ∈ R d q_t\in\mathbb{R}^{d} qt∈Rd,输出维度是 C 2 × ( 4 × 4 + 1 ) C_2\times\left(4\times{4}+1\right) C2×(4×4+1) 的特征向量。然后该特征向量用于产生尺寸为 C 2 C_2 C2 的胶囊 mask。SNMN 中的每一个推理模块均含有自己的 mask 层,除了 S c e n e , A n d , O r Scene,And,Or Scene,And,Or,因为这些推理模块没有使用上下文序列查询的参数。
为了给更高注意力的区域赋予更大的权重,在背景区域引入一个不透明度参数 α \alpha α,而不透明度可以根据 α \alpha α 来放缩。本文将其设为 0.5 0.5 0.5 来获得更高注意力区域的双分类 mask,其内的每一个值表示检测物体存在与否。
评估答案定位能力:精确度、召回率、F1 得分—— 重叠范围和 IOU。如果预测的 bounding box 和 GT 大于 0.5,即认为预测到的区域是正样本(用于精确度和召回率的计算)。由于两个 VQA 模型会在每一个推理步上产生注意力图,因此一些中间的注意力图上可能就会出现正确答案,而非最后一个推理步。这里计算 F1 得分是根据最佳的注意力图来的,换句话说,最后的注意力不一定就很好。
视觉胶囊模块中 C 1 = C 2 = C C_1=C_2=C C1=C2=C,即 C 1 C_1 C1 和 C 2 C_2 C2 层的胶囊个数相等。
同上表。
同上表。
同上表。
本文提出一种利用 VQA 任务进行弱监督视觉定位的方法,能够整合到现有的 VQA 模型中。为了提高胶囊模型的联合效率,提出了一种 soft masking 机制进一步提高性能。
序列查询生成器是 MAC 提出的循环模块,同样也在 SNMN 中使用。
u = W 2 ( [ W 1 t ( f s ) + b 1 ; q t − 1 ] ) + b 2 u=W_{2}\left(\left[W_{1}^{t}\left(f_{s}\right)+b_{1} ; q_{t-1}\right]\right)+b_{2} u=W2([W1t(fs)+b1;qt−1])+b2
其中, q t − 1 q_{t-1} qt−1 为 t − 1 t-1 t−1 步的输出, f s f_s fs 为问题特征的 embedding, W 1 t W_{1}^{t} W1t 的维度 d × d d\times{d} d×d, W 2 W_{2} W2 的维度 d × 2 d d\times{2d} d×2d,之后在问题词 embedding f w f_w fw 上产生注意力权重:
a w = softmax ( W 3 ( u ⊙ f w ) + b 3 ) a_{w}=\operatorname{softmax}\left(W_{3}\left(u \odot f_{w}\right)+b_{3}\right) aw=softmax(W3(u⊙fw)+b3)
其中 W 3 W_{3} W3 的维度 2 d × d 2d\times{d} 2d×d, a w a_{w} aw 表示在所有问题词上的注意力得分。 q t q_{t} qt 是 l l l 长度问题的 a w a_{w} aw 加权求和:
q t = ∑ w = 1 l a w ⋅ f w q_{t}=\sum_{w=1}^{l} a_{w} \cdot f_{w} qt=w=1∑law⋅fw
写在后面
忙活了一天,终于码完了,找个时间把代码跑一下。顺便提一下,Github 源码链接里面如果有文件下载不下来,可以在评论区留言,给出阿里网盘链接 ~