CVPR2018. Iterative Visual Reasoning beyond Convolutions

CVPR2018. Iterative Visual Reasoning beyond Convolutions

论文地址

代码地址(PyTorch)

代码地址(Tensorflow)

arXiv

1
2
3
4
5
6
7
@InProceedings{Chen_2018_CVPR,
author = {Chen, Xinlei and Li, Li-Jia and Fei-Fei, Li and Gupta, Abhinav},
title = {Iterative Visual Reasoning Beyond Convolutions},
booktitle = {Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2018}
}

文章提出了迭代视觉推理的最新框架,框架解决了卷积网络缺少推理能力的问题,包含两个核心模块:使用空间记忆来利用并行更新存储过去信息的局部模块、全局图推理模块。图模块包含三部分:

  1. 知识图用于表示每一类之间的关系
  2. 区域图用于表示区域之间的关系
  3. 分配图用于表示区域和类别之间的关系

最后文章用注意力机制结合了上述两种模块。在ADE上获得了8.4%的提升。

主要问题

目前视觉系统缺乏像人类一样的情景推理能力,因此关键问题在于如何利用空间和语义推理来构建下一代的视觉系统。关系推理的关键在于迭代式地进行估计,目前有自顶向下和使用精确记忆的研究,但有两个问题:

  • 堆叠卷积缺少全局推理能力。
  • 两种样本都假设有足够的样本用于学习数据间的关系,但大量样本并不容易得到。

因此需要增加额外的结构化信息用于视觉推理。

文章贡献/创新点

文章提出了结合空间和语义推理的通用框架,可以从知识库中学习到结构化信息用于视觉识别。核心模块包含两部分:

  • 局部模块基于空间记忆,用于利用卷积网络执行像素级别的推理。
  • 全局模块用于在超越局部区域的层次执行推理,模块的推理基于图结构。图结构包含三个组件:知识图编码类别间的语义关系、区域图编码区域间的语义关系、分配图将区域分配到类别上。

利用这种结构,文章开发了一个推理模块来在图上传递信息,局部模块和全局模块都迭代展开、交叉传递信息以便优化估计结果。另外局部和全局推理并不割裂,因此文章采用了注意力机制来将两者结合起来。

所提方法

文章提取了推理框架,除了来自卷积网络的预测p0p_0,框架还包含了两个核心模块来进行推理预测,总体结构如下图所示:

采用卷积地推理

文章采用空间记忆S\mathcal S来存储以前的信息,其维度H×W×DH\times W\times D分别等于图片下采样后的高、宽和512个通道。文章采用softmax之前的logits和底层卷积层hh的特征图进行拼接,用于送入记忆模块中。

给定区域rr,文章首先裁剪出对应的特征并采用双线性差值resize到固定的7×77\times 7维度,然后softmax之前获取的logits向量ff拼接到49个位置。然后两个1×11\times 1卷积用于融合信息,形成输入特征frf_r。同样记忆S\mathcal S中的对应区域也被裁剪为7×77\times 7,表示为srs_r,对齐后采用卷积门控循环单元来写入记忆:

sr=usr+(1u)σ(Wffr+Ws(zsr)+b)s_r'=u\circ s_r+(1-u)\circ\sigma(W_ff_r+W_s(z\circ s_r)+b)

其中srs_r'是用于更新区域rr的记忆,uu是更新门,zz是重置门,WfW_fWsW_sbb是卷积权重和偏执,\circ是按元素乘法,σ\sigma是解惑函数。更新之后再采用crop和resize操作放回记忆池中。

此处没有采用之前工作中的crop和resize逆操作,而是直接采用crop and resize操作放回去,如果区域尺寸比记忆池中尺寸小的时候,如何crop让尺寸放大为记忆池中的尺寸呢?。

并行更新

文章采用并行更新记忆,为了解决记忆中同一单元被不同区域覆盖多次的问题,文章提出了权重矩阵Γ\Gamma,其元素γr,c[0,1]\gamma_{r,c}\in[0,1]来记录区域rr对单元cc的贡献量,最后单元的更新值为所有区域的加权平均。

这里权重矩阵如何得到,网络自适应学习吗?

真正的推理模块为卷积网络C\mathcal C,包含3×33\times 3卷积和两个40964096维度的全连接层,将S\mathcal S作为输入,执行预测。

超越卷积

文章第二个目的是超越卷积的局部区域限制来实现全局推理,全局推理包含空间上和语义上的全局推理。空间只各个区域直接相互交流,不受感受野限制,语义只利用视觉知识库提供额外的类别知识作为全局先验。

为了实验这两种全局推理,文章构建了图G=(N,E)\mathcal G=(\mathcal N, \mathcal E),其中N\mathcal NE\mathcal E表示点集和边集。文章在N\mathcal N中定义了两类点:区域节点Nr\mathcal N_r和类别节点Nc\mathcal N_c

对于边,文章设计了三种图来表示不同关系。空间图Err\mathcal E_{r\rightarrow r}编码区域间的关系。文章设计了多种边来刻画相对位置,包括最基本的“左右”、“上下”关系,意在假设越接近的区域约相关。文章没有直接使用原始距离,而是归一化到[0,1][0,1]

κ(x)=exp(x/Δ)\kappa(x)=\exp(-x/\Delta)

其中Δ=50\Delta=50为带宽。此外文章还编码了覆盖模式,即计算任意两个区域之间的IoU。

分配图erce_{r\rightarrow c}用于建立区域到类别之间的关系。文章选择sofrmax之后的概率来作为区域和类别之间的权重,这样对于错误估计更鲁棒。

语义图从知识库中构建得到,用于构建类别之间的关系Ecc\mathcal E_{c\rightarrow c},其中包含了多种边,包括“is-kind-of”、“is-part-of”、“similarity”等关系,可以认为是来自人类的先验知识。这种先验知识或者由手工列出、或者自动收集,每种关系几乎都可以帮助识别任务,文章使用了两种图来表示先验知识。

图推理过程中,图的输入为MrRR×DM_r\in\mathbb R^{R\times D}来表示所有区域的节点,其中D=512D=512位特征通道维度,RR为区域数量。对于类别节点ncn_c,用off-the-shelf词向量来作为便捷的表示,表示为McRC×DM_c\in\mathbb R^{C\times D}。但这只是中间表示,文章设计了两条推理路径来学习输出最终的输出特征GrG_r

空间路径只包含区域节点:

Grspatial=eErrAeMrWe G_r^{spatial}=\sum_{e\in\mathcal E_{r\rightarrow r}}A_eM_rW_e

其中AeRr×rA_e\in\mathbb R^{r\times r}为邻接矩阵,WeRd×dW_e\in\mathbb R^{d\times d}为权重。

语义路径通过类别节点进行信息推理:

Gcsemantic=eEccAeσ(AercMrWerc+McWc)WeG_c^{semantic}=\sum_{e\in\mathcal E_{c\rightarrow c}}A_e\sigma(A_{e_r\rightarrow c}M_rW_{e_r\rightarrow c}+M_cW_c)W_e

文章首先通过分配图AercA_{e_r\rightarrow c}WercW_{e_r\rightarrow c}将区域映射到类别。然后聚集类别间的多种类型的边,最后将两条路径聚合。

Gr=σ(Grspatial+σ(AecrGcsemanticWecr)) G_r=\sigma(G_r^{spatial}+\sigma(A_{e_c\rightarrow r}G_c^{semantic}W_{e_c\rightarrow r}))

其中AecrA_{e_c\rightarrow r}WecrW_{e_c\rightarrow r}将类别重新映射回区域,经过激活后和区域相加,最后再应用非线性激活函数。

文章采用了具有残差连接的三层堆叠的上述操作,然后输出结果。

迭代推理

推理的一个关键组件是建立迭代估计过程,文章采用精确记忆来构建迭代质检的信息传递流。局部模块使用空间记忆S\mathcal S,全局模块使用另一种记忆M\mathcal M但不具备空间结构。每步迭代中记忆Si\mathcal S_iMi\mathcal M_i用于通过推理模块生成新的预测结果filf_i^lfigf_i^g,两者可以用于更新记忆模块Si+1\mathcal S_{i+1}Mi+1\mathcal M_{i+1},然后新的记忆会在此引导新一轮的更新fi+1f_{i+1}

然而局部记忆和全局推理不应当完全割裂,因此文章引入了cross-feed连接来共同生成推理。推理后局部和全局特征拼接到一起通过GRU来更新Si+1\mathcal S_{i+1}Mi+1\mathcal M_{i+1}

注意力

文章对输出做了调整,模型除了输出分类分数ff,也会产生注意力值aa表示当前预测相比之前迭代的相对权重,然后融合输出是所有迭代输出的加权平均。如果网络展开II次,输出为2N+12N+1(包括I个局部和I个全局输出,以及原始的来自卷积网络的1个输出),最后执行加权:

f=nwnfn,wn=exp(an)nexp(an)f=\sum_nw_nf_n, w_n=\frac{\exp(-a_n)}{\sum_{n'}\exp(-a_{n'})}

其中fnf_n为softmax之前的logits,最后会经过激活产生输出pnp_n

训练

网络整体框架可以端到端训练,总损失函数包括三部分:纯卷积网络损失函数L0\mathcal L_0,局部模块损失Lil\mathcal L_i^l,全局模块损失Lig\mathcal L_i^g和最后带有注意力机制的输出损失Lf\mathcal L_f

文章希望更关注难样本,因此提取了简单的重加权,对于迭代i1i\geqslant 1的区域rr,交叉熵损失计算为:

Li(r)=max(1.pi1(r),β)rmax(1.pi1(r),β)log(pi(r))\mathcal L_i(r)=\frac{\max(1.-p_{i-1}(r),\beta)}{\sum_{r'}\max(1.-p_{i-1}(r'),\beta)}\log(p_i(r))

β\beta控制权重分布的熵,β=1\beta=1是为均匀分布,当β=0\beta=0是熵最小化。实验中β=0.5\beta=0.5pi1(r)p_{i-1}(r)为前一次迭代的特征,不包含反向传播,p0(r)p_0(r)为纯卷积网络的输出。

仿真实验

数据集

文章选择了Visual Genome和ADE数据集。ADE数据集包含20210张图片用于训练,验证集2000张图片被划分为1000张验证集和1000张测试集,采用原始名字。文章过滤了小于5个实例的类别,剩余1484类。文章标注中包含五类先验知识图:

  • is-part-of: leg and chair
  • is-kind-of: jacket and clothes
  • plural-form: tree and trees
  • horizontal-symmetry: left-arm and right-arm
  • similarity: handle and knob

VG数据集采用v1.4版本,划分整个数据集的108077张图片为100K、4077和4K作为训练集、验证集和测试集。文章采用synsets而不是原始名称。对于知识图谱,文章采用了数据集中关系标注的10种最常见关系来自动构建边。对于没类关系,边的权重执行行归一化。

最后文章还展示了在COCO上的结果,但是该数据集是检测导向的,只有80类。因此文章报告了在没有知识图谱没有测试集划分情况下的结果。

任务和评估

文章在区域分类任务上评估系统性能,每个区域直接采用标注的位置。原因有三:

  • 评估,因为随着字典中类别数量的增长,缺失标注不可避免,特别是对于物体局部和相关类别。如果标签缺失,网络不知是预测错误还是标注缺失,因此借鉴其他领域的做法,仅在已知ground-truth区域的标注上进行评估。
  • 尽管分类是检测和分割的简化版本,但包含了丰富的标签,包括“stuff”和“object”,建立stuff-object和实例之间的关系在纯粹的检测和分割设置中也没有。
  • 尽管目标检测也可以用off-the-shelf,额外的人工定义的参数和组件会限制有益的情景信息量。
  • 采用端到端学习输入固定的区域,可以去除定位误差,关注与情景帮助判别类别的益处。

实现细节

文章采用faster-rcnn作为baseline,移除了bounding box回归和region proposal分支,图片放大到短边为600像素。文章采用ResNet-50作为预训练特征提取器。conv4层的输出被用来根据RoI和ground-truth boxes来计算区域特征(采用max-pool缩放到7×77\times 7维度)。所有conv5层被用来获取用于basline输出p0p_0的最后特征。

对于局部模块,文章采用conv4层作为中间特征,输入空间记忆S\mathcal S,对于全局模块,最后conv5的经过avg-pool后的中间特征作为中间级特征。两个特征输入和softmax之前的logits-ff进行融合,然后输入记忆单元。使用fastText词向量来表示每个类别,文章展开推理模块3次,每次迭代时并行地更新所有区域。

主要结果