读书笔记10:Non-local Neural Networks

摘要中,作者开门见山,强调卷积神经网络和循环神经网络的操作都是局域化的操作,在本文中,我们提出非局域化的操作(non-local operation),作为抓取长程相互关系的一个一般性的模块(a generic family of building bolcks for capturing long-range dependenices)。也即第一句话给出问题的背景,第二句话概述自己的方法。之后便是进一步更加具体的对自己的方法进行介绍:受到计算机视觉经典的非局域化方法(classical non-local means means method)的启发,我们的非局域化方法在计算某一个位置的响应的时候,是通过对所有位置的特征进行加权求和得到的。这个模块可以被插入到很多计算机视觉的框架中。在视频分类的任务中,即使没有什么修饰,non-local模型也能在Kinetics和Charades数据集上取得和现有方法相当或者更胜一筹的结果;在静态图片的识别任务中,我们的non-local模型在COCO数据集上提升了物体检测/分割和姿态估计的表现。后面这一部分,首先用一句话将算法的核心描述出来了,然后从应用的角度对算法进行分析,能够插入到计算机视觉的任务中、在什么什么任务上,在什么什么数据集上,模型的表现如何等等,都是模型的应用方面的描述。总结:第一句背景介绍,然后由浅入深简介模型,最后介绍模型的应用,构成了本文的摘要。

introduction第一段介绍了long-range dependencies是深度神经网络的核心内容,CNN通过堆叠网络增加receptive field实现目的,RNN通过recurrent operation(指的应该是上一hidden state的传入)来实现。第二段介绍了这些方法的局限性,具体说到:convolutional和recurrent操作都是对一个local neighborhood进行处理,CNN对空间上的local neighborhood,RNN是对时间上的咯local neighborhood进行操作,这种局域化的操作导致想获得long-range dependencies就要对神经网络进行层层堆叠,但这种层层堆叠会带来一些相应的局限性包括降低计算效率、造成优化的困难、以及信息不能方便的在两个相距较远的位置之间来回的传播。第三段介绍自己的模型,和abstract中的介绍类似,还是先说模型的一些特点:我们提出一个non-local operation,它是抓取long-range dependencies的高效的、简单的、一般性的组件。然后一句话是介绍是什么启发了作者提出这个模型:我们的模型是计算机视觉中经典的non-local mean operation的推广。之后是简单的描述算法是如何操作的:每个位置的计算都是对所有位置特征的加权求和,位置是分布在时间维度上,可以是分布在空间维度上,也可以是同时分布在时空两个维度上,这使得本文提出的模型既可以应用在图片、序列,也可以应用在视频上。第四段进一步介绍non-local operation的好处:不论两个位置相距多远,模型都能直接抓取他们之间的dependencies;non-local operation更高效,只需几层网络就可以达到最好的效果;可以处理不同尺寸的输入,也可以和其他操作例如卷积相结合。第五段从实验的角度进一步介绍模型,介绍说自己的模型在视频分类任务上体现出了优越性,单独的non-local block就能抓取视频序列中的长程dependencies,多个blocks就能在精度上超越CNN,在两个数据集上还做了ablation study,最后提到本文的模型只需要使用RGB数据而不需要optical flow或者multi-scale testing等修饰手段就能和这两个数据集上最好的模型打成平手或者超过他们。最后一段介绍了用object detection/segmentation和pose estimation任务来检验模型的结果,最后一句话强调本文模型的有效性。总结来说,introduction部分的思路是这样的:首先介绍处理我们关注的问题(long-range dependencies)的背景现状,第二段介绍这些手段的局限性,第三段简介自己的模型,第四段指出模型的优势,五六段结合实验结果进一步强调模型的优势。

related work介绍了六个相关的方向。non-local image processing:non-local means也是通过计算所有像素的加权求和得到卷积结果的算法,距离较远的像素可以基于patch appearance similarity来产生贡献。这个想法后来被发展出BM3D(block-matching 3D),这个算法即使和深度网络相比,都是很好的图像去噪的工具。Graphical model:这部分提到了conditional random field这种graphical model,这一部分没太看懂,应该是对graphical model知之甚少,可以去看一看相关内容。Feed-forward modeling for sequences:最近出现的通过很深的1D卷积网络来处理语言序列的模型,这些feedforward模型适用于并行计算,并且可以比常用的recurrent models更加高效。self-attention:本文的模型和这个密切相关,self-attention是对序列使用的,在序列的每一个位置计算相响应(response)的时候都是通过所有位置的加权求和得到的。Interaction networks:一开始是为了模拟物理系统提出来的,也就是处理由一些存在相互作用的物体构成的graph,它的变体还有relation networks。Video classification architectures:主要强调了使用3D卷积核来处理视频的模型。

接下来是技术部分,技术部分的思路是先给一个一般性的定义,再给具体的例子(比如指定函数具体形式等等具体化)。non-local operation的形式化定义很简单直接:

输出y和输入x是相同尺寸的,i和j都是标记位置的,可以表示输入或输出的任何一个位置,x是输入,C(x)是一个标准化因子,f的输出是一个标量,表示位置i和位置j之间的关系,例如密切程度或者别的什么衡量两者关系的量。g是一个unary function(输入只有一个值),它是用来计算输入信号在位置j的一个表示的,也就是对位置j原始的数据进行了一个处理,可能是线性映射或者别的什么。由于j是遍历输入的所有位置,也就是所有位置的信号都参与加权求和,因此是non-local的操作。与此相对,RNN一般是计算当前位置和时间维度上前一个位置的信号,CNN是卷积核覆盖区域的信号。non-local operation和全连接也是不一样的,因为全连接在加权所有信息的时候用的权重不是基于两两之间的关系的,而是直接学习的权重,此外,fc layer需要固定尺寸的输入,non-local layer不需要。作者在这强调道,这种non-local层可以和CNN或RNN结合起来,non-local层可以用在深度网络的前面几层(和fc相反),这样能够同时抓取non-local和local信息,能建立更丰富的结构(放在前面是不是因为深度网络前面几层receptive field还不够大,不能抓取长程信息,所以在这加non-local,而后面几层已经有大的receptive field了,就不是那么需要non-local层了?但是应该也不是一点用没有?毕竟前面说到non-local能使信息方便的在相距较远的两个位置间传递,深度网络就算receptive field大,也不能做到这么方便的传递

接下来具体介绍几种函数g和f的选取,但是作者一开始就说,non-local模型对这些函数的选择并不敏感,说明模型的行为主要是由non-local的操作导致的,而不是具体函数决定的。为了简化,g只取做线性函数,若是空间二维的情况,这就相当于1x1的一个卷积,若是时空三维的情况,就是1x1x1的卷积,接下来就只是考虑函数f的选择了。

第一个选择是高斯函数,此时。将高斯函数延伸一下就是embedded Gaussian函数,意思是先embed,再应用高斯函数,。为了证明模型的行为和softmax函数的行为没有太大的关系,第三种函数设计为简单的dot product,此时,由于输入的尺寸不固定,因此normalization项是必须的。第四种函数是连接(concatenation),,这里[]是连接在一起的标记,是将连接在一起的vector映射到一个标量的矩阵,这时也是

为了能够将non-local operation添加到各种不同现存的模型中,单独定义了non-local block为这里面yi是的输出,xi指的是别的模型处理过的输出(residual connection),也就是non-local block是在其他架构的基础上添加了一个non-local term,这样可以在预训练好的模型上加入non-local机制而不影响原来的模型的行为,因为如果全都初始化为0的话,那么就相当于没有加上这一项。non-local block示意图如下

图中有一个细节,就是在进行non-local项计算的时候,首先用将输入的channel数变为一半,然后进行计算,最后输出的时候再用矩阵embedding回原来的channel数,这是为了节约计算资源而设计的bottleneck设计。此外为了进一步节约计算资源,还可以在计算non-local项的时候进行一下subsampling(例如pooling),然后再进行加权求和,减少参与计算的位置数量。本文将在所有的non-local block中使用这些提高计算效率的方法。

之后的一个部分作者介绍了如何利用non-local block搭建video classification model。一共有两个基准模型,一个是C2D模型,这个是为了分离出non-local网络的temporal effect,在C2D模型中,时间维度上只进行pooling操作,也就是只是简单的加和,没有复杂的操作。另一个是inflated 3D convnet(I3D)模型,这是将2D的k×k的kernel在时间维度上延展t帧。最终non-local net就是在这两个基准模型上加入non-local block。

整个技术部分的结构大概是这样的:首先给出模型的一般性描述,然后给出几个模型的具体化的instantiation,然后介绍了在具体的视频分类的任务上,模型是怎么设计的,总体来看是一个由一般到具体的过程。

最后就是实验部分了,整体分两个部分,第一部分是对视频数据分类,第二部分是对静态的图片的处理。在视频分类的部分,作者进行了十分详细的ablation study,对比了non-local block数目,C2D vs I3D,时间空间维度对比等等。还讨论了在什么阶段加入non-local block比较合适。对静态图片分类的处理,作者进行了物体识别,实例分割和关键点检测的任务。

猜你喜欢

转载自blog.csdn.net/b224618/article/details/81676285