ICCV2017. Spatial Memory for Context Reasoning in Object Detection

ICCV2017. Spatial Memory for Context Reasoning in Object Detection
xiuqhouICCV2017. Spatial Memory for Context Reasoning in Object Detection
建模实例级的情景、物体与物体之间的关系时非常有挑战的,因为需要推理不同类别、位置的锚框。实例级别的空间推理本质上需要建模以往检测之上的条件分布。但最新的目标检测方法基本都是并行检测所有目标,然后执行非极大值抑制。尽管在图片caption等任务中使用了图像级别的记忆,但是没有捕获空间布局的关系。另一方面,建模物体和物体之间的关系需要空间推理,我们不仅需要存储空间布局,也需要有效的推理模块来提取空间模式。文章提出了概念上简单但有效的空间记忆网络Spatial Memory Network(SMN)来建模实例级别的情景关系。空间记忆将物体实例集成会了伪“图像”表示,可以喂给其他卷积网络来完成物体到物体的情景推理。这就引出顺序推理体系结构,其中图片和记忆是被并行地处理,用于获取检测结果,检测结果又会用于更新记忆。SMN在COCO数据集上比Faster RCNN获得了2.2%的提升。
主要问题
情景对图片理解和视觉识别任务非常重要,目前有两类常用的情景模型:图像/场景级别的情景、在实例级建模对象关系的情景。目前目标检测任务中单个区域分类仍然占主要地位,文章认为神经元更大的感受野实际上能够实现图像级别的情景。但是近几年还没有多少模型成功建模物体到物体或实例级别的情景。因为实例级别的情景建模更有挑战性,需要解决不同类别、位置、尺度、宽高比的锚框对或锚框组。另外建模图像级别的情景,像素的网格结构能够显著减少情景的输入。但实例级别的空间推理需要对以往检测的条件分布,而现有目标检测系统没有任务记忆。多目标检测中联合分布也是通过并行地检测所有物体,然后用非极大值抑制来实现的。因此需要构建带有记忆的目标检测系统。目前在captioning和visual question answering任务中的记忆主要是图像级别的记忆,不能理解空间布局。另外建模物体-物体关系还需要空间推理,即不止需要存储空间布局,还需要用可行的推理模块来提取空间模式。
文章贡献/创新点
文章提出了SMN网络来建模实例级别的情景,文章认为卷积网络是当时建模空间和情景信息最通用和有效的网络,因因此文章中的空间记忆是将所有目标实例集成回伪“图像”表示,然后送入其他网络来实现物体-物体的情景推理。
- 目前的检测主要依赖于NMS在预定义的去重阈值下来实现推理,文章表明,如果能够使用空间记忆来记住已经检测到的物体,可能能够自动地学习到NMS的功能。
- 由于记忆存储了语义和位置信息,因此能够基于场景中的现有布局来推断下一个物体的种类和位置。
- 文章方法能够端到端训练,改进目标检测任务的表示。这种表示和想法也可以用于其他整体图片理解的任务。
空间记忆网络
目标检测的目标是给定图片来联合推断物体实例,其中是任何图片中物体实例的最大数目。则训练目标检测网络的目标函数是最大化似然:
其中,是空集。对于基于区域的目标检测器,该表达式可以近似为每个目标实例:
其中NMS肩负着建模整个检测序列之间关系的责任,但NMS主要依赖于锚框之间的覆盖模式,因此所能提供的信息远不如上面式子中的,即没有充分利用目标之间的关系。因此文章考虑到序列和推理任务中的记忆单元,提出将历史检测的结果编码到空间记忆中,引入记忆变量,每次一个目标实例被检测出来时该变量都会更新,目标函数近似表达为:
其中记忆和一起联合优化。
推理阶段主要分为四个部分:
- 首先初始化一个空的记忆单元。
- 一旦有目标实例被检测出来,相应区域的记忆单元用该物体相应区域的特征来更新。
- 情景模型聚集来自记忆的空间和其他信息,模型输出能够帮助进行候选框生成和区域分类。
- 依据下一个检测结果再次更新记忆单元。
上述过程不断进行,直到达到固定的迭代次数。
不太理解的是,这种记忆更新过程只在推理阶段进行,还是训练阶段和推理阶段都进行。
记忆初始化是每张图片执行一次初始化,还是网络训练结束后仅执行一次。
如何实现序列化地检测?得到检测结果后,再次对这张图片利用更新后记忆矩阵进行重检测吗?
记忆
文章将记忆初始化为二维矩阵,大小为。由于初始化的记忆和具体图片无关,因此应当反应自然图像的先验,当不同大小的图片到来时,直接用双线性插值来增加记忆矩阵的维度,保证和VGG中conv5_3提取的特征维度一致。
索引
对于空间记忆来说,空间记忆和图片有很自然的对应关系,每个目标物体对应的二维区域已经由候选框给出来了,直接利用RoI池化将空间记忆中的特征读取出来即可。
输入特征
由于conv5_3维护了空间信息,因此需要写入记忆。通过crop_and_resize操作,将特征图变换到,该操作和RoI相似但没有最大池化。此外,有可能同一区域出现多个物体,因此需要使用fc8的softmax值来来区分物体,该分数增加到conv5_3的每个位置,然后紧跟着两层卷积来融合信息。文章没有将分数变换为one-hot向量,以增强鲁棒性。
写入
给定区域位置和输入特征,使用卷积门控循环单元GRU来进行写入。使用的卷积核替代fc作为权重。为了对齐,原有记忆区域中的记忆也用相同的RoI池化操作裁剪为,新的记忆用crop_and_resize的逆操作放回中。
情景模型
编码在记忆单元中的物体经过五层全卷积神经网络得到提取的空间模式,每层卷积空间尺寸为,通道数为。
输出
对于输出推理结果的模块,文章采用了和Faster RCNN中conv5_3相同的配置,3层卷积用于区域候选,2层带有RoI池化的全连接用于区域分类,每个全连接有2048个神经元。文章设计了残差结构将Faster RCNN输出分数和记忆单元的输出分数结合起来,第一次迭代只使用Faster RCNN来进行检测,第二次迭代开始在Faster RCNN输出之上增加记忆单元的预测结果。因此能够明显看出有/没有情景的预测结果的不同。
选择下一个区域
由于空间记忆将目标检测转化为序列预测任务,因此最重要的是决定下一个区域。直观上看,有些目标能够提供给其他目标更多的情景信息(比如人),也有些目标更容易检测,不太容易产生误差。文章直接选择置信度最高的目标来更新记忆。
训练空间记忆
SMN和训练循环连接的网络一样,都需要展开多次再执行一次梯度更新。但是会有梯度传播和去重的问题。
学习去重
去重要求一个被检测到的物体不应该再次被检测到,因此需要设计一个模块来融合记忆网络和Faster RCNN网络的输出。当记忆是空的时候,需要使用Faster RCNN网络的输出,当记忆已经有物体存储时,网络需要忽略来自Faster RCNN的提示。
从图中来看,网络的输出似乎仍然也被用到了,为什么这里说忽略Faster RCNN的提示呢?
文章直接将两个信息扔进多层神经网络中去融合信息,在训练过程中遇到了收敛困难的问题。问题在于,因为网络需要去重,所以会持续接受冲突的信号,正常的信号用来指导感知,对抗的信号会组织更多感知。另外由于是从头开始训练的,因此它提供的信号是不可靠的,所以部分误差信号被传回了,影响后续的训练。因此文章从第二次迭代开始就停止了流向Faster RCNN的梯度,网络能够成功收敛。
为了进一步简化训练,文章也去除了第一次迭代时所有记忆相关的权重,因此有/没有记忆网络的预测结果的改变可以很容易地得到对比,网络和网络也可以单独进行训练。
RoI采样
为了避免负锚框过多,Faster RCNN设置了前后景锚框的采样率,而空间记忆学习去重的过程又会带来新的类型,有些区域的label和之前迭代的label不一致,为了防止这些区域被负样本淹没,文章改变了采样分布,以包含翻转的区域。由于采样具有随机性,可能会有高置信度的锚框没有被采集到,因此提高了网络随机性,能够避免过拟合。
这里是怎么实现的呢?要对比锚框两次迭代的label,需要额外保存下所有锚框的状态吗,另外锚框的坐标每次迭代也不一致,文章是如何确定同一区域的呢?
阶段性训练
文章将网络训练分为两个阶段,第一阶段线单独训练感知网络Faster RCNN,然后固定,训练空间记忆网络。文章还使用了课程学习策略,用预训练的少数迭代次数的SMN来引导多次迭代的SMN。